# 部署

## 安装 Docker 和 Docker Compose <a href="#install-docker-and-docker-compose" id="install-docker-and-docker-compose"></a>

### 准备工作 <a href="#preparation" id="preparation"></a>

#### 1、检查内核版本 <a href="#id-1-check-the-kernel-version" id="id-1-check-the-kernel-version"></a>

```shell
uname -r
# Docker 要求 CentOS 系统的内核版本高于 3.10
```

#### 2、（可选）更新到最新 yum 包 <a href="#id-2-update-to-the-latest-yum-package" id="id-2-update-to-the-latest-yum-package"></a>

```shell
yum update -y
```

#### 3、安装需要的软件包 <a href="#id-3-install-the-required-packages" id="id-3-install-the-required-packages"></a>

```shell
yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-util 提供 yum-config-manager 功能， 另外两个是 devicemapper 驱动依赖
```

#### 4、设置 yum 源 <a href="#id-4-set-up-yum-source" id="id-4-set-up-yum-source"></a>

```shell
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
```

### 安装 Docker <a href="#install-docker" id="install-docker"></a>

#### 1、安装最新稳定版的 Docker <a href="#id-1-install-the-latest-stable-version-of-docker" id="id-1-install-the-latest-stable-version-of-docker"></a>

```shell
sudo yum install docker-ce docker-ce-cli containerd.io
```

如果上述命令运行出错，可能是系统（如 CentOS 8）上安装有旧版本的 Docker，需要先卸载旧版本：

```shell
yum remove docker docker-common docker-selinux docker-engine docer-io
```

#### 2、启动 Docker <a href="#id-2-start-docker" id="id-2-start-docker"></a>

```shell
sudo systemctl start docker
```

#### 3、加入开机启动 <a href="#id-3-add-to-boot-up" id="id-3-add-to-boot-up"></a>

```shell
sudo systemctl enable docker
```

#### 4、验证安装是否成功 <a href="#id-4-verify-whether-the-installation-is-successful" id="id-4-verify-whether-the-installation-is-successful"></a>

```shell
docker version
# 有 client 和 service 两部分表示 docker 安装并启动成功了（有部分错误不用管）
```

### 安装 Docker Compose <a href="#install-docker-compose" id="install-docker-compose"></a>

访问 <https://github.com/docker/compose/releases/latest> 查看并记下最新的 docker-compose 版本号（例如：`1.27.3`）。

#### 1、下载最新版本的 docker-compose 到 `/usr/local/bin` 目录 <a href="#id-1-download-the-latest-version-of-docker-compose" id="id-1-download-the-latest-version-of-docker-compose"></a>

```shell
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
```

#### 2、授予可执行权限 <a href="#id-2-grant-executable-privileges" id="id-2-grant-executable-privileges"></a>

```shell
sudo chmod +x /usr/local/bin/docker-compose
```

#### 3、验证安装是否成功（可能需要重启系统） <a href="#id-3-verify-that-the-installation-is-successful" id="id-3-verify-that-the-installation-is-successful"></a>

```shell
docker compose -v
# 或者 'docker-compose -v'，如果使用独立的 Docker Compose 的话
# 安装成功会显示 docker-compose 版本号
```

## 安装 Bitwarden <a href="#install-bitwarden" id="install-bitwarden"></a>

### 下载 Bitwarden 脚本文件 <a href="#download-bitwarden-script-file" id="download-bitwarden-script-file"></a>

将 Bitwarden 脚本下载到当前位置并授予可执行权限：

```shell
curl -Lso bitwarden.sh https://go.btwrdn.co/bw-sh \
    && chmod +x bitwarden.sh
```

### 启动安装程序 <a href="#start-the-installer" id="start-the-installer"></a>

```shell
./bitwarden.sh install
```

