Skip to content

Docker Compose 部署 Waline

Waline 是一款基于 Valine 优化而来的现代化评论系统,支持多种博客程序,具有评论审核、数据统计等实用功能。下面将详细介绍如何使用 Docker Compose 部署 Waline,包括基础配置、数据库选择、生产环境优化以及常见问题解决方案。

1. 基础部署配置

1.1 项目目录结构

首先创建一个标准的目录结构来管理 Waline 配置和数据文件:

waline-compose/
├── docker-compose.yml
├── data/          # 存储数据库文件
└── config/        # 配置文件目录(可选)

1.2 基础 docker-compose.yml 配置

使用 SQLite 数据库的基础配置方案:

yaml
version: "3.8"
services:
  waline:
    image: lizheming/waline:latest
    container_name: waline
    restart: always
    ports:
      - "8360:8360" # Waline默认端口
    volumes:
      - ./data:/app/data # SQLite数据文件存储位置
    environment:
      TZ: "Asia/Shanghai"
      SQLITE_PATH: "/app/data"
      JWT_TOKEN: "your_secure_token_here" # 用于加密的JWT令牌
      SITE_NAME: "我的博客" # 站点名称
      SITE_URL: "https://yourdomain.com" # 站点URL

这个配置会:

  • 使用最新版 Waline 镜像
  • 映射 8360 端口
  • 挂载数据目录持久化 SQLite 数据库
  • 设置基本环境变量

2. 数据库配置选项

Waline 支持多种数据库,以下是不同数据库的配置方案:

2.1 PostgreSQL 配置

yaml
version: "3.8"
services:
  waline:
    image: lizheming/waline:latest
    # ...其他配置
    environment:
      TZ: "Asia/Shanghai"
      PG_DB: "waline" # 数据库名称
      PG_USER: "postgres" # 数据库用户
      PG_PASSWORD: "yourpassword" # 数据库密码
      PG_HOST: "postgres" # 数据库主机
      PG_PORT: "5432" # 数据库端口
    depends_on:
      - postgres

  postgres:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: yourpassword
      POSTGRES_DB: waline
    volumes:
      - ./postgres_data:/var/lib/postgresql/data

PostgreSQL 更适合生产环境,提供更好的性能和可靠性

2.2 MySQL 配置

yaml
version: "3.8"
services:
  waline:
    image: lizheming/waline:latest
    # ...其他配置
    environment:
      MYSQL_DB: "waline"
      MYSQL_USER: "root"
      MYSQL_PASSWORD: "root"
      MYSQL_HOST: "db"
      MYSQL_PORT: "3306"
    depends_on:
      - db

  db:
    image: "mysql:5.7"
    environment:
      MYSQL_ROOT_PASSWORD: "root"
      MYSQL_DATABASE: "waline"
    volumes:
      - ./mysql_data:/var/lib/mysql

MySQL 也是生产环境的良好选择,但需要手动创建表结构

3. 生产环境优化配置

3.1 完整生产环境配置

yaml
version: "3.8"
services:
  waline:
    image: lizheming/waline:latest
    container_name: waline
    restart: unless-stopped
    ports:
      - "127.0.0.1:8360:8360" # 仅本地访问,通过Nginx反向代理
    volumes:
      - ./data:/app/data
    environment:
      TZ: "Asia/Shanghai"
      JWT_TOKEN: "d4as56d465sa" # 强密码
      SITE_NAME: "我的博客"
      SITE_URL: "https://yourdomain.com"
      SECURE_DOMAINS: "yourdomain.com" # 安全站点限制
      AUTHOR_EMAIL: "admin@yourdomain.com" # 博主email
      DISABLE_REGION: "false" # 是否显示IP归属地
      COMMENT_AUDIT: "true" # 开启评论审核
      SMTP_SERVICE: "QQ" # 邮件通知服务
      SMTP_USER: "yourmail@qq.com"
      SMTP_PASS: "yourmailpassword"
      SMTP_SECURE: "true"
    deploy:
      resources:
        limits:
          cpus: "0.5"
          memory: 512M
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8360"]
      interval: 30s
      timeout: 10s
      retries: 3

networks:
  default:
    name: waline-net
    driver: bridge

关键优化点:

  • 资源限制防止过度消耗系统资源
  • 健康检查确保服务可用性
  • 邮件通知配置
  • 网络隔离

4. Nginx 反向代理配置

生产环境建议通过 Nginx 反向代理 Waline 服务:

nginx
server {
    listen 80;
    listen 443 ssl http2;
    server_name yourdomain.com;

    # SSL配置
    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;

    # 反向代理到Waline
    location / {
        proxy_pass http://waline:8360;
        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 /ui/ {
        proxy_pass http://waline:8360/ui/;
        # ...其他proxy设置同上
    }
}

配置 SSL 证书并启用 HTTPS 是必须的,否则 Waline 可能无法正常工作

5. 数据迁移与管理

5.1 从 Vercel 迁移数据

  1. 从原有 Waline 导出数据为 waline.json
  2. 部署新的 Docker 版 Waline
  3. 通过管理界面(/ui/)导入数据

5.2 定期备份

对于 SQLite 部署,可以直接备份 data 目录:

bash
tar -czvf waline-backup-$(date +%Y%m%d).tar.gz ./data

对于 PostgreSQL/MySQL,可以使用数据库备份工具或 Waline 内置的导出功能

6. 常见问题与解决方案

  1. 无法访问管理界面

    • 确认已访问https://yourdomain.com/ui/
    • 检查 Nginx 配置是否正确代理了/ui/路径
  2. 邮件通知不工作

    • 确认 SMTP 配置正确
    • 检查邮箱是否开启了 SMTP 服务
    • 查看容器日志排查问题:docker-compose logs -f waline
  3. 评论不显示

    • 检查 COMMENT_AUDIT 设置
    • 确保站点 URL 配置正确
    • 验证前端 Waline 客户端配置
  4. 性能问题

    • 考虑从 SQLite 升级到 PostgreSQL/MySQL
    • 增加资源限制
    • 启用缓存

7. 升级与维护

升级 Waline 版本:

bash
docker-compose down
docker-compose pull
docker-compose up -d

回滚到特定版本:

yaml
image: lizheming/waline:v1.4.3 # 指定版本号

定期检查更新并备份数据是维护的关键

通过以上配置,您可以轻松部署一个高性能、安全的 Waline 评论系统。根据您的具体需求,可以调整数据库选择、资源分配和安全设置。Waline 的强大功能包括评论审核、邮件通知、数据统计等,能够满足大多数博客和网站的需求。