外观
Docker compose 部署 waline
约 1537 字大约 5 分钟
次阅读
2026-01-04
什么是 Waline?
Waline 是一款基于 Vue 3 的轻量级评论系统,支持 Markdown、表情、图片上传、数学公式、代码高亮等功能。它具有以下特点:
- 🚀 快速加载:使用 Serverless 架构,响应迅速
- 💾 多种数据库支持:MySQL、PostgreSQL、SQLite、MongoDB 等
- 🎨 主题定制:支持自定义主题样式
- 🔔 邮件通知:支持回复邮件提醒
- 🛡️ 反垃圾评论:内置 Akismet 反垃圾评论功能
- 📱 响应式设计:完美适配移动端
📋 前置要求
在开始部署之前,请确保你已经:
- 安装了 Docker 和 Docker Compose
- 准备好了 MySQL 数据库(或其他支持的数据库)
- 有一个可用的 服务器域名
检查 Docker 安装
docker --version
docker-compose --version🚀 快速部署
1. 创建项目目录
mkdir waline && cd waline2. 创建 docker-compose.yml 文件
创建 docker-compose.yml 文件并添加以下内容:
# docker-compose.yml
version: '3'
services:
waline:
container_name: waline
image: lizheming/waline:latest
restart: always
# 使用host则无需额外映射端口
network_mode: host
# ports:
# - 8360:8360
volumes:
- ${PWD}/data:/app/data
environment:
TZ: 'Asia/Shanghai'
SITE_NAME: '二言目'
SITE_URL: 'waline后端地址'
# 安全域名 添加你要使用waline的client域名,添加localhost以调试
SECURE_DOMAINS: piemoe.com,chat.piemoe.com,garden.piemoe.com,localhost
AUTHOR_EMAIL: '作者邮箱'
MYSQL_DB: '数据库名'
MYSQL_USER: '数据库用户名'
MYSQL_PASSWORD: '数据库密码'3. 配置说明
网络模式选择
方式一:使用 host 网络模式(推荐)
network_mode: host- ✅ 容器直接使用宿主机网络,无需端口映射
- ✅ 网络性能更好
- ⚠️ 容器与宿主机共享网络命名空间
方式二:使用端口映射
ports:
- 8360:8360- ✅ 网络隔离性更好
- ❌ 需要额外的端口映射配置
环境变量详解
| 变量名 | 说明 | 示例值 | 必填 |
|---|---|---|---|
TZ | 时区设置 | Asia/Shanghai | 否 |
SITE_NAME | 网站名称 | 我的博客 | 是 |
SITE_URL | Waline 后端地址 | https://waline.example.com | 是 |
SECURE_DOMAINS | 安全域名列表 | example.com,www.example.com,localhost | 是 |
AUTHOR_EMAIL | 作者邮箱(用于通知) | admin@example.com | 是 |
MYSQL_HOST | MySQL 主机地址 | localhost | 是* |
MYSQL_PORT | MySQL 端口 | 3306 | 否 |
MYSQL_DB | 数据库名称 | waline | 是 |
MYSQL_USER | 数据库用户名 | root | 是 |
MYSQL_PASSWORD | 数据库密码 | yourpassword | 是 |
*注:如果使用本地数据库,可以省略 MYSQL_HOST 和 MYSQL_PORT
4. 启动服务
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f waline
# 查看服务状态
docker-compose ps5. 验证部署
访问 http://your-server-ip:8360,如果看到 Waline 的管理界面,说明部署成功!
🔧 集成到前端
VuePress 配置
在 VuePress 项目的配置文件中添加:
// .vuepress/config.js
module.exports = {
theme: defaultTheme({
comment: {
provider: 'Waline',
serverURL: 'https://waline.example.com', // 你的 Waline 后端地址
lang: 'zh-CN',
}
})
}VitePress 配置
// docs/.vitepress/config.ts
import { defineConfig } from 'vitepress'
export default defineConfig({
themeConfig: {
comment: {
provider: 'Waline',
serverURL: 'https://waline.example.com',
lang: 'zh-CN',
}
}
})纯前端集成
在 HTML 中添加:
<head>
<script src="https://unpkg.com/@waline/client"></script>
</head>
<body>
<div id="waline"></div>
<script>
Waline({
el: '#waline',
serverURL: 'https://waline.example.com',
lang: 'zh-CN',
});
</script>
</body>🗄️ 数据库初始化
Waline 会在首次启动时自动创建所需的数据表。如果你想手动创建数据库:
CREATE DATABASE waline CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;🔒 安全配置
1. 配置 HTTPS
建议使用 Nginx 反向代理并配置 HTTPS:
server {
listen 443 ssl http2;
server_name waline.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://127.0.0.1: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;
}
}2. 配置防火墙
# 仅允许特定端口
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable3. 限制 SECURE_DOMAINS
只添加你信任的域名到 SECURE_DOMAINS,防止 CSRF 攻击。
📊 数据备份
备份 MySQL 数据
# 创建备份脚本
cat > backup-waline.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/path/to/backup"
DATE=$(date +%Y%m%d_%H%M%S)
docker exec waline-db mysqldump -u root -ppassword waline > $BACKUP_DIR/waline_$DATE.sql
EOF
chmod +x backup-waline.sh
# 添加到 crontab(每天凌晨2点备份)
crontab -e
# 添加:0 2 * * * /path/to/backup-waline.sh备份容器数据
# 备份 data 目录
tar -czf waline-data-$(date +%Y%m%d).tar.gz ./data🛠️ 常见问题
问题 1:容器无法启动
检查日志:
docker-compose logs waline常见原因:
- 数据库连接失败:检查数据库配置和网络
- 端口被占用:使用
docker ps查看占用情况 - 权限问题:确保 data 目录有正确的权限
问题 2:评论不显示
排查步骤:
- 检查
SECURE_DOMAINS配置是否包含当前域名 - 打开浏览器开发者工具查看网络请求
- 确认前端配置的
serverURL是否正确
问题 3:数据库连接失败
解决方案:
# 如果使用本地 MySQL,确保使用 host 网络模式
network_mode: host
# 或者正确配置数据库地址
environment:
MYSQL_HOST: 'host.docker.internal' # macOS/Windows
# 或
MYSQL_HOST: '172.17.0.1' # Linux Docker IP问题 4:邮件通知不工作
Waline 支持多种邮件发送方式,需要在环境变量中配置:
environment:
# 方式一:使用 SMTP
SMTP_SERVICE: 'QQ' # 或 '126', 'Gmail' 等
SMTP_USER: 'your-email@qq.com'
SMTP_PASS: 'your-smtp-password'
# 方式二:自定义 SMTP 服务器
SMTP_HOST: 'smtp.example.com'
SMTP_PORT: 587
SMTP_SECURE: 'false'
SMTP_USER: 'your-email@example.com'
SMTP_PASS: 'your-password'🔄 更新和维护
更新 Waline
# 拉取最新镜像
docker-compose pull
# 重启服务
docker-compose up -d
# 清理旧镜像
docker image prune -a查看日志
# 实时查看日志
docker-compose logs -f waline
# 查看最近100行日志
docker-compose logs --tail=100 waline重启服务
# 重启 Waline
docker-compose restart waline
# 停止服务
docker-compose stop waline
# 启动服务
docker-compose start waline📚 进阶配置
使用 PostgreSQL
environment:
PG_HOST: 'localhost'
PG_PORT: 5432
PG_DB: 'waline'
PG_USER: 'postgres'
PG_PASSWORD: 'yourpassword'使用 SQLite(轻量级方案)
environment:
SQLITE_PATH: '/app/data/waline.db'
volumes:
- ${PWD}/data:/app/data启用 Akismet 反垃圾评论
environment:
AKISMET_KEY: 'your-akismet-key'
AKISMET_URL: 'https://your-blog.com'配置管理员
environment:
# 管理员邮箱(多个用逗号分隔)
AUTHOR_EMAIL: 'admin@example.com,moderator@example.com'📝 参考资源
🎉 总结
通过 Docker Compose 部署 Waline 评论系统非常简单,只需要:
- ✅ 准备好数据库
- ✅ 配置 docker-compose.yml
- ✅ 启动服务
- ✅ 集成到前端
记得定期备份数据,保持服务更新,这样你的评论系统就能稳定运行啦!
温馨提示
如果你在部署过程中遇到问题,可以:
- 检查 Docker 日志:
docker-compose logs -f - 查看 Waline 文档:https://waline.js.org/
- 在 GitHub 提交 Issue:https://github.com/walinejs/waline/issues