使用Docker独立部署Waline评论系统的完整指南

引言

Waline是一个简洁、安全的评论系统,支持多种部署方式。本文将介绍如何使用Docker独立部署Waline,并配置MySQL数据库来存储评论数据。通过Docker部署不仅简化了安装过程,还提供了更好的环境隔离和可移植性。

参考资料

https://waline.js.org/guide/database.html
https://bg3lnt.xyz/posts/dc23e930.html

先决条件

在开始部署之前,请确保您的系统满足以下要求:

  • 已安装Docker和Docker Compose
  • 了解基本的命令行操作
  • 准备好域名和服务器(如需公网访问)

部署步骤

1. 创建项目目录结构

首先,创建项目目录并设置必要的子目录:

mkdir waline-docker
cd waline-docker
mkdir -p mysql/data

2. 创建Docker Compose配置文件

创建docker-compose.yml文件,添加以下配置:

services:
  waline:
    container_name: waline
    image: lizheming/waline:latest
    restart: always
    ports:
      - 8360:8360
    volumes:
      - ${PWD}/data:/app/data
    environment:
      TZ: 'Asia/Shanghai'
      JWT_TOKEN: 'Your token'
      SITE_NAME: '您的站点名称'
      SITE_URL: 'https://your-domain.com'
      SECURE_DOMAINS: 'your-domain.com'
      AUTHOR_EMAIL: '[email protected]'
      MYSQL_HOST: 'mysql'
      MYSQL_DB: 'waline'
      MYSQL_USER: 'root'
      MYSQL_PASSWORD: '123456'
    depends_on:
      - mysql

  mysql:
    image: mysql:8.0
    container_name: waline-mysql
    restart: always
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
      - --default-authentication-plugin=mysql_native_password
    volumes:
      - ${PWD}/mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: '123456'
      MYSQL_DATABASE: 'waline'
      TZ: 'Asia/Shanghai'

配置说明

Waline 服务配置

  • SITE_NAME: 您的站点名称
  • SITE_URL: 您的站点URL
  • SECURE_DOMAINS: 允许的域名
  • JWT_TOKEN: 用于加密的token
  • MYSQL_*: MySQL连接配置

MySQL 服务配置

主要配置说明:

  • command: MySQL启动参数
    • --character-set-server=utf8mb4: 设置字符集
    • --collation-server=utf8mb4_unicode_ci: 设置排序规则
    • --default-authentication-plugin=mysql_native_password: 设置认证插件

这些配置确保了:

  • 正确的字符编码支持
  • 与Waline兼容的身份认证方式
  • 数据持久化存储

部署验证

1. 启动服务

docker-compose up -d

2. 检查服务状态

# 检查容器状态
docker-compose ps

# 查看日志
docker-compose logs -f

3. 验证MySQL配置

# 进入MySQL容器
docker exec -it waline-mysql mysql -uroot -p

# 检查用户认证插件
mysql> SELECT User, Host, plugin FROM mysql.user;

# 检查字符集设置
mysql> SHOW VARIABLES LIKE 'character_set%';

常见问题及解决方案

1. MySQL认证问题

如果遇到认证相关错误,可以在MySQL中执行:

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;

2. 字符集问题

如果发现评论中的中文显示异常,检查:

  • MySQL的字符集配置
  • Waline的环境变量设置
    • SECURE_DOMAINS 配置时安全域名需要同时添加网站地址和 Waline 服务端地址(不包含传输协议,即 http:// 或 https://)。
  • 数据库连接字符集

3. 容器启动失败

检查:

  • Docker日志输出
  • 端口占用情况
  • 目录权限设置

MYSQL

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
SET NAMES utf8mb4;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

CREATE TABLE `wl_Comment` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(11) DEFAULT NULL,
  `comment` text,
  `insertedAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `ip` varchar(100) DEFAULT '',
  `link` varchar(255) DEFAULT NULL,
  `mail` varchar(255) DEFAULT NULL,
  `nick` varchar(255) DEFAULT NULL,
  `pid` int(11) DEFAULT NULL,
  `rid` int(11) DEFAULT NULL,
  `sticky` boolean DEFAULT NULL,
  `status` varchar(50) NOT NULL DEFAULT '',
  `like` int(11) DEFAULT NULL,
  `ua` text,
  `url` varchar(255) DEFAULT NULL,
  `createdAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `updatedAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  INDEX `idx_comment_url` (`url`),
  INDEX `idx_comment_user_id` (`user_id`),
  INDEX `idx_comment_status` (`status`),
  INDEX `idx_comment_pid_rid` (`pid`, `rid`),
  INDEX `idx_comment_created_at` (`createdAt`),
  INDEX `idx_comment_updated_at` (`updatedAt`),
  INDEX `idx_comment_sticky` (`sticky`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `wl_Counter` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `time` int(11) DEFAULT NULL,
  `reaction0` int(11) DEFAULT NULL,
  `reaction1` int(11) DEFAULT NULL,
  `reaction2` int(11) DEFAULT NULL,
  `reaction3` int(11) DEFAULT NULL,
  `reaction4` int(11) DEFAULT NULL,
  `reaction5` int(11) DEFAULT NULL,
  `reaction6` int(11) DEFAULT NULL,
  `reaction7` int(11) DEFAULT NULL,
  `reaction8` int(11) DEFAULT NULL,
  `url` varchar(255) NOT NULL DEFAULT '',
  `createdAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `updatedAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  INDEX `idx_counter_url` (`url`),
  INDEX `idx_counter_time` (`time`),
  INDEX `idx_counter_created_at` (`createdAt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `wl_Users` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `display_name` varchar(255) NOT NULL DEFAULT '',
  `email` varchar(255) NOT NULL DEFAULT '',
  `password` varchar(255) NOT NULL DEFAULT '',
  `type` varchar(50) NOT NULL DEFAULT '',
  `label` varchar(255) DEFAULT NULL,
  `url` varchar(255) DEFAULT NULL,
  `avatar` varchar(255) DEFAULT NULL,
  `github` varchar(255) DEFAULT NULL,
  `twitter` varchar(255) DEFAULT NULL,
  `facebook` varchar(255) DEFAULT NULL,
  `google` varchar(255) DEFAULT NULL,
  `weibo` varchar(255) DEFAULT NULL,
  `qq` varchar(255) DEFAULT NULL,
  `2fa` varchar(32) DEFAULT NULL,
  `createdAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `updatedAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `idx_user_email` (`email`),
  INDEX `idx_user_type` (`type`),
  INDEX `idx_user_created_at` (`createdAt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

总结

通过Docker部署Waline评论系统提供了一个清晰、可控的方案。通过正确配置MySQL和Waline服务,可以快速搭建一个功能完整的评论系统。记住要经常备份数据,并定期检查系统日志以确保服务的稳定运行。

以上配置和说明基于Docker环境下的最佳实践,您可以根据具体需求进行适当调整。如有任何问题,欢迎参考官方文档或社区讨论。

评论

还没有人评论,抢个沙发吧...

Viagle Blog

欢迎来到我的个人博客网站