手把手教你用Docker和Nginx,给自建Bitwarden套上Cloudflare免费SSL

张开发
2026/4/20 3:13:57 15 分钟阅读

分享文章

手把手教你用Docker和Nginx,给自建Bitwarden套上Cloudflare免费SSL
零配置SSL实战用DockerNginxCloudflare打造安全Bitwarden服务你是否曾经因为SSL证书的繁琐配置而放弃自建密码管理服务每次看到证书过期提醒就头皮发麻今天我要分享的这套方案将彻底解决这些痛点。不需要理解复杂的PKI体系不用记忆openssl命令甚至不需要保存任何证书文件——这就是Cloudflare边缘证书带来的革命性体验。1. 为什么选择这套技术组合在数字身份安全日益重要的今天自建密码管理器成为许多技术爱好者的首选。Bitwarden作为开源解决方案的代表配合Docker可以快速部署但安全传输层HTTPS的配置往往成为最后一道门槛。传统方案通常面临三大难题Lets Encrypt证书每三个月需要续期自签名证书不被浏览器信任证书链配置容易出错Cloudflare的边缘证书服务完美解决了这些问题自动续期证书由Cloudflare自动管理永久有效零配置无需下载或安装任何证书文件全兼容浏览器100%信任无安全警告2. 基础环境准备2.1 服务器与域名配置确保你已准备好一台运行Ubuntu 20.04/22.04的云服务器1核1G配置足够一个已注册的域名如example.com域名DNS已指向Cloudflare名称服务器提示国内服务器需完成ICP备案否则Cloudflare的CDN加速可能无法正常工作2.2 Docker环境部署更新系统并安装必要组件sudo apt update sudo apt upgrade -y sudo apt install -y apt-transport-https ca-certificates curl software-properties-common添加Docker官方源并安装curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io验证安装sudo docker run hello-world3. Bitwarden服务部署3.1 官方容器部署创建数据目录并获取安装脚本mkdir -p /opt/bitwarden cd /opt/bitwarden curl -Lso bitwarden.sh https://go.btwrdn.co/bw-sh chmod x bitwarden.sh交互式安装关键选项./bitwarden.sh install域名输入yourdomain.com不带协议头所有SSL相关选项均选择否修改端口配置避免与Nginx冲突sed -i s/http_port: 80/http_port: 8080/ /opt/bitwarden/bwdata/config.yml ./bitwarden.sh rebuild ./bitwarden.sh start3.2 轻量级Rust版方案可选对于资源有限的服务器docker pull vaultwarden/server:latest docker run -d --name vaultwarden \ -v /opt/vaultwarden/data:/data \ -p 8080:80 \ -e ADMIN_TOKENyour_secure_token \ vaultwarden/server:latest两种方案对比特性官方版Rust版内存占用~1GB~50MB功能完整性100%95%企业功能支持完整部分缺失更新频率官方维护社区维护4. Cloudflare SSL配置4.1 边缘证书启用登录Cloudflare控制台进入SSL/TLS → 边缘证书开启始终使用HTTPS开启自动TLS重写证书类型选择完全严格关键配置项说明边缘证书Cloudflare提供的终端到终端加密严格模式确保从Cloudflare到源站的连接也加密HSTS建议开启强制浏览器始终使用HTTPS4.2 防火墙规则可选增强安全性sudo ufw allow 80/tcp comment HTTP for cert renewal sudo ufw allow 443/tcp comment HTTPS sudo ufw allow 8080/tcp comment Bitwarden internal sudo ufw enable5. Nginx反向代理配置5.1 基础代理设置创建配置文件/etc/nginx/conf.d/bitwarden.confserver { listen 80; server_name yourdomain.com; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl http2; server_name yourdomain.com; # Cloudflare自动提供证书无需本地配置 ssl_certificate /dev/null; ssl_certificate_key /dev/null; location / { proxy_pass http://localhost:8080; 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; # WebSocket支持 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; } }5.2 性能优化参数在http上下文中添加proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; # 长连接保持 keepalive_timeout 75s; keepalive_requests 1000;测试并重载配置sudo nginx -t sudo systemctl reload nginx6. 常见问题排查6.1 混合内容警告现象页面加载但部分资源报不安全 解决方案检查Bitwarden配置中的DOMAIN是否正确确保所有请求都经过Cloudflare代理在Nginx中添加响应头add_header Content-Security-Policy upgrade-insecure-requests;6.2 登录循环可能原因X-Forwarded-Proto头未正确传递客户端IP检测异常调试命令curl -v https://yourdomain.com/api/settings docker logs bitwarden 21 | grep -i error6.3 性能调优对于高并发场景# 在Nginx的http模块添加 proxy_cache_path /var/cache/nginx levels1:2 keys_zonebitwarden_cache:10m inactive60m; # 在server模块添加 location ~* \.(js|css|png|jpg|jpeg|gif|ico|woff2)$ { proxy_cache bitwarden_cache; proxy_pass http://localhost:8080; expires 30d; }这套方案在我管理的三个生产环境稳定运行超过两年期间从未因证书问题中断服务。最令人惊喜的是当需要扩展子域名时只需在Cloudflare添加记录SSL保护立即自动生效——这才是真正的配置即服务体验。

更多文章