VanBlog部署(Ubuntu 22.04 )
2025-07-19
教程合集
00

目录

Ubuntu 22.04 部署
1. 准备域名和DNS
2. 创建项目目录结构
3. 创建 Caddy 配置文件
4. 创建 Docker Compose 文件
5. 修改配置
6. 启动生产环境
7. 验证部署
8.出现错误

Ubuntu 22.04 部署

1. 准备域名和DNS

  • 确保你已经拥有一个域名,例如 your-domain.com,并将其 A记录 指向你的服务器 IP 地址。
  • 确保域名解析已经生效,可以在 Linux 机器上使用以下命令来验证 DNS 解析:
bash
展开代码
nslookup your-domain.com

2. 创建项目目录结构

在你的 Linux 服务器上执行以下命令来创建项目目录:

bash
展开代码
mkdir -p ~/vanblog-production cd ~/vanblog-production mkdir caddy-proxy

3. 创建 Caddy 配置文件

~/vanblog-production/caddy-proxy/ 目录下创建 Caddyfile 文件,内容如下:

bash
展开代码
nano ~/vanblog-production/caddy-proxy/Caddyfile

将以下内容粘贴到文件中,并将 your-domain.comyour-email@example.com 替换为你的实际域名和邮箱地址:

展开代码
# 全局配置:设置邮箱用于 Let's Encrypt 证书申请 { email your-email@example.com acme_ca https://acme-v02.api.letsencrypt.org/directory # 使用 Let's Encrypt 生产环境 } # 主站配置:使用你的域名自动申请 Let's Encrypt 证书 your-domain.com { reverse_proxy vanblog:80 encode gzip # 启用 Gzip 压缩 header { Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" # HSTS X-Frame-Options "SAMEORIGIN" # 防止点击劫持 X-XSS-Protection "1; mode=block" # 防止 XSS X-Content-Type-Options "nosniff" # 防止 MIME 类型嗅探 } } # 可选:www 重定向到主域名 www.your-domain.com { redir https://your-domain.com{uri} permanent } # HTTP 重定向到 HTTPS :80 { redir https://{host}{uri} permanent }

保存并退出编辑器(在 nano 中按 Ctrl+X,然后按 Y,再按 Enter)。

4. 创建 Docker Compose 文件

~/vanblog-production 目录下创建 docker-compose.yml 文件,内容如下:

bash
展开代码
nano ~/vanblog-production/docker-compose.yml

将以下内容粘贴到文件中:

yaml
展开代码
networks: vanblog-network: driver: bridge services: vanblog: image: kevinchina/deeplearning:vanblog-latest restart: always environment: TZ: 'Asia/Shanghai' EMAIL: 'your-email@example.com' NODE_ENV: 'production' VAN_BLOG_VERSION: 'v1.0.0' volumes: - ${PWD}/data/static:/app/static - ${PWD}/log:/var/log - ${PWD}/caddy/config:/root/.config/caddy - ${PWD}/caddy/data:/root/.local/share/caddy - ${PWD}/aliyunpan/config:/root/.config/aliyunpan networks: - vanblog-network depends_on: - mongo healthcheck: test: ["CMD", "curl", "-f", "http://localhost:80"] interval: 30s timeout: 10s retries: 3 caddy-proxy: image: caddy:latest restart: always ports: - "443:443" - "80:80" volumes: - ${PWD}/caddy-proxy/Caddyfile:/etc/caddy/Caddyfile - ${PWD}/caddy-proxy/data:/data - ${PWD}/caddy-proxy/config:/config networks: - vanblog-network environment: TZ: 'Asia/Shanghai' depends_on: - vanblog mongo: image: mongo:latest restart: always environment: TZ: 'Asia/Shanghai' volumes: - ${PWD}/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

保存并退出编辑器。

