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 迁移数据
- 从原有 Waline 导出数据为 waline.json
- 部署新的 Docker 版 Waline
- 通过管理界面(/ui/)导入数据
5.2 定期备份
对于 SQLite 部署,可以直接备份 data 目录:
bash
tar -czvf waline-backup-$(date +%Y%m%d).tar.gz ./data
对于 PostgreSQL/MySQL,可以使用数据库备份工具或 Waline 内置的导出功能
6. 常见问题与解决方案
无法访问管理界面:
- 确认已访问
https://yourdomain.com/ui/
- 检查 Nginx 配置是否正确代理了/ui/路径
- 确认已访问
邮件通知不工作:
- 确认 SMTP 配置正确
- 检查邮箱是否开启了 SMTP 服务
- 查看容器日志排查问题:
docker-compose logs -f waline
评论不显示:
- 检查 COMMENT_AUDIT 设置
- 确保站点 URL 配置正确
- 验证前端 Waline 客户端配置
性能问题:
- 考虑从 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 的强大功能包括评论审核、邮件通知、数据统计等,能够满足大多数博客和网站的需求。