docker安裝bitwarden
說明:
bitwarden是一款開源密碼管理器,其衍生版本docker鏡像名為bitwarden_rs。
bitwarden_rs 項目從 v2.21.0 開始,已更名為 Vaultwarden。
項目地址:https://github.com/dani-garcia/vaultwarden
Ps:文中會使用到Portainer-Docker可視化工具進行操作。
1.安裝Vaultwarden
docker拉取bitwarden鏡像
$ docker pull vaultwarden/server:latest
創建bitwarden容器,8001端口
$ docker run -it -d --name vaultwarden -v /data/vaultwarden/data/:/data/ -p 8001:80 --restart=always vaultwarden/server:latest
Portainer中操作如下:
2.安裝acme.sh,使用Letsencrypt頒發SSL證書
2.1docker安裝acme.sh
acme官方說明文檔:https://github.com/acmesh-official/acme.sh/wiki/
$ docker pull neilpang/acme.sh
2.2注冊帳戶
<注意:從 acme.sh v3.0.0 開始,acme.sh 使用 Zerossl 視為默認 ca,您必須先注冊帳戶(一次),然后才能頒發新證書。>
ZeroSSL申請EAB Credentials for ACME Clients:https://app.zerossl.com/developer
$ docker run --rm -it -v "/data/acme.sh/out/":/acme.sh neilpang/acme.sh --register-account --server zerossl --eab-kid AxxxxQ --eab-hmac-key 5xxxxQ
# 注冊成功后會顯示一個ACCOUNT_THUMBPRINT和ZeroSSL-CA
# --rm 參數表示運行停止后立即刪除該容器
如下圖:
2.3修改默認CA
acme.sh的初始CA為ZeroSSL,如果想使用letsencrypt,請用以下代碼
$ docker run --rm -it -v "/data/acme.sh/out/":/acme.sh neilpang/acme.sh --set-default-ca --server letsencrypt
2.4頒發證書
Godaddy申請API Key Management:https://developer.godaddy.com/keys
$ docker run --rm -it -v "/data/acme.sh/out/":/acme.sh -e GD_Key="exxxK_3xxxH" -e GD_Secret="Vxxxh" neilpang/acme.sh --issue --dns dns_gd -d example.com -d *.example.com
# --rm 參數表示運行停止后刪除該容器,參數v表示容器路徑映射到本地路徑,參數-e中GD_Key和GD_Secret表示是Godaddy的域名。
# 成功之后,證書會保存在out文件夾,也可以指定路徑,修改上面第一行 `"/data/acme.sh/out/"`,改為你想要保存的路徑即可
# zerossl的eab-kid和eab-hmac-key,godaddy的GD_Key和GD_Secret有效期不長。有時候出現“docker: invalid reference format.”時,更新上述參數即可。'
2.5其他操作
$ docker run --rm -it -v "/data/acme.sh/out/":/acme.sh neilpang/acme.sh --revoke -d example.com # 撤銷證書
$ acme.sh --renew -d example.com --force # 續期證書
3.配置nginx反向代理
3.1docker安裝nginx
$ docker pull nginx
3.2運行nginx,把nginx容器的端口映射到本地端口,
把nginx容器的目錄映射到本地的目錄,設置重啟策略
$ docker run -it -d -v "/data/nginx/config/":/config/ -v "/data/nginx/www/html/":/usr/share/nginx/html/ -v "/data/nginx/download/":/opt/download/ -p 80:80 -p 443:443 -p 3012:3012 --name nginx --restart=always nginx
3.3把acme.sh生成的證書上傳到nginx服務目錄下
<因為已把'/config' 目錄目錄映射到本地,所以只要復制文件到 '/data/nginx/' 目錄下就可以了>
$ cd /data/acme.sh/out/example.com/
$ cp example.com.cer /data/nginx/example.com.cer
$ cp example.com.key /data/nginx/example.com.key
3.4創建web.conf文件並上傳
把web.conf重名為example.com.conf(自己的域名),上傳到容器內 '/etc/nginx/conf.d/' 目錄下
# 方法1
$ docker ps
# 查看容器ID
$ docker cp /data/example.com.conf 容器ID:/etc/nginx/conf.d/example.com.conf
# 前面路徑為本地路徑,后面路徑為容器內路徑
# 方法2
$ mv web.conf /data/nginx/download/web.conf
# docker 進入容器的系統內
$ docker exec -it nginx /bin/bash
$ mv /opt/download/web.conf /etc/nginx/conf.d/example.com.conf
然后重啟nginx服務。
此時就可以訪問 https://example.com 進入bitwarden頁面,注冊使用。
創建web.conf文件
server
{
listen 80;
#listen [::]:80;
server_name example.com;
# 修改為自己的域名
rewrite ^/(.*) https://$server_name/$1 permanent;
}
server
{
listen 443 ssl http2;
#listen [::]:443 ssl http2;
server_name example.com;
# 修改為自己的域名
ssl on;
ssl_certificate /config/example.com.cer;
# 修改為自己的證書所在路徑
ssl_certificate_key /config/example.com.key;
# 修改為自己的證書的key所在路徑
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
ssl_session_cache builtin:1000 shared:SSL:10m;
# openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
# ssl_dhparam /etc/nginx/dhparam.pem;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
location / {
proxy_set_header Host zheteng.pw;
proxy_pass http://192.168.20.5:8001;
# 修改為bitwarden的ip和端口
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /notifications/hub {
proxy_pass http://127.0.0.1:3012;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /notifications/hub/negotiate {
proxy_pass http://192.168.20.5:8001;
# 修改為bitwarden的ip和端口
}
}
4.certbot使用
4.1安裝更新snap
ubuntu20自帶snap
$ sudo snap install core; sudo snap refresh core # 更新snap
4.2安裝certbot
$ sudo snap install --classic certbot # 安裝certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot #准備 Certbot 命令
$ sudo certbot --apache # 獲取證書並讓 Certbot 自動編輯 apache 配置
$ sudo certbot certonly --apache # 只獲取證書,手動編輯 apache 配置
參考鏈接:
https://certbot.eff.org/instructions?ws=apache&os=ubuntufocal