是一个用于定义和配置多容器应用程序的工具。在我们的例子中,我们希望 Vaultwarden 服务器和代理都将 WebSocket 请求重定向到正确的地方。
此示例假设您已 Docker Compose。此配置可用于不向「外界」开放的本地服务器,也可用作的模板。
首先在您喜欢的位置创建一个新目录,然后更改到该目录下。然后,创建 compose.yml
文件(旧版本为 docker-compose.yml
):
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
environment:
# DOMAIN: "https://vaultwarden.example.com" # 使用反向代理时必填;您的域名;Vaultwarden 需要知道它是 https 才能正确处理附件
SIGNUPS_ALLOWED: "true" # 创建账户后,使用 "false" 停用此选项,这样就不会有陌生人注册了
卷
volumes:
- ./vw-data:/data # : 前面的路径可以修改
ports:
- 11001:80 # 您可以将 11001 替换为您喜欢的端口
要创建并运行容器,请运行:
docker compose up -d && docker compose logs -f
要更新并运行容器,请运行:
docker compose pull && docker compose up -d && docker compose logs -f
带有 HTTP 挑战的 Caddy
首先创建一个新的目录,然后切换到该目录下。接下来,创建如下的 compose.yml
文件(旧版本为 docker-compose.yml
),确保将 DOMAIN
和 EMAIL
变量替换为实际的值。
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
environment:
DOMAIN: "https://vaultwarden.example.com" # 您的域名;Vaultwarden 需要知道它是 https 才能正确处理附件
SIGNUPS_ALLOWED: "true"
volumes:
- /vw-data:/data
caddy:
image: caddy:2
container_name: caddy
restart: always
ports:
- 80:80 # ACME HTTP-01 验证需要
- 443:443
- 443:443/udp # HTTP/3 需要
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./caddy-config:/config
- ./caddy-data:/data
environment:
DOMAIN: "https://vaultwarden.example.com" # 您的域名,以 http 或 https 作为前缀
EMAIL: "admin@example.com" # 用于 ACME 注册的电子邮件地址
LOG_FILE: "/data/access.log"
在相同的目录下创建如下的 Caddyfile
文件(此文件不需要做修改):
{$DOMAIN} {
log {
level INFO
output file {$LOG_FILE} {
roll_size 10MB
roll_keep 10
}
}
# 使用 ACME HTTP-01 验证方式为已配置的域名获取证书
tls {$EMAIL}
# 此设置可能会在某些浏览器上出现兼容性问题(例如,在 Firefox 上下载附件)
# 如果遇到问题,请尝试禁用此功能
encode zstd gzip
# 将所有代理到 Rocket
reverse_proxy vaultwarden:80 {
# 把真实的远程 IP 发送给 Rocket,让 Vaultwarden 把其放在日志中
# 这样 fail2ban 就可以阻止正确的 IP 了
header_up X-Real-IP {remote_host}
}
}
运行以下命令创建并启动容器。这将为 compose.yml
文件(旧版本为 docker-compose.yml
)中的服务创建私有网络,这样就只有 Caddy 暴露在外面了:
docker compose up -d # 或者 'docker-compose up -d' 如果使用独立的 Docker Compose 的话
停止并销毁容器:
docker compose down # 或者 'docker-compose down' 如果使用独立的 Docker Compose 的话
带有 DNS 挑战的 Caddy
首先创建一个新的目录,然后切换到该目录下。接下来,创建如下的 compose.yml
文件(旧版本为 docker-compose.yml
),确保将 DOMAIN
和 EMAIL
变量替换为实际的值。
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
environment:
DOMAIN: "https://vaultwarden.example.com" # 您的域名;Vaultwarden 需要知道它是 https 才能正确处理附件
volumes:
- /vw-data:/data
caddy:
image: caddy:2
container_name: caddy
restart: always
ports:
- 80:80
- 443:443
- 443:443/udp # HTTP/3 需要
volumes:
- ./caddy:/usr/bin/caddy # 您的 Caddy 自定义构建
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./caddy-config:/config
- ./caddy-data:/data
environment:
DOMAIN: "https://vaultwarden.example.com" # 您的域名,以 http 或 https 作为前缀
EMAIL: "admin@example.com" # 用于 ACME 注册的电子邮件地址
DUCKDNS_TOKEN: "<token>" # 您的 Duck DNS 令牌
LOG_FILE: "/data/access.log"
在相同的目录下,创建如下的 Caddyfile
文件(此文件不需要做修改)。
{$DOMAIN} {
log {
level INFO
output file {$LOG_FILE} {
roll_size 10MB
roll_keep 10
}
}
# 使用 ACME HTTP-01 验证方式为已配置的域名获取证书
tls {
dns duckdns {$DUCKDNS_TOKEN}
}
# 此设置可能会在某些浏览器上出现兼容性问题(例如,在 Firefox 上下载附件)
# 如果遇到问题,请尝试禁用此功能
encode zstd gzip
# 将所有代理到 Rocket
reverse_proxy vaultwarden:80
}
与 HTTP 挑战的示例一样,运行下面的命令以创建并启动容器:
docker compose up -d # 或者 'docker-compose up -d' 如果使用独立的 Docker Compose 的话