公司动态

Ubuntu 22.04下Docker部署Vaultwarden密码管理服务

📅 2026/8/17 10:57:17
Ubuntu 22.04下Docker部署Vaultwarden密码管理服务
1. 项目概述Vaultwarden原Bitwarden_RS是Bitwarden密码管理器的轻量级Rust实现版本它完美兼容Bitwarden官方客户端但资源占用更低特别适合个人或小团队自建密码管理服务。在Ubuntu 22.04 LTS这个长期支持版本上通过Docker部署能获得稳定的运行环境和便捷的维护体验。我去年为一个小型开发团队部署过这套方案实测单核CPU1GB内存的云服务器即可流畅运行相比官方服务节省了90%以上的资源开销。下面将完整还原我的部署过程包含那些官方文档没写的环境调优技巧。2. 环境准备2.1 系统基础配置首先确保使用Ubuntu 22.04 LTS的干净系统。如果是新安装的系统建议先执行标准初始化sudo apt update sudo apt upgrade -y sudo apt install -y curl git ufw开启基础防火墙规则注意保留SSH端口sudo ufw allow 22/tcp sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable重要提示如果使用云服务商还需要在控制台开放对应端口。我曾遇到过AWS安全组没放行导致服务不可用的情况。2.2 Docker引擎安装Ubuntu 22.04官方源中的Docker版本可能较旧推荐使用Docker官方仓库# 卸载旧版本 sudo apt remove docker docker-engine docker.io containerd runc # 安装依赖 sudo apt install -y ca-certificates gnupg lsb-release # 添加GPG密钥 sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 设置仓库 echo deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 安装Docker sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin验证安装sudo docker run hello-world配置用户组避免每次sudosudo usermod -aG docker $USER newgrp docker # 立即生效2.3 Docker存储优化默认存储路径在/var/lib/docker如果系统盘较小可以迁移到数据盘# 假设数据盘挂载在/mnt/data sudo systemctl stop docker sudo mv /var/lib/docker /mnt/data/ sudo ln -s /mnt/data/docker /var/lib/docker sudo systemctl start docker3. Vaultwarden部署3.1 准备部署目录建议创建专用目录管理配置mkdir -p ~/vaultwarden/{data,config} cd ~/vaultwarden3.2 编写docker-compose.yml这是核心配置文件我优化过的版本包含以下关键点version: 3 services: vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden restart: unless-stopped env_file: - .env volumes: - ./data:/data ports: - 8000:80 networks: - vaultwarden-net networks: vaultwarden-net: driver: bridge3.3 环境变量配置创建.env文件保存敏感配置cat .env EOF ADMIN_TOKENyour_strong_admin_token_here SIGNUPS_ALLOWEDfalse DOMAINhttps://yourdomain.com LOG_FILE/data/access.log EOF安全提示ADMIN_TOKEN用于管理后台访问建议用openssl rand -base64 48生成强随机字符串。我曾见过使用弱token导致的管理后台被爆破案例。3.4 启动服务docker compose up -d验证服务状态docker ps -a docker logs vaultwarden4. 反向代理配置4.1 Nginx安装sudo apt install -y nginx sudo systemctl enable nginx4.2 SSL证书获取使用Lets Encrypt免费证书sudo apt install -y certbot python3-certbot-nginx sudo certbot --nginx -d yourdomain.com证书会自动续期但建议测试续期流程sudo certbot renew --dry-run4.3 Nginx配置创建专用配置文件sudo nano /etc/nginx/sites-available/vaultwarden配置内容示例server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name yourdomain.com; ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; location / { proxy_pass http://localhost:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location /notifications/hub { proxy_pass http://localhost:8000; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; } location /notifications/hub/negotiate { proxy_pass http://localhost:8000; } }启用配置sudo ln -s /etc/nginx/sites-available/vaultwarden /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx5. 安全加固5.1 定期备份策略创建备份脚本cat ~/backup_vaultwarden.sh EOF #!/bin/bash BACKUP_DIR/path/to/backups TIMESTAMP$(date %Y%m%d_%H%M%S) docker stop vaultwarden tar -czf $BACKUP_DIR/vaultwarden_$TIMESTAMP.tar.gz ~/vaultwarden/data docker start vaultwarden # 保留最近7天备份 find $BACKUP_DIR -name vaultwarden_*.tar.gz -mtime 7 -delete EOF chmod x ~/backup_vaultwarden.sh设置cron定时任务(crontab -l 2/dev/null; echo 0 3 * * * /home/username/backup_vaultwarden.sh) | crontab -5.2 防火墙强化限制管理端口访问sudo ufw allow from your_trusted_ip to any port 22 sudo ufw deny 8000 # 禁止直接访问Docker端口5.3 服务监控安装基础监控工具sudo apt install -y htop net-tools查看实时资源占用docker stats vaultwarden6. 日常维护6.1 更新策略手动更新步骤cd ~/vaultwarden docker compose pull docker compose up -d --force-recreate docker image prune -f6.2 故障排查常见问题处理无法访问管理后台检查ADMIN_TOKEN是否正确验证反向代理配置查看docker logs是否有错误客户端同步失败检查DOMAIN环境变量验证SSL证书有效性测试网络连通性高内存占用限制容器内存在docker-compose.yml中添加mem_limit: 512m禁用不必要的功能如禁用U2FWEBSOCKET_ENABLEDfalse6.3 性能调优对于高负载场景# 在docker-compose.yml中添加 environment: - ROCKET_WORKERS4 - DATABASE_MAX_CONNS10调整Nginx缓冲proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k;7. 进阶配置7.1 邮件通知设置在.env中添加SMTP配置SMTP_HOSTsmtp.example.com SMTP_FROMadminexample.com SMTP_PORT587 SMTP_SECURITYstarttls SMTP_USERNAMEuserexample.com SMTP_PASSWORDyour_password7.2 数据库迁移默认使用SQLite如需改用MySQLenvironment: - DATABASE_URLmysql://user:passwordmysql-container/vaultwarden7.3 移动客户端配置Android/iOS客户端设置关闭官方服务器选项输入你的自建域名使用主密码登录实测发现iOS客户端首次登录可能需要多尝试几次这是已知的网络波动问题