Loading... <div class="tip share">请注意,本文编写于 1824 天前,最后修改于 1264 天前,其中某些信息可能已经过时。</div> ## 前言 之前在文章[写在使用 Bitwarden 俩月后](https://10101.io/2019/05/15/Bitwarden)分享了自己使用 Bitwarden 的体验,也说到了 Bitwarden 可以搭建在自己的服务器上,但是由于官方的 docker 对于服务器的要求比较高,所以一直没有尝试。 不过评论区中有朋友提到了 [bitwarden_rs](https://github.com/dani-garcia/bitwarden_rs),非官方的镜像,更加的轻量,所以决定试一试。本文为在 VPS 上的搭建记录,更多内容可以参考 [wiki](https://github.com/dani-garcia/bitwarden_rs/wiki)。 ## 准备工作 - VPS (本文 VPS 系统为 Debian9) - 一个域名且解析到了 VPS 的 IP 地址 ## 安装 Docker ```bash # 1. 执行官方的安装脚本 wget -qO- get.docker.com | bash # 2. 检查安装结果 docker version # 3. 启动 Docker systemctl start docker # 4. 查看 Docker 启动状态(绿色 active) systemctl status docker # 5. 允许 Docker 自启动 systemctl enable docker ``` ## 安装 Bitwarden ### 快速开始 不进行自定义,不需要域名,快速搭建一个 Bitwarden 后端 ```bash # 1. 拉取 bitwarden_rs 镜像 docker pull bitwardenrs/server:latest # 2. 运行容器 docker run -d --name bitwarden -v /bw-data/:/data/ -p 80:80 bitwardenrs/server:latest ``` ### 自定义参数运行 自定义一些参数,加入 HTTPS 支持等。当然,也可以使用 Nginx 反代,如果有 web 环境,建议采用 Nginx 反代的方式加入 HTTPS 支持。 #### 无 Web 服务器 ```bash # 1. 拉取 bitwarden_rs 镜像 docker pull bitwardenrs/server:latest # 2. 生成一个 admin 用户管理页面的 token openssl rand -base64 48 # 3. 生成 ssl 证书,以启用 https,推荐使用 acme.sh 免费申请及自动续签 # > 3.1 下载并执行 acme.sh 脚本 curl https://get.acme.sh | sh # > 3.2 生成证书,这只是一种方式,其他方式可以自行搜索 apt install socat # debian 系为例 acme.sh --issue -d yourdomain.com --standalone # > 3.3 将生成的证书拷贝安装到指定文件夹 acme.sh --installcert -d yourdomain.com \ --key-file /path/to/yourdomain.com.key \ --fullchain-file /path/to/fullchain.cer \ # 4. 运行 bitwarden_rs 容器 docker run -d --name bitwarden \ -e SIGNUPS_ALLOWED=false \ -e INVITATIONS_ALLOWED=false \ -e ADMIN_TOKEN=step2_generated_token \ -e ROCKET_TLS='{certs="/path/to/docker/ssl/fullchain.cer",key="/path/to/docker/ssl/yourdomain.com.key"}' \ -e DOMAIN=https://yourdomain.com \ -e LOG_FILE=/path/to/log \ -e LOG_LEVEL=warn -e EXTENDED_LOGGING=true \ -e DATA_FOLDER=/path/to/data/folder \ -p 443:80 \ -v /path/to/host/ssl/:/path/to/docker/ssl/ -v /path/to/host/data/folder:/path/to/docker/data/folder \ bitwardenrs/server:latest ``` **参数解释**: - `SIGNUP_ALLOWED`:是否允许注册 - `INVITATIONS_ALLOWED`: 是否允许组织邀请注册 - `ADMIN_TOKEN`:用户管理界面 (/admin),可用于删除用户及邀请用户注册 - `ROCKET_TLS`:ssl 证书信息,同时需要配置 `-v /path/to/host/ssl/:/path/to/docker/ssl/`卷,前者为宿主机ssl证书的位置,后者为容器证书位置 - `DOMAIN`:域名 - `LOG_FILE`、`LOG_LEVEL`、`EXTENDED_LOGGING`:日志保存文件路径以及日志等级定义 - `DATA_FOLDER`:docker容器数据保存文件夹(默认为 `/data`),除了定义这个文件夹之外,还可以定义附件、图标缓存、数据库等参数 - `DATABASE_URL`:数据库路径 - `ATTACHMENT_FOLDER`:附件路径 - `ICON_CACHE_FOLDER`:图标缓存路径 以上是我自己觉得需要的一些配置,更多参数可参考官方 Wiki。 **示例**: ```bash docker run -d --name bitwarden -e SIGNUPS_ALLOWED=false -e INVITATIONS_ALLOWED=false -e ADMIN_TOKEN=bTVsf7Hj99HPxECRPOL9U70bP0Iy5lXmbbJVP2tvwDszB8CClv+MD3TT6mSJTa4L -e ROCKET_TLS='{certs="/ssl/bw.withdewhua.space/fullchain.cer",key="/ssl/bw.withdewhua.space/bw.withdewhua.space.key"}' -e DOMAIN=https://bw.withdewhua.space -e LOG_FILE=/data/bitwarden.warn.log -e LOG_LEVEL=warn -e EXTENDED_LOGGING=true -p 443:80 -v /bw-data/:/data/ -v /usr/local/nginx/conf/ssl/:/ssl/ bitwardenrs/server:latest ``` **示例站点**:~~[https://bw.withdewhua.space:8443/#/](https://bw.withdewhua.space:8443/) (仅用于展示,可注册体验,随时可能删除)~~ 服务器已出 #### 有 Web 服务器 以下以 Nginx 为例,基本操作类似于上述无 Web 环境情况。 ```bash # step1-3 见 [无 Web 服务器情况] # 4. 运行 bitwarden_rs 容器 # > -p 指定端口可自己定义,只允许本机监听 docker run -d --name bitwarden \ -e SIGNUPS_ALLOWED=false \ -e INVITATIONS_ALLOWED=false \ -e ADMIN_TOKEN=step2_generated_token \ -e DOMAIN=http://yourdomain.com \ -e LOG_FILE=/path/to/log \ -e LOG_LEVEL=warn -e EXTENDED_LOGGING=true \ -e DATA_FOLDER=/path/to/data/folder \ -p 127.0.0.1:12580:80 \ -v /path/to/host/data/folder:/path/to/docker/data/folder \ bitwardenrs/server:latest # 5. 创建 nginx 配置文件 yourdomain.com.conf,内容示例如下,注意根据自己情况进行修改 server { listen 80; listen [::]:80; listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /path/to/ssl/cert; # 注意修改 ssl_certificate_key /path/to/ssl/key; # 注意修改 ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_timeout 10m; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_buffer_size 1400; add_header Strict-Transport-Security max-age=15768000; ssl_stapling on; ssl_stapling_verify on; server_name yourdomain.com; # 注意修改 if ($ssl_protocol = "") { return 301 https://$host$request_uri; } location / { 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; proxy_pass http://127.0.0.1:12580; # 和 step4 中指定端口一致 } } ``` ## 容器操作命令 ```bash # $name 为 docker run 中定义的 name # 启动容器 docker start $name # 停止容器 docker stop $name # 删除容器 docker rm $name # 查看运行容器 docker ps -as ``` ## 升级 Bitwarden 镜像 ```bash # 1. 重新拉取镜像 docker pull bitwardenrs/server:latest # 2. 停止、删除原容器 docker stop bitwarden docker rm bitwarden # 3. 重新运行 docker run 命令 # 4. 查看镜像文件 docker image ls # 5. 删除原镜像文件, $ID 在 step4 中可以看到 docker image rm $ID ``` ## 客户端使用方法 使用方法就讲下 Chrome 插件的吧,其他的用法都是类似的。 1. 打开插件,点击右上角设置按钮 ![bitwarden-chrome-extension](/usr/uploads/2019/11/2027019987.png) 2. 填入 bitwarden 的域名 ![server-url](/usr/uploads/2019/11/2945135887.png) 3. 保存后正常登录即可。 ## 后话 弄好之后稍微体验了下,直接从 Bitwarden 官方导出然后导入到自己服务端,整个过程还是很容易的。目前体验下来来说感觉还是非常舒服的,主要说几点吧: - 这个 docker 镜像对于服务器的要求不高,个人使用的话,1 CPU 512MB RAM 应该就可以跑了,又可以充分利用自己的服务器了; - 我能用到的功能都有了,除了最基本的密码保存、上传附件等,官方需要付费使用的 TOTP 、密码检测等功能也都是可以直接使用的; - 数据在自己手里,可能会感觉会更安全点吧。 目前我的 Bitwarden 会员还没到期,~~暂时不转移到自己服务器上了,等过期了再说吧~~ 已迁移到自己服务器上。 最后修改:2021 年 06 月 06 日 © 允许规范转载 赞 0 如果觉得我的文章对你有用,请随意赞赏
18 条评论
请教下博主bitwarden可否关闭https,只用http访问?这玩意在内网使用,不开放给公网,需要远程的时候回通过ipsec保证安全,没必要再加一层ssl。
谢博主。
可以的,不指定 ssl 相关参数默认就是 http
搜到了这篇,学习一下,感谢分享
请问怎么把bitwarden设为pc chrome默认密码管理器。1password有这个选项,bitwarden好像没有。
有啥用
不知道有啥用 看着那个选项挺奇怪的
既然你没找到用的场景,bitwarden 有没有也无所谓了,如果有需求而没有那就可以提建议了
我已经建好了bitwarden,请问在同一个端口上(443)还能建trojan或者v2ray tls吗?
bitwarden 用 nginx 反代,让 nginx 来监听 443
装了bitwarden一段时间了,使用体验很棒。希望博主能有时间的时候写一篇bitwarden的二次验证功能的使用教程或体验,可能是我不会用,感觉二次验证这块没有1password做的方便。
确实没有 1p 来得方便,需要自己粘贴下。而且有些情况下不会自动复制到剪贴板,而自己去复制的话操作略麻烦
那你服务器的安全可要做好
非技术的路过。
hi。 博主。在ios上,之前没有保存过的网站,登录以后为啥不会出现小横条提示保存账号密码?PC上的谷歌插件上我看可以提示小横条。
iOS 上不会弹出这样的小横条,android上可以。
iOS上我都是通过分享然后选择bitwarden,直接通过bitwarden先进行账号密码的填写,然后再回到网站上注册,注册的时候就可以直接填充了
1password等其它密码管理器也是不会有这个“弹出小横条”?(刚入手密码管理器
上面我说的不行指的是bitwarden,至于别的行不行我忘了,时间有点长了,因为我之前也不怎么用iOS,没关注到这一点。
而且bitwarden一开始的逻辑就是先在其上创建记录后进行注册填充。