以下是本文安装过程的总结。本节中的链接将跳转到详细的安装过程部分:

配置您的域名

为指向您机器的域名设置DNS记录,并在机器上打开80和443端口。

在您的机器上安装 Docker 和 Docker Compose

这个之前介绍过哦~ 通往文章的传送门🌀

申请安装id和密钥

从https://bitwarden.com/host 获取安装 ID 和密钥以用于安装

settings.env

记得替换下面邮箱配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#####################
# Required Settings #
#####################

# Server hostname
BW_DOMAIN=bitwarden.yourdomain.com

# Database
# Available providers are sqlserver, postgresql, mysql/mariadb, or sqlite
BW_DB_PROVIDER=mariadb
BW_DB_SERVER=db
BW_DB_DATABASE=bitwarden_vault
BW_DB_USERNAME=数据库账号
BW_DB_PASSWORD=数据库密码

# Installation information
# Get your ID and key from https://bitwarden.com/host/
BW_INSTALLATION_ID=00000000-0000-0000-0000-000000000000
BW_INSTALLATION_KEY=xxxxxxxxxxxx

#####################
# Optional Settings #
#####################
# Learn more here: https://bitwarden.com/help/environment-variables/

# Container user ID/group ID
#PUID=1000
#PGID=1000

# Webserver ports
#BW_PORT_HTTP=8080
#BW_PORT_HTTPS=8443

# SSL
#BW_ENABLE_SSL=true
#BW_ENABLE_SSL_CA=true
#BW_SSL_CERT=ssl.crt
#BW_SSL_KEY=ssl.key
#BW_SSL_CA_CERT=ca.crt

# Services
# Some services, namely for enterprise use cases, are disabled by default. Defaults shown below.
#BW_ENABLE_ADMIN=true
#BW_ENABLE_API=true
#BW_ENABLE_EVENTS=false
#BW_ENABLE_ICONS=true
#BW_ENABLE_IDENTITY=true
#BW_ENABLE_NOTIFICATIONS=true
#BW_ENABLE_SCIM=false
#BW_ENABLE_SSO=false

#BW_ICONS_PROXY_TO_CLOUD=false

# Mail
#globalSettings__mail__replyToEmail=noreply@$BW_DOMAIN
#globalSettings__mail__smtp__host=smtphost.example.com
#globalSettings__mail__smtp__port=587
#globalSettings__mail__smtp__ssl=false
#globalSettings__mail__smtp__username=smtpusername
#globalSettings__mail__smtp__password=smtppassword

# Yubikey
#globalSettings__yubico__clientId=REPLACE
#globalSettings__yubico__key=REPLACE

# Other
#globalSettings__disableUserRegistration=false
#globalSettings__hibpApiKey=REPLACE
#adminSettings__admins=admin1@email.com,admin2@email.com·
Gmail 邮箱示例
1
2
3
4
5
6
globalSettings__mail__replyToEmail=yourname@gmail.com # 您的 Gmail 邮箱地址
globalSettings__mail__smtp__host=smtp.gmail.com
globalSettings__mail__smtp__port=465
globalSettings__mail__smtp__ssl=true
globalSettings__mail__smtp__username=yourname@gmail.com # 您的 Gmail 邮箱地址
globalSettings__mail__smtp__password=YOUR.PASSWORD # 如果您的 Google 账户开启了二次验证,这里必须使用应用专用密码
腾讯企业邮箱示例
1
2
3
4
5
6
globalSettings__mail__replyToEmail=you@yourdomain.com # 您的企业邮箱的完整邮件地址
globalSettings__mail__smtp__host=smtp.exmail.qq.com
globalSettings__mail__smtp__port=465
globalSettings__mail__smtp__ssl=true
globalSettings__mail__smtp__username=you@yourdomain.com # 您的企业邮箱的完整邮件地址
globalSettings__mail__smtp__password=YOUR.PASSWORD # 您的企业邮箱密码(如已开启安全登陆则需要使用客户端专用密码)
165邮箱示例
1
2
3
4
5
6
globalSettings__mail__replyToEmail=you@163.com # 您的 163 邮箱地址
globalSettings__mail__smtp__host=smtp.163.com
globalSettings__mail__smtp__port=465
globalSettings__mail__smtp__ssl=true
globalSettings__mail__smtp__username=you@163.com # 您的 163 邮箱地址
globalSettings__mail__smtp__password=xxxxx # 163授权IMAP密钥

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
version: "3.8"

services:
bitwarden:
depends_on:
- db
env_file:
- settings.env
image: bitwarden/self-host:beta
restart: always
ports:
- "xxx(bitwarden的端口):8080"
volumes:
- bitwarden:/etc/bitwarden

db:
environment:
MARIADB_USER: "数据库账号"
MARIADB_PASSWORD: "数据库密码"
MARIADB_DATABASE: "bitwarden_vault"
MARIADB_RANDOM_ROOT_PASSWORD: "true"
image: mariadb:10
restart: always
volumes:
- data:/var/lib/mysql

volumes:
bitwarden:
data:

