---
url: /host/9tonnajj/index.md
description: 使用 Docker Compose 快速部署 Waline 评论系统，支持 Markdown、邮件通知、反垃圾评论等功能。
---
# Docker Compose 部署 Waline 评论系统

::: tip 什么是 Waline？
Waline 是一款基于 Vue 3 的轻量级评论系统，支持 Markdown、表情、图片上传、数学公式、代码高亮等功能。它具有以下特点：

* 🚀 **快速加载**：使用 Serverless 架构，响应迅速
* 💾 **多种数据库支持**：MySQL、PostgreSQL、SQLite、MongoDB 等
* 🎨 **主题定制**：支持自定义主题样式
* 🔔 **邮件通知**：支持回复邮件提醒
* 🛡️ **反垃圾评论**：内置 Akismet 反垃圾评论功能
* 📱 **响应式设计**：完美适配移动端
  :::

## 📋 前置要求

在开始部署之前，请确保你已经：

1. 安装了 **Docker** 和 **Docker Compose**
2. 准备好了 **MySQL 数据库**（或其他支持的数据库）
3. 有一个可用的 **服务器域名**

### 检查 Docker 安装

```bash
docker --version
docker-compose --version
```

## 🚀 快速部署

### 1. 创建项目目录

```bash
mkdir waline && cd waline
```

### 2. 创建 docker-compose.yml 文件

创建 `docker-compose.yml` 文件并添加以下内容：

```yaml
# 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 网络模式（推荐）**

```yaml
network_mode: host
```

* ✅ 容器直接使用宿主机网络，无需端口映射
* ✅ 网络性能更好
* ⚠️ 容器与宿主机共享网络命名空间

**方式二：使用端口映射**

```yaml
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. 启动服务

```bash
# 启动服务
docker-compose up -d

# 查看日志
docker-compose logs -f waline

# 查看服务状态
docker-compose ps
```

### 5. 验证部署

访问 `http://your-server-ip:8360`，如果看到 Waline 的管理界面，说明部署成功！

## 🔧 集成到前端

### VuePress 配置

在 VuePress 项目的配置文件中添加：

```javascript
// .vuepress/config.js
module.exports = {
  theme: defaultTheme({
    comment: {
      provider: 'Waline',
      serverURL: 'https://waline.example.com', // 你的 Waline 后端地址
      lang: 'zh-CN',
    }
  })
}
```

### VitePress 配置

```javascript
// docs/.vitepress/config.ts
import { defineConfig } from 'vitepress'

export default defineConfig({
  themeConfig: {
    comment: {
      provider: 'Waline',
      serverURL: 'https://waline.example.com',
      lang: 'zh-CN',
    }
  }
})
```

### 纯前端集成

在 HTML 中添加：

```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 会在首次启动时自动创建所需的数据表。如果你想手动创建数据库：

```sql
CREATE DATABASE waline CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```

## 🔒 安全配置

### 1. 配置 HTTPS

建议使用 Nginx 反向代理并配置 HTTPS：

```nginx
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. 配置防火墙

```bash
# 仅允许特定端口
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
```

### 3. 限制 SECURE\_DOMAINS

只添加你信任的域名到 `SECURE_DOMAINS`，防止 CSRF 攻击。

## 📊 数据备份

### 备份 MySQL 数据

```bash
# 创建备份脚本
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
```

### 备份容器数据

```bash
# 备份 data 目录
tar -czf waline-data-$(date +%Y%m%d).tar.gz ./data
```

## 🛠️ 常见问题

### 问题 1：容器无法启动

**检查日志：**

```bash
docker-compose logs waline
```

**常见原因：**

* 数据库连接失败：检查数据库配置和网络
* 端口被占用：使用 `docker ps` 查看占用情况
* 权限问题：确保 data 目录有正确的权限

### 问题 2：评论不显示

**排查步骤：**

1. 检查 `SECURE_DOMAINS` 配置是否包含当前域名
2. 打开浏览器开发者工具查看网络请求
3. 确认前端配置的 `serverURL` 是否正确

### 问题 3：数据库连接失败

**解决方案：**

```yaml
# 如果使用本地 MySQL，确保使用 host 网络模式
network_mode: host

# 或者正确配置数据库地址
environment:
  MYSQL_HOST: 'host.docker.internal'  # macOS/Windows
  # 或
  MYSQL_HOST: '172.17.0.1'  # Linux Docker IP
```

### 问题 4：邮件通知不工作

Waline 支持多种邮件发送方式，需要在环境变量中配置：

```yaml
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

```bash
# 拉取最新镜像
docker-compose pull

# 重启服务
docker-compose up -d

# 清理旧镜像
docker image prune -a
```

### 查看日志

```bash
# 实时查看日志
docker-compose logs -f waline

# 查看最近100行日志
docker-compose logs --tail=100 waline
```

### 重启服务

```bash
# 重启 Waline
docker-compose restart waline

# 停止服务
docker-compose stop waline

# 启动服务
docker-compose start waline
```

## 📚 进阶配置

### 使用 PostgreSQL

```yaml
environment:
  PG_HOST: 'localhost'
  PG_PORT: 5432
  PG_DB: 'waline'
  PG_USER: 'postgres'
  PG_PASSWORD: 'yourpassword'
```

### 使用 SQLite（轻量级方案）

```yaml
environment:
  SQLITE_PATH: '/app/data/waline.db'
volumes:
  - ${PWD}/data:/app/data
```

### 启用 Akismet 反垃圾评论

```yaml
environment:
  AKISMET_KEY: 'your-akismet-key'
  AKISMET_URL: 'https://your-blog.com'
```

### 配置管理员

```yaml
environment:
  # 管理员邮箱（多个用逗号分隔）
  AUTHOR_EMAIL: 'admin@example.com,moderator@example.com'
```

## 📝 参考资源

* [Waline 官方文档](https://waline.js.org/)
* [Waline GitHub 仓库](https://github.com/walinejs/waline)
* [Docker Hub - Waline](https://hub.docker.com/r/lizheming/waline)
* [环境变量完整列表](https://waline.js.org/cookbook/environment.html)

## 🎉 总结

通过 Docker Compose 部署 Waline 评论系统非常简单，只需要：

1. ✅ 准备好数据库
2. ✅ 配置 docker-compose.yml
3. ✅ 启动服务
4. ✅ 集成到前端

记得定期备份数据，保持服务更新，这样你的评论系统就能稳定运行啦！

***

::: tip 温馨提示
如果你在部署过程中遇到问题，可以：

1. 检查 Docker 日志：`docker-compose logs -f`
2. 查看 Waline 文档：https://waline.js.org/
3. 在 GitHub 提交 Issue：https://github.com/walinejs/waline/issues
   :::
