搭建自托管密码管理器

背景

之前一直在用 iPhone 备忘录作为账号密码管理,但在有些场景下用起来不是很顺手,比如会误修改文本,修改完后,自动给保存,找不到原始文本。用起来不是很方便。看看业界有那些密码管理方案。1Password,付费,用不起。经朋友推荐,尝试尝试 bitwarden 自搭建,免费版平替 1Password

准备工作

服务器

Tips:bitwarden 官方推荐配置最低2GRAM起步

准备一台靠谱的服务器

域名

注册一个域名用于访问你的服务器,然后进入域名 DNS 解析后台,新增一条 A 记录指向你的服务器 IP (这一步最好先做,因为部分 DNS 生效会比较久)

如果没有域名,裸 IP 号 + 端口也不是不行

SSL 证书

各大云厂商都有固定的免费额度 SSL 证书申请,如果没有的话,请点击这

再不行,bitwarden 可以一键生成 SSL

开始

这里以 CentOS7 为例

安装 Docker

如果你的服务器上已经安装了 DockerDocker Compose,这一步就可以跳过了。Docker 要求 CentOS 系统的内核版本高于 3.10,可以运行 uname -r 查看版本。

Tips:安装,如果超时的话,建议使用国内镜像安装

bash 复制代码
# 1、(可选)更新系统的软件包
yum update -y

# 2、安装 docker 依赖的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2

# 3、添加 docker 的 yum 源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 4、通过 yum 安装 docker
sudo yum install docker-ce docker-ce-cli containerd.io
# 如上述命令出错,可能是系统上已有旧版本 Docker,需要先卸载旧版本
# 卸载命令:yum remove docker docker-common docker-selinux docker-engine docer-io

# 5、测试 docker 是否安装成功 (查看版本号)
docker version
# 有 client 和 service 两部分表示 docker 安装并启动成功了(有部分错误不用管)

# 6、启动 Docker 服务并设置开机启动
sudo systemctl start docker
sudo systemctl enable docker

# 7、查看Docker是否启动
sudo systemctl status docker

安装 Docker Compose

Tips:安装,如果超时的话,建议使用国内镜像安装

bash 复制代码
# 1、首先前往 https://github.com/docker/compose/releases/latest 查看最新的 docker-compose 版本号,比如截稿时最新版本为 2.1.1。

# 2、下载最新版本的 docker-compose,你需要将下面的 2.1.1 替换成最新的版本号
sudo curl -L "https://github.com/docker/compose/releases/download/2.1.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 3、授予可执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 4、测试是否安装成功(可能需要重启系统)
docker-compose -v
# 安装成功会显示 docker-compose 版本

阿里云

安装 Docker

bash 复制代码
# 1、运行以下命令,下载docker-ce的yum源
sudo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 2、运行以下命令,安装Docker
sudo yum -y install docker-ce

# 3、测试 docker 是否安装成功 (查看版本号)
docker version
# 有 client 和 service 两部分表示 docker 安装并启动成功了(有部分错误不用管)

# 4、设置开机启动
sudo systemctl start docker
sudo systemctl enable docker

# 5、查看Docker是否启动
sudo systemctl status docker

安装 Docker Compose

Tips:仅Python 3及以上版本支持docker-compose,并请确保已安装pip。

bash 复制代码
# 1、安装setuptools
sudo pip3 install -U pip setuptools

# 2、安装docker-compose
sudo pip3 install docker-compose

# 3、验证docker-compose是否安装成功
docker-compose --version

验证

起飞

安装官方 Bitwarden

确认服务器已成功安装好 DockerDocker Compose 之后,我们就可以来安装 Bitwarden 了。其实 Bitwarden 官方就已经提供了非常方便的一键安装脚本,我们只需执行即可。

Tips:由于 docker 镜像的体积比较大,国内服务器可能遇到中途卡住不动的情况

可通过,输入域名网址 https://go.btwrdn.co/bw-sh,下载到本地,再上传到服务器,执行 ./bitwarden.sh install

bash 复制代码
# 1、下载 Bitwarden 的安装脚本
curl -Lso bitwarden.sh https://go.btwrdn.co/bw-sh && chmod 700 bitwarden.sh

# 2、执行安装程序
./bitwarden.sh install

然后,安装脚本会一步步提示你输入,下面是部分重点选项

  1. Enter the domain name for your Bitwarden instance 输入你要给 Bitwarden 分配的域名,这里例子为 bitwarden.iplaysoft.com

  2. Do you want to use Let's Encrypt to generate a free SSL certificate? (y/n) 是否使用 Let's Encrypt 自动生成免费的 SSL 证书,一般选 y (你有自己的证书也可以选 n,后面需要配置证书的路径)

  3. Enter the database name for your Bitwarden instance 输入用于 Bitwarden 的数据库名称

  4. Enter your installation id / Enter your installation key 你需要访问 bitwarden.com/host 获取一组安装 ID 和安装密钥 Key (官网被 xx 无法访问的话,只能各显神通了)