5. 修改配置

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

  • your-domain.com 替换为你自己的域名。
  • your-email@example.com 替换为你的邮箱地址(用于申请 Let's Encrypt 证书)。

6. 启动生产环境

执行以下命令来检查 Docker Compose 配置文件的语法:

bash
展开代码
docker compose config

然后启动所有服务:

bash
展开代码
docker compose up -d

检查服务状态:

bash
展开代码
docker compose ps

查看 Caddy 的日志,观察证书申请过程:

bash
展开代码
docker compose logs -f caddy-proxy

查看 VanBlog 的日志:

bash
展开代码
docker compose logs -f vanblog

7. 验证部署

  • 检查 HTTP 重定向:访问 http://your-domain.com,它应该自动重定向到 https://your-domain.com
  • 检查 HTTPS:访问 https://your-domain.com,你应该看到 VanBlog 界面。
  • 检查证书:在浏览器中查看证书信息,应该是由 Let's Encrypt 签发的有效证书。

8.出现错误

关于 version 字段的警告

swift
展开代码
WARN[0000] /home/yanc/vanblog-production/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion

这个警告是因为 Docker Compose v2 版本开始不再使用 version 字段来指定版本号。所以,你可以从 docker-compose.yml 文件中删除 version 字段。

解决方法:

docker-compose.yml 中删除 version: '3.8' 字段。修改后的文件开头应该是这样:

yaml
展开代码
networks: vanblog-network: driver: bridge

出现的错误信息表明 Docker 尝试将 /home/yanc/vanblog-production/caddy-proxy/caddy-proxy/Caddyfile 这个文件挂载到容器内的 /etc/caddy/Caddyfile,但是系统无法创建挂载点,原因是目标路径 /etc/caddy/Caddyfile 不是一个目录。这通常是因为 Docker 在挂载路径时遇到的目录与文件的冲突。

错误分析:

错误信息的关键部分是:

swift
展开代码
error mounting "/home/yanc/vanblog-production/caddy-proxy/caddy-proxy/Caddyfile" to rootfs at "/etc/caddy/Caddyfile": create mountpoint for /etc/caddy/Caddyfile mount: cannot create subdirectories in "/var/lib/docker/overlay2/d0b469377da051a129dca9971e291e7246a719be33368b66e76b6e43f300a180/merged/etc/caddy/Caddyfile": not a directory: unknown

说明 Docker 尝试将文件挂载到 /etc/caddy/Caddyfile,但出现了路径问题,可能是因为目标路径不是文件夹。

解决方法:

  1. 检查路径:首先确认 Caddyfile 在宿主机上的路径是否正确。确认你没有意外创建了一个文件夹层级为 caddy-proxy/caddy-proxy,这可能导致路径错误。

    你可以通过以下命令检查 Caddyfile 的路径:

    bash
    展开代码
    ls -l /home/yanc/vanblog-production/caddy-proxy/caddy-proxy/Caddyfile

    确保它是一个文件,而不是目录。

  2. 修改 docker-compose.yml 中的挂载路径

    如果路径是正确的,请确保 docker-compose.yml 文件中 caddy-proxy 服务的 volumes 配置正确,特别是对 Caddyfile 文件的挂载。你可能在 docker-compose.yml 中错误地引用了目录,而不是文件。

    修改如下:

    yaml
    展开代码
    volumes: - /home/yanc/vanblog-production/caddy-proxy/Caddyfile:/etc/caddy/Caddyfile

    确保宿主机的路径 /home/yanc/vanblog-production/caddy-proxy/Caddyfile 是文件,而不是目录。

  3. 确认正确的文件路径

    • 请确保在你的 ~/vanblog-production/caddy-proxy/ 目录下创建了 Caddyfile 文件。你可以在正确的目录中创建文件,如下所示:
bash
展开代码
nano /home/yanc/vanblog-production/caddy-proxy/Caddyfile
  1. 确认文件创建成功

创建完成后,再次检查文件是否存在:

bash
展开代码
ls -l /home/yanc/vanblog-production/caddy-proxy/Caddyfile

你应该看到类似如下的输出:

bash
展开代码
-rw-r--r-- 1 yanc yanc 1234 Jun 18 10:00 /home/yanc/vanblog-production/caddy-proxy/Caddyfile
  1. 重新启动服务

文件和配置都无误后,重新启动 Docker Compose 服务:

bash
展开代码
docker compose down docker compose up -d

本文作者:冬月

本文链接:

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