这是一个使用Docker Compose配置的Bitwarden自托管服务。以下是每个部分的解释:

  • version: "3.8":指定Docker Compose配置文件的版本。

  • services::定义服务部分。

  • bitwarden::定义一个名为”bitwarden”的服务。

    • depends_on::指定该服务依赖于另一个名为”db”的服务。这意味着在启动”bitwarden”服务之前,将首先启动”db”服务。

    • env_file::指定要加载的环境变量文件。在这种情况下,将加载名为”settings.env”的文件中的环境变量。

    • image::指定要使用的Docker镜像。这里使用的是Bitwarden的自托管版本,具体是”bitwarden/self-host:beta”。

    • restart::定义容器的重启策略。这里设置为”always”,表示容器在退出时总是自动重启。

    • ports::指定容器的端口映射规则。这里将容器的8080端口映射到主机的80端口,因此可以通过主机的80端口访问Bitwarden服务。

    • volumes::定义容器的数据卷。这里使用名为”bitwarden”的数据卷,将容器内的”/etc/bitwarden”目录映射到宿主机。

  • db::定义一个名为”db”的服务,用于存储Bitwarden的数据库。

    • environment::指定容器的环境变量。这里设置了几个MariaDB相关的环境变量,包括用户名、密码、数据库名称和随机生成的root密码。

    • image::指定使用的Docker镜像。这里使用的是MariaDB 10。

    • restart::定义容器的重启策略,同样设置为”always”。

    • volumes::定义容器的数据卷。这里使用名为”data”的数据卷,将容器内的”/var/lib/mysql”目录映射到宿主机。

  • volumes::定义数据卷部分。

    • bitwarden::定义名为”bitwarden”的数据卷,用于存储Bitwarden服务的配置文件等数据。

    • data::定义名为”data”的数据卷,用于存储MariaDB的数据库文件。

以上就是这个配置文件的主要内容,它定义了Bitwarden自托管服务的相关设置,包括依赖服务、环境变量、容器映射端口和数据卷等。

把上面两个文件放在一个文件夹里面

1
2
#创建一个文件夹,并把两个文件放在一个文件夹中
mkdir /docker-compose/bitwarden/

编辑nginx配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

#user nobody;
worker_processes 1;

error_log /var/local/logs/error.log;


events {
worker_connections 1024;
}


http {
include mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/local/logs/access.log main;

sendfile on;

keepalive_timeout 65;

upstream bitwarden {
server 127.0.0.1:6894;
}
server {
listen 80;
server_name bitwarden.yourdomain.com;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443;
server_name bitwarden.yourdomain.com;
client_max_body_size 1024m;
ssl on;
ssl_certificate /cert/bitwarden.pem;
ssl_certificate_key /cert/bitwarden.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;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header Upgrade-Insecure-Requests 1;
proxy_set_header X-Forwarded-Proto https;
proxy_pass http://bitwarden;
# add_header Access-Control-Allow-Origin *;
}
}
}

配置好后重启nginx

你也可以进入nginx目录进行重启,可以执行以下步骤:

  1. 打开终端或命令行窗口。

  2. 输入以下命令来检查 Nginx 配置文件是否正确:

    1
    nginx -t

    如果配置文件没有错误,继续下一步。如果有错误,你需要修复配置文件中的错误。

  3. 输入以下命令来重启 Nginx 服务:

    1
    sudo service nginx restart

    如果你没有使用 sudo 或没有管理员权限,可能需要切换到管理员帐户或使用适当的权限。

  4. 等待一段时间,Nginx 将会重新启动。

重启完成后,Nginx 将使用更新后的配置文件重新启动。你的网站将会重新加载,并应用任何配置更改。

如果在你的系统中找不到 nginx 命令,可能是因为 Nginx 未正确安装或未将其路径添加到系统的环境变量中。在这种情况下,你可以尝试以下方法来重启 Nginx:

  1. 使用完整的路径:查找 Nginx 可执行文件的完整路径,然后使用该路径来启动或重启 Nginx。在大多数 Linux 系统中,默认的 Nginx 可执行文件路径是 /usr/sbin/nginx。因此,可以执行以下命令来重启 Nginx:

    1
    sudo /usr/sbin/nginx -s reload
  2. 使用服务命令:如果你的系统使用服务管理工具(如 systemctl)来管理服务,你可以使用该工具来重启 Nginx。在这种情况下,可以执行以下命令:

    1
    sudo systemctl restart nginx

如果以上方法仍然无法重启 Nginx,请确保已正确安装 Nginx,并检查操作系统和 Nginx 的文档以了解特定于你的系统的命令和配置。

启动bitwarden

1
docker compose up -d

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

1
docker ps

恭喜!您的统一部署现已启动并运行于https://bitwarden.domain.com。在您的浏览器中访问网络保险库以确认它正在运行。您现在可以注册一个新帐户并登录。

可能遇到的问题

一般出现在第一次安装失败的情况下

  1. 检查密码是否正确:首先确保在 docker-compose.yml 文件中指定的 MYSQL_ROOT_PASSWORD 参数的值与你尝试登录时使用的密码匹配。确保密码区分大小写。

  2. 清除数据并重新创建容器:如果密码没有问题,你可以尝试删除现有的容器和相关的数据,然后重新创建容器。使用以下命令:

    1
    2
    docker-compose down
    docker volume rm <your_mysql_data_volume>

    这将停止并删除容器,然后删除与 MariaDB 相关的数据卷。确保将 <your_mysql_data_volume> 替换为你实际使用的数据卷名称。

    然后,重新运行 Docker Compose:

    1
    docker-compose up -d

    这将重新创建 MariaDB 容器并初始化数据。

<your_mysql_data_volume> 是一个占位符,代表你实际使用的数据卷名称。在 Docker Compose 文件中,你可能会为 MariaDB 定义一个数据卷,类似于以下示例:

1
2
3
4
5
6
7
services:
db:
image: mariadb:10
volumes:
- <your_mysql_data_volume>:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=<your_password>

可以使用 docker volume ls -q 查询 ,如下图所示查出来mysql volume是bitwarden_data

所以完整命令如下

1
2
3
docker-compose down
docker volume rm bitwarden_data
docker-compose up -d