Vaultwarden详细部署教程(Docker Compose + HTTPS + 安全加固)

该文章已生成可运行项目,

一、环境准备

  1. 服务器要求

系统:Ubuntu 20.04+/Debian 11+(推荐)或其他Linux发行版
配置:至少1核CPU、1GB内存、20GB SSD存储
网络:开放80/443端口(用于HTTPS),已解析域名指向服务器IP

  1. 安装Docker和Docker Compose
# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装Docker
sudo apt install -y docker.io docker-compose

# 启动Docker服务并设置开机自启
sudo systemctl enable --now docker

# 将当前用户添加到docker组(可选,避免每次使用sudo)
sudo usermod -aG docker $USER
newgrp docker

二、部署步骤

  1. 创建工作目录
mkdir -p /opt/vaultwarden && cd /opt/vaultwarden
  1. 编写Docker Compose配置文件
    创建docker-compose.yml文件:
version: '3.8'

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    volumes:
      - ./data:/data  # 数据持久化目录
    ports:
      - "8080:80"     # 内部HTTP端口(不直接暴露到公网)
    environment:
      # 基础配置
      - DOMAIN=https://vault.yourdomain.com  # 替换为你的域名(必须HTTPS)
      - TZ=Asia/Shanghai                     # 时区设置
      
      # 安全配置
      - SIGNUPS_ALLOWED=false                # 禁止公开注册(创建管理员后设置为false)
      - ADMIN_TOKEN=$(openssl rand -base64 48)  # 生成管理员令牌
      - SHOW_PASSWORD_HINT=false            # 禁用密码提示
      
      # 速率限制(防暴力破解)
      - LOGIN_RATELIMIT_MAX_BURST=10        # 最大登录尝试次数
      - LOGIN_RATELIMIT_SECONDS=60          # 限制时间窗口(秒)
      - ADMIN_RATELIMIT_MAX_BURST=5         # 管理员面板限制
      - ADMIN_RATELIMIT_SECONDS=300
      
      # 功能配置
      - WEB_VAULT_ENABLED=true              # 启用Web界面
      - EMERGENCY_ACCESS_ALLOWED=true        # 允许紧急访问
      - SENDS_ALLOWED=true                   # 允许安全发送功能

  # Caddy反向代理(自动配置HTTPS)
  caddy:
    image: caddy:2-alpine
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"   # HTTP(用于Let's Encrypt验证)
      - "443:443" # HTTPS
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - ./caddy-data:/data/caddy
    depends_on:
      - vaultwarden
  1. 创建Caddy配置文件
    在同一目录创建Caddyfile:
# 替换为你的域名
https://vault.yourdomain.com {
  # 日志配置
  log {
    output file /data/caddy/vaultwarden.log {
      roll_size 10MB
      roll_keep 10
    }
  }

  # 自动申请SSL证书
  tls your@email.com  # 替换为你的邮箱(用于证书通知)

  # 反向代理到Vaultwarden
  reverse_proxy vaultwarden:80 {
    header_up X-Real-IP {remote_host}
    header_up X-Forwarded-For {remote_host}
    header_up X-Forwarded-Proto {scheme}
  }
}
  1. 启动服务
# 启动容器(后台运行)
docker-compose up -d

# 查看日志(确认启动正常)
docker-compose logs -f

三、初始化配置

  1. 访问Web界面
    打开浏览器访问 https://vault.yourdomain.com,使用以下步骤创建管理员账户:
    首次访问时SIGNUPS_ALLOWED=true,注册第一个账户(管理员)
    登录后,修改docker-compose.yml中的SIGNUPS_ALLOWED=false
    重启容器使配置生效:docker-compose up -d
  2. 访问管理员面板
    通过 https://vault.yourdomain.com/admin 登录管理界面(链接换成你自己的),输入之前生成的ADMIN_TOKEN(可在容器日志中找到)。
  3. 关键配置建议
    强制2FA:在管理员面板要求所有用户启用2FA
    设置密码策略:最小长度12位,要求包含大小写字母、数字和特殊字符
    配置备份:定期导出密码库(Settings → Export Vault)
    四、安全加固
  4. 防火墙配置(UFW示例)
# 仅开放必要端口
sudo ufw allow 22/tcp     # SSH
sudo ufw allow 80/tcp      # HTTP(Let's Encrypt验证)
sudo ufw allow 443/tcp     # HTTPS
sudo ufw enable
  1. 启用Fail2ban(防暴力破解)
# 安装Fail2ban
sudo apt install -y fail2ban

# 创建配置文件
sudo tee /etc/fail2ban/jail.d/vaultwarden.conf <<EOF
[vaultwarden]
enabled = true
filter = vaultwarden
logpath = /opt/vaultwarden/data/vaultwarden.log
maxretry = 5
bantime = 3600  # 封禁1小时
findtime = 300   # 5分钟内触发
EOF

# 创建过滤规则
sudo tee /etc/fail2ban/filter.d/vaultwarden.conf <<EOF
[Definition]
failregex = ^.*Username or password is incorrect\. Try again\. IP: <ADDR>.*$
ignoreregex =
EOF

# 重启服务
sudo systemctl restart fail2ban
  1. 定期更新
# 创建更新脚本
cat > /opt/vaultwarden/update.sh <<EOF
#!/bin/bash
cd /opt/vaultwarden
docker-compose pull
docker-compose up -d
echo "Vaultwarden updated at \$(date)" >> update.log
EOF

# 添加执行权限并设置定时任务
chmod +x update.sh
sudo crontab -e
# 添加:0 3 * * 0 /opt/vaultwarden/update.sh  # 每周日凌晨3点更新

五、数据备份与迁移

  1. 手动备份
# 压缩数据目录
tar -czf vaultwarden_backup_$(date +%Y%m%d).tar.gz /opt/vaultwarden/data

# 下载备份到本地(通过SCP)
scp user@server:/opt/vaultwarden/backup.tar.gz ./
  1. 自动备份脚本
cat > /opt/vaultwarden/backup.sh <<EOF
#!/bin/bash
BACKUP_DIR=/opt/backups
mkdir -p \$BACKUP_DIR
tar -czf \$BACKUP_DIR/vaultwarden_\$(date +%Y%m%d).tar.gz /opt/vaultwarden/data
# 保留最近30天备份
find \$BACKUP_DIR -name "vaultwarden_*.tar.gz" -mtime +30 -delete
EOF

chmod +x backup.sh
sudo crontab -e
# 添加:0 2 * * * /opt/vaultwarden/backup.sh  # 每天凌晨2点备份
  1. 迁移步骤
    在新服务器部署基础环境(Docker、Docker Compose)
    复制备份文件到新服务器:scp backup.tar.gz user@newserver:/opt/
    解压恢复数据:tar -xzf backup.tar.gz -C /
    重新部署容器:docker-compose up -d

六、常见问题解决

  1. 证书申请失败
    确保域名解析正确且服务器可被外部访问
    检查防火墙是否放行80/443端口
    手动验证:curl http://vault.yourdomain.com/.well-known/acme-challenge/test
  2. 管理员面板无法访问
    检查ADMIN_TOKEN是否正确生成:cat /opt/vaultwarden/data/config.json
    确保DOMAIN设置为HTTPS且与访问地址一致
    通过日志排查:docker logs vaultwarden | grep admin
  3. 客户端同步失败
    检查服务器时间是否同步:sudo timedatectl set-ntp true
    验证SSL证书完整性:openssl s_client -connect vault.yourdomain.com:443
    客户端设置自定义服务器URL:设置 → 自托管 → 服务器URL
本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

52ku

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值