はじめに
「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