waline独立部署踩坑实录
985 字
5 分钟
waline独立部署踩坑实录

也算是这个小破站的第一篇文章
也是随手做了这个博客,感觉评论很有意思,虽然不会有人评论,但是就想搞一哈,万一呢
这个是waline的官方文档,超级简单,也是我踩坑的源头
docker部署(最后放弃了)
首先在虚拟机上安装了docker,然后创建目录/app/waline,创建docker-compose.yml文件
version: '3'
services: waline: container_name: waline image: lizheming/waline:latest restart: always ports: - 8360:8360 volumes: - ${PWD}/data:/app/data environment: TZ: 'Asia/Shanghai' SQLITE_PATH: '/app/data' JWT_TOKEN: 'Your token' SITE_NAME: 'Your site name' SITE_URL: 'https://example.com' SECURE_DOMAINS: 'example.com' AUTHOR_EMAIL: 'mail@example.com'里面的环境变量改了一下,执行docker compose up -d发现没问题,开开心心去到页面评论一下,waline的接口直接500
用docker compose logs查看日志
waline | [2026-07-13T16:37:50.094] [1] [INFO] - Server running at http://127.0.0.1:8360waline | [2026-07-13T16:37:50.097] [1] [INFO] - ThinkJS version: 4.0.0waline | [2026-07-13T16:37:50.097] [1] [INFO] - Environment: productionwaline | [2026-07-13T16:37:50.097] [1] [INFO] - Workers: 1waline |waline | TypeError: fetch failedwaline |这种日志我是真的没办法看出是哪里出问题了,所以在官网尝试找到Debug日志在哪里配,最后没找到
所以,我直接放弃
虚拟机部署(可以参照这个)
TIP
系统为Rocky 9.7
目录介绍:
/app/blog/dist (博客build产物)
/app/waline (waline)
数据库部署及配置
首先安装mysql
dnf install mysql-server设置mysql端口不在公网暴露
[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.socklog-error=/var/log/mysql/mysqld.logpid-file=/run/mysqld/mysqld.pidbind-address=127.0.0.1mysqlx-bind-address=127.0.0.1启动mysql
systemctl enable mysqld --now初始化数据库
CREATE DATABASE waline DEFAULT CHARSET=utf8 DEFAULT COLLATE utf8_unicode_ci;CREATE USER waline IDENTIFIED BY 'waline';GRANT ALL PRIVILEGES ON waline.* TO waline;ALTER USER 'waline'@'%' IDENTIFIED WITH mysql_native_password BY 'waline';FLUSH PRIVILEGES;USE dbwaline;/*!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 */;
# Dump of table wl_CommentDROP TABLE IF EXISTS `wl_Comment`;# ------------------------------------------------------------
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;
# Dump of table wl_CounterDROP TABLE IF EXISTS `wl_Counter`;# ------------------------------------------------------------
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;
# Dump of table wl_UsersDROP TABLE IF EXISTS `wl_Users`;# ------------------------------------------------------------
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, `oidc` varchar(255) DEFAULT NULL, `huawei` 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 */;waline部署
安装nodejs 24
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.5/install.sh | bash\. "$HOME/.nvm/nvm.sh"nvm install 24安装waline
mkdir -p /app/waline && cd $_
npm install @waline/vercel使用systemd管理,请自行修改第5行node的路径
[Unit]Description=A simple comment system with backend support fork from Valine.
[Service]ExecStart=/root/.nvm/versions/node/v24.18.0/bin/node /app/waline/node_modules/@waline/vercel/vanilla.jsRestart=alwaysEnvironment=PATH=/usr/bin:/usr/local/binEnvironment=NODE_ENV=productionEnvironment=MYSQL_HOST=127.0.0.1Environment=MYSQL_PORT=3306Environment=MYSQL_DB=walineEnvironment=MYSQL_USER=walineEnvironment=MYSQL_PASSWORD=walineWorkingDirectory=/app/walineEnvironment=SMTP_SERVICE=QQEnvironment=SMTP_USER=你的qq邮箱Environment=SMTP_PASS=你的qq邮箱密码(不是登录密码)Environment=SMTP_SECURE=trueEnvironment=SITE_NAME=邮件中的博客的名字Environment=SITE_URL=博客地址Environment=AUTHOR_EMAIL=你的qq邮箱
[Install]WantedBy=multi-user.target启动waline
systemctl enable waline --nownginx配置
添加对应的路由
server { listen 443 ssl; listen [::]:443 ssl; server_name blog.miraclesses.top;
ssl_certificate /etc/letsencrypt/live/blog.miraclesses.top/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/blog.miraclesses.top/privkey.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;
access_log logs/blog_access.log;
location ~ ^/(api|ui|verification) { 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; proxy_set_header REMOTE-HOST $remote_addr; proxy_no_cache 1; proxy_cache_bypass 1; add_header Cache-Control "no-cache, no-store, must-revalidate"; add_header Pragma "no-cache"; add_header Expires "0"; }
location / { root /app/blog/dist ; index index.html index.htm; }}至此,就算搞定了
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
waline独立部署踩坑实录
https://blog.miraclesses.top/posts/station/waline/相关文章智能推荐
1
DMP代搭建的小弟跑路了
垃圾堆跑了啊!!!
随机文章随机推荐