{% hint style="info" %}
如果中途由于网络等原因卡住不动，可以随时 `Crl+C` 终止，然后重新运行上述命令。国内服务器建议为 Docker 配置代理，参考[此文](https://ppgg.in/blog/12859.html)。
{% endhint %}

根据提示一步一步操作（这里使用 Let's Encrypt 免费证书）：

1、输入您给 Bitwarden 实例分配的域名，这里以 `vault.yourdomain.com` 为例。

2、询问您是否使用 Let's Encrypt 来生成免费的 SSL 证书，这里选 `y` 。

3、输入您的电子邮件地址。

4、输入用于 Bitwarden 实例的数据库名称。

5、开始自动拉取安装所需的文件，等待完成。

6、分别输入从 <https://bitwarden.com/host> 获取的安装 ID 和安装密钥。

7、等待完成。

{% hint style="info" %}
如果您使用自己的证书文件：

1. 输入您给 Bitwarden 实例分配的域名，这里以 `vault.yourdomain.com` 为例。
2. 询问您是否使用 Let's Encrypt 来生成免费的 SSL 证书，这里选 `n` ，我们使用自己申请的证书。
3. 开始自动拉取安装所需的文件，等待完成。
4. 分别输入从 <https://bitwarden.com/host> 获取的安装 ID 和安装密钥。
5. 询问您是否要使用 SSL 证书。这里选 `y` 。
6. 是可信的 SSL 证书吗？这里选 `y` 。
7. 等待完成。
8. 将主证书文件、私钥文件、任何中间证书文件上传到 `./bwdata/ssl/vault.yourdomain.com` 目录中。
   {% endhint %}

8、根据需要更改安装配置文件 `./bwdata/config.yml` 中的设置（如自定义证书的路径、端口等）。然后运行命令：

```shell
./bitwarden.sh rebuild
```

9、根据需要更改环境配置文件 `./bwdata/env/global.override.env` 中的设置。

### 启动 Bitwarden <a href="#start-bitwarden" id="start-bitwarden"></a>

```shell
./bitwarden.sh start
```

开始自动拉取镜像，等待全部完成。

{% hint style="info" %}
首次启动 Bitwarden 时，可能会花费很长时间（根据您的网速可能需要好几个小时），因为它会从 Docker Hub 下载所有映像，特别是 MSSQL 镜像比较大。
{% endhint %}

## 脚本可用的命令 <a href="#script-commands" id="script-commands"></a>

Bitwarden 主脚本（`bitwarden.sh` 或 `bitwarden.ps1`）具有以下可用的命令：

{% hint style="info" %}
PowerShell 用户需要使用前缀 `-`（开关）运行命令。例如 `.\bitwarden.ps1 -start`。
{% endhint %}

| 命令           | 描述                                                                                                                                                                |
| ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| install      | 启动安装程序。                                                                                                                                                           |
| start        | 启动所有容器。                                                                                                                                                           |
| restart      | 重新启动所有容器（与 `start` 相同）。                                                                                                                                           |
| stop         | 停止所有容器。                                                                                                                                                           |
| update       | 更新所有容器和数据库。                                                                                                                                                       |
| updatedb     | 更新/初始化数据库。                                                                                                                                                        |
| updaterun    | 更新 `run.sh` 文件。                                                                                                                                                   |
| updateself   | 更新主脚本本身。                                                                                                                                                          |
| updateconf   | 更新所有容器，而无需重新启动正在运行的实例。                                                                                                                                            |
| uninstall    | <p>在执行此命令之前，系统会提示您保存数据库文件。选 <code>y</code> 将创建一个包含最新备份的数据库的 tar 文件。</p><p></p><p>停止容器，删除 <code>bwdata</code> 目录及其所有内容，并删除临时卷。执行后，系统会询问您是否还要清除所有 Bitwarden 镜像。</p> |
| compresslogs | <p>将所有服务器日志或指定日期范围内的服务器日志的压缩包下载到当前目录。</p><p>例如，使用 <code>./bitwarden.sh compresslogs 20240304 20240305</code> 下载 2024 年 03 月 04 日至 2024 年 03 月 05 日的日志。</p>        |
| renewcert    | 续签证书。                                                                                                                                                             |
| rebuild      | 重建从 `config.yml` 生成的安装资产。                                                                                                                                         |
| help         | 列出所有命令。                                                                                                                                                           |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://host.ppgg.in/bitwarden/deployment.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
