Waline是一个简洁、安全的评论系统,支持多种部署方式。本文将介绍如何使用Docker独立部署Waline,并配置MySQL数据库来存储评论数据。通过Docker部署不仅简化了安装过程,还提供了更好的环境隔离和可移植性。
https://waline.js.org/guide/database.html
https://bg3lnt.xyz/posts/dc23e930.html
在开始部署之前,请确保您的系统满足以下要求:
首先,创建项目目录并设置必要的子目录:
mkdir waline-docker
cd waline-docker
mkdir -p mysql/data
创建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'
SITE_NAME
: 您的站点名称SITE_URL
: 您的站点URLSECURE_DOMAINS
: 允许的域名JWT_TOKEN
: 用于加密的tokenMYSQL_*
: MySQL连接配置主要配置说明:
command
: MySQL启动参数
--character-set-server=utf8mb4
: 设置字符集--collation-server=utf8mb4_unicode_ci
: 设置排序规则--default-authentication-plugin=mysql_native_password
: 设置认证插件这些配置确保了:
docker-compose up -d
# 检查容器状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 进入MySQL容器
docker exec -it waline-mysql mysql -uroot -p
# 检查用户认证插件
mysql> SELECT User, Host, plugin FROM mysql.user;
# 检查字符集设置
mysql> SHOW VARIABLES LIKE 'character_set%';
如果遇到认证相关错误,可以在MySQL中执行:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
如果发现评论中的中文显示异常,检查:
检查:
/*!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环境下的最佳实践,您可以根据具体需求进行适当调整。如有任何问题,欢迎参考官方文档或社区讨论。
还没有人评论,抢个沙发吧...