4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

vaultwardenをセルフホストする for Docker

Last updated at Posted at 2021-08-31

はじめに

dockerでbitwarden_rsを構築する」でbitwarden_rsを構築したが
いつの間にか vaultwarden というものに変わっていた。変更理由はサービス名が似ているからだとか。
構築に若干躓いたところがあるので記載していく。

新規構築と前回の記事から更新する方法を記載する。

前提

dokcer-composeがインストールされていること。

新規構築

git clone

基本的にはgitで公開されているリポジトリをベースに構築する。
なお名称がBitwarden_Self_Hostとなっているが、docker-compose.ymlファイル内で記述しているイメージは「vaultwarden/server:latest」となっているので問題ない。

git clone https://github.com/JulianRunnels/Bitwarden_Self_Host.git
cd Bitwarden_Self_Host

証明書作成

リポジトリ内に「create_ssl.sh」という証明書作成スクリプトが用意されているが
何故かエラーが発生しうまくいかなかったので手動で作成する。

ディレクトリ作成

nginx.conf内の証明書のパスに合わせてディレクトリを構成する。
ちなみにコマンドは「create_ssl.sh」に記載されているものと同じ。

mkdir -p data/ssl/certs
mkdir -p data/ssl/csr
mkdir -p data/ssl/private
mkdir -p data/ssl/newcerts

独自のルート認証局キー作成

ここから先は「dockerでbitwarden_rsを構築する」に記載している内容と同じなのでコマンドだけ残す。
異なる点は証明書の出力先。

openssl genrsa -aes256 -out data/ssl/private/myCA.key 4096
chmod 500 data/ssl/private/myCA.key

ルートCA証明書作成

openssl req -x509 -new -nodes -sha256 -days 3650 -key data/ssl/private/myCA.key -out data/ssl/certs/myCA.crt

bitwardenサーバキー作成

openssl genpkey -algorithm RSA -out data/ssl/private/bitwarden.key -outform PEM -pkeyopt rsa_keygen_bits:2048

証明書要求ファイル作成

openssl req -new -key data/ssl/private/bitwarden.key -out data/ssl/csr/bitwarden.csr

bitwarden.ext作成

git cloneで既に存在すため再作成する。

rm data/ssl/bitwarden.ext

IP.1をサーバのIPアドレスに変更する。

cat << EOF > data/ssl/bitwarden.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
IP.1 = 192.168.1.100 # サーバのIPアドレスに変更する。
EOF

bitwarden証明書に署名

openssl x509 -req -in data/ssl/csr/bitwarden.csr -CA data/ssl/certs/myCA.crt -CAkey data/ssl/private/myCA.key -CAcreateserial -out data/ssl/certs/bitwarden.crt -days 365 -sha256 -extfile data/ssl/bitwarden.ext

証明書の確認

以下のフォルダにbitwarden.crtとbitwarden.csrがあればOK。

ls data/ssl/certs/
ls data/ssl/csr/

docker-compose.yml編集

バックアップ用のジョブ?があるが自分の環境ではjenkinsでバックアップしているので削除した。

nano docker-compose.yml

bw_backupを削除

起動

デタッチせずに起動し、エラーがないことを確認する。

docker-compose pull && docker-compose up

bitwardenから更新

基本的には新規構築と同じ。
違う点は以下2点
・すでに証明書がある
・証明書の格納先が違う

docker-composeバックアップ

必要であれば実施する。

cp docker-compose.yml docker-compose.yml.bk

証明書格納先作成&証明書格納

証明書をnginx.conf参照先にコピーする。
nginx.confの参照先を変えてもOK。

mkdir data && mkdir data/nginx && mkdir data/ssl && mkdir data/ssl/certs && mkdir data/ssl/private
sudo cp /etc/ssl/certs/bitwarden.crt data/ssl/certs/bitwarden.crt
sudo cp /etc/ssl/certs/bitwarden.key data/ssl/private/bitwarden.key

nginx.conf作成

中身は新規構築で使用したものと同じ。

nano data/nginx/nginx.conf
events {}

http{
  server {
    listen 80;
    return 301 https://$host$request_uri;   
  }
  
  server {
    listen 443 ssl;

    ssl_certificate /etc/ssl/certs/bitwarden.crt;
    ssl_certificate_key /etc/ssl/private/bitwarden.key;

    location / {
        proxy_pass http://bitwarden;
	proxy_set_header        Host $host;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto $scheme;
    }

  location /notifications/hub {
    proxy_pass http://bitwarden:3012;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
  
  location /notifications/hub/negotiate {
    proxy_pass http://bitwarden:80;
  }
}
}

docker-compose.yml作成

変更ポイントはvaultwardenで参照するvolumeをbitwardenと同じにする。

cat << EOF > docker-compose.yml
version: '3'

services:
  bitwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    expose:
      - "80"
      - "3012"
    volumes:
      - /bw-data:/data
    restart: unless-stopped
    environment:
      WEBSOCKET_ENABLED: 'true'

  nginx:
    image: nginx:1.15-alpine
    container_name: nginx
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./data/nginx:/etc/nginx
      - ./data/ssl:/etc/ssl
EOF

コンテナ停止&削除

docker stop bitwarden
docker rm bitwarden

起動

エラーが発生しない&Webブラウザからアクセスできることを確認する。
ちなみにWeb保管庫へのアクセスはポートが8080から443になっているので https://IPアドレス でアクセスする。

docker-compose up
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?