编辑
2025-07-05
默认分类
00

目录

部署带HTTPS的生产环境VanBlog指南
准备工作
详细部署步骤
1. 创建项目目录结构
2. 创建Caddy配置文件
3. 创建Docker Compose文件
4. 替换配置项
5. 启动服务
6. 验证部署
高级配置选项
1. 自定义MongoDB认证(推荐)
2. 使用Cloudflare代理
3. 定期备份配置
维护命令

部署带HTTPS的生产环境VanBlog指南

准备工作

  1. 确保已安装Docker和Docker Compose

    • 参考前置知识中的安装步骤
  2. 准备域名

    • 拥有一个有效域名(如example.com)
    • 将域名A记录解析到你的服务器IP
  3. 开放服务器端口

    • 确保服务器防火墙开放80和443端口
    • sudo ufw allow 80,443/tcp (Ubuntu)

详细部署步骤

1. 创建项目目录结构

bash
mkdir -p ~/vanblog-production/{caddy-proxy,data} cd ~/vanblog-production

2. 创建Caddy配置文件

创建 caddy-proxy/Caddyfile 文件:

caddyfile
# 全局配置 { email your-email@example.com # 替换为你的邮箱 acme_ca https://acme-v02.api.letsencrypt.org/directory } # 主域名配置 your-domain.com { # 反向代理到VanBlog容器 reverse_proxy vanblog:80 # 安全增强配置 header { Strict-Transport-Security "max-age=31536000;" X-Content-Type-Options nosniff X-Frame-Options DENY Referrer-Policy strict-origin-when-cross-origin } # 性能优化 encode zstd gzip } # www域名重定向 www.your-domain.com { redir https://your-domain.com{uri} permanent } # HTTP重定向到HTTPS http:// { redir https://{host}{uri} permanent }

3. 创建Docker Compose文件

创建 docker-compose.yml 文件:

yaml
version: '3.8' networks: vanblog-network: driver: bridge services: vanblog: image: kevinchina/deeplearning:vanblog-latest restart: unless-stopped environment: TZ: Asia/Shanghai EMAIL: your-email@example.com # 替换为你的邮箱 NODE_ENV: production VAN_BLOG_VERSION: latest volumes: - ./data/static:/app/static - ./log:/var/log - ./caddy/config:/root/.config/caddy - ./caddy/data:/root/.local/share/caddy - ./aliyunpan/config:/root/.config/aliyunpan networks: - vanblog-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:80"] interval: 30s timeout: 10s retries: 3 caddy: image: caddy:latest restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./caddy-proxy/Caddyfile:/etc/caddy/Caddyfile - ./caddy/data:/data - ./caddy/config:/config networks: - vanblog-network depends_on: vanblog: condition: service_healthy mongo: image: mongo:5.0 restart: unless-stopped environment: TZ: Asia/Shanghai volumes: - ./data/mongo:/data/db networks: - vanblog-network healthcheck: test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet interval: 30s timeout: 10s retries: 3

4. 替换配置项

在启动前,请确保替换以下内容:

  • your-domain.com 替换为你的实际域名
  • your-email@example.com 替换为你的实际邮箱

5. 启动服务

bash
docker compose up -d

6. 验证部署

  1. 检查服务状态

    bash
    docker compose ps
  2. 查看日志

    bash
    docker compose logs -f caddy # 查看证书申请情况 docker compose logs -f vanblog # 查看应用日志
  3. 访问测试

    • 访问 http://your-domain.com 应自动跳转到HTTPS
    • 检查浏览器地址栏的锁图标,确认证书有效

高级配置选项

1. 自定义MongoDB认证(推荐)

修改 docker-compose.yml 中mongo服务部分:

yaml
mongo: image: mongo:5.0 environment: MONGO_INITDB_ROOT_USERNAME: admin MONGO_INITDB_ROOT_PASSWORD: your-strong-password # 其他配置保持不变...

然后在vanblog服务中添加环境变量:

yaml
vanblog: environment: # 原有环境变量... MONGO_USERNAME: admin MONGO_PASSWORD: your-strong-password

2. 使用Cloudflare代理

修改 Caddyfile

caddyfile
your-domain.com { reverse_proxy vanblog:80 # Cloudflare专用配置 tls { dns cloudflare {env.CF_API_TOKEN} } # 其他配置保持不变... }

在docker-compose.yml中caddy服务添加环境变量:

yaml
caddy: environment: CF_API_TOKEN: "your-cloudflare-api-token"

3. 定期备份配置

创建备份脚本 backup.sh

bash
#!/bin/bash BACKUP_DIR="/path/to/backups" TIMESTAMP=$(date +"%Y%m%d_%H%M%S") # 备份MongoDB docker compose exec mongo mongodump --archive --gzip > $BACKUP_DIR/vanblog-mongo-$TIMESTAMP.gz # 备份静态文件 tar czvf $BACKUP_DIR/vanblog-static-$TIMESTAMP.tar.gz ./data/static # 备份Caddy配置 tar czvf $BACKUP_DIR/vanblog-caddy-$TIMESTAMP.tar.gz ./caddy-proxy ./caddy

维护命令

  1. 更新VanBlog

    bash
    docker compose pull vanblog docker compose up -d
  2. 重启服务

    bash
    docker compose restart
  3. 查看资源使用

    bash
    docker stats
  4. 清理无用资源

    bash
    docker system prune

故障排除

  1. 证书申请失败

    • 检查域名解析是否正确
    • 确保80端口可被外部访问
    • 查看Caddy日志:docker compose logs caddy
  2. MongoDB连接问题

    • 检查MongoDB容器是否正常运行
    • 查看日志:docker compose logs mongo
  3. VanBlog无法访问

    • 检查服务状态:docker compose ps
    • 查看应用日志:docker compose logs vanblog

通过以上步骤,你已经成功部署了一个带HTTPS的生产级VanBlog环境,具有自动证书续期、安全增强和性能优化等特性。

本文作者:任浪漫

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!