修改配置文件 (端口号、SSL 证书等)

  • 如果你需要使用自己的 SSL 证书、修改默认的端口号等需求,可以编辑配置文件 ./bwdata/config.yml比如你的服务器本身就有服务占用了 80 和 443 端口,那么可以修改配置里的 http_port 和 https_port 端口号来避免冲突 。比如我改成 9980 和 9443,这样日后我访问时的域名就是 bitwarden.iplaysoft.com:9980。

  • 要注意的是,腾讯云、阿里云等机器默认的「安全组规则」会阻止非常用端口的访问,如使用非 80/443 端口,需要登录后台修改安全组规则允许你设置的端口才行。

  • 另外,如果你使用「宝塔面板」,或者懂得修改 Nginx 的配置,也可以对你的 bitwarden 服务进行"反代",有建站经验的朋友,可以查查相关的资料,搞定应该不难。

  • 修改完后,必须执行一下 ./bitwarden.sh rebuild 命令才能让新配置生效。

(可选) 修改环境配置文件:

  • 另外,在环境配置文件 ./bwdata/env/global.override.env 里还有诸如 SMTP、启用 Yubico、启用系统管理员门户、是否禁止用户注册等设置。

  • 其中,如果你的 Bitwarden 打算是私人使用,建议在注册完自己账号之后,改成 "禁止用户注册",对应的项为:globalSettings__disableUserRegistration=false

  • 修改此文件后,需要重启 Bitwarden 容器才能生效,重启命令为:./bitwarden.sh restart

启动 Bitwarden 服务

bash 复制代码
./bitwarden.sh start

验证所有容器是否正常运行

复制代码
docker ps

如果运行不正常,请查看日志,日志服务在 bitwarden/logs/

安装第三方 Bitwarden

vaultwarden

机器配置不达标,比如启动容器之后,mssql 无法正常工作,估计就是 RAM 配置不达标,官方 mssql 占 RAM 1.3G 内存。无法运行官方 Bitwarden,这时推荐使用第三方 Bitwarden

bash 复制代码
# 1、下载 vaultwarden 的安装脚本
docker run -d --name vaultwarden -v /vw-data/:/data/ -p 80:80 vaultwarden/server:latest

# 2、启动容器
docker start vaultwarden

自定义配置

ini 复制代码
docker run -d --name bitwarden \
  -e SIGNUPS_ALLOWED=false \
  -e TZ=Asia/Shanghai \
  -e SIGNUPS_ALLOWED=false \
  -e INVITATIONS_ALLOWED=false \ 
  -e SMTP_USERNAME=你的邮箱 \
  -e SMTP_PASSWORD=邮箱密码 \
  -v /vw-data/:/data/ \
  -p 9980:80 \
  vaultwarden/server:latest

验证容器是否正常运行

复制代码
docker ps

反向代理

如果你有自己的 Nginx 服务,需要反向代理 官方 bitwarden 和第三方bitwarden,以及配置自己的 SSL 证书,可以参考以下配置:

ini 复制代码
user root;
worker_processes auto;
pid /run/nginx.pid;
#include /usr/share/nginx/modules/*.conf;
events {
    worker_connections 512;
}
http {
    etag on;
    expires 7d;
    gzip on;
    gzip_min_length 1k;
    gzip_buffers   2 8k;
    client_max_body_size 50m;
    gzip_comp_level 2;
    gzip_types   text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg;
    gzip_vary off;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
    #include             /etc/nginx/mime.types;
    include             mime.types;
    default_type        application/octet-stream;
    #include /etc/nginx/conf.d/*.conf;

    server {
       listen 80;
       server_name bitwarden.iplaysoft.com;
       rewrite ^(.*)$ https://$host$1 permanent;
   }

   server {
        listen 443 ssl;
        server_name  bitwarden.iplaysoft.com;
        index index.html;
        ssl_certificate   /usr/local/webserver/nginx/cert/vd.downfuture.com.pem;
        ssl_certificate_key  /usr/local/webserver/nginx/cert/vd.downfuture.com.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        access_log /usr/local/webserver/nginx/logs/nginx_access.log;
        error_log /usr/local/webserver/nginx/logs/nginx_error.log error;

        error_page 404 /404.html;
            location = /40x.html {
        }
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }

        location / {
            proxy_pass http://服务器公网IP:9980;
        }
    }
}

总结

bitwarden 强大的自托管程序,让我拥有了免费密码管理器,感谢!

文章同步更新平台:掘金、CSDN、知乎、思否、博客,公众号(野生程序猿江辰) 我的联系方式,v:Jiang9684,欢迎和我一起学习交流

相关推荐
zjjsctcdl2 分钟前
springBoot发布https服务及调用
spring boot·后端·https
酉鬼女又兒17 分钟前
零基础快速入门前端DOM 操作核心知识与实战解析(完整汇总版)(可用于备赛蓝桥杯Web应用开发)
开发语言·前端·javascript·职场和发展·蓝桥杯·js
zdl68635 分钟前
Spring Boot文件上传
java·spring boot·后端
世界哪有真情38 分钟前
哇!绝了!原来这么简单!我的 Java 项目代码终于被 “拯救” 了!
java·后端
RMB Player39 分钟前
Spring Boot 集成飞书推送超详细教程:文本消息、签名校验、封装工具类一篇搞定
java·网络·spring boot·后端·spring·飞书
重庆小透明1 小时前
【搞定面试之mysql】第三篇 mysql的锁
java·后端·mysql·面试·职场和发展
喝拿铁写前端1 小时前
一套面向 Web、H5、小程序与 Flutter 的多端一致性技术方案
前端·架构
yaaakaaang1 小时前
(一)前端,如此简单!---下载Nginx
前端·nginx
牛奶1 小时前
为什么全国人民都能秒开同一个视频?
前端·http·cdn
武超杰2 小时前
Spring Boot入门教程
java·spring boot·后端