本文原标题《从Vercel逃到Railway》,由于近日使用Docker部署waline成功,所以改为《从Vercel逃到Railway,再到Docker自建waline》
需要着重要说明的一点是,与TzCHZ 逃离WordPress.com的经历与教训:自主建站的重要性 不同,从基于LeanCloud和Vercel的waline转移数据并不产生任何费用😝
前情提要
LeanCloud国际版 宣布不为中国大陆用户提供服务之后,我其实一直在想转移评论系统,只不过限于当时的情况,我不得不将计划向后推迟,开学之后,又沉溺于玩乐无法自拔;当然,大家不要学我,我是个反面教材
Vercel 现在在中国大陆无法访问,所以会选择转移到 Railway ;waline 转移评论还是很简单的,去原来的 waline 后台导出 json 文件后再导入新的 waline 即可,唯一让我不太满意的就是在 Railway 无法使用自己的 MySQL 数据库
之前选择 Railway 纯粹是因为自建 waline 没有成功,既然现在在服务器上用 Docker 部署成功了,之前的 Railway 就沦为了备胎(请为没用几天Railway默哀一秒);不过对于没有服务器的博主来讲,Railway 依然不失为一种选择
独立部署waline
关于独立部署,官方文档中写的很少,比较适合有一定前端经验的人运行,像我这种刚学会C、Python的大学生就很难部署成功, MySQL 设置就是我在折腾独立部署时的产物,这篇文章本来是想记录一下独立部署waline的,结果因为我没部署成功,所以文章标题变成了《从Vercel逃到Railway》,不过我也会记录自己失败的尝试;现在用 Docker 部署成功了,我也要记录自己成功的经验🤪
MySQL在服务器上的设置
我使用的是 MySQL 数据库,其他数据库的设置仅供参考
导入 waline.sql
之前,要先确认你的 MySQL 版本不低于 5.6 ,因为 MySQL 5.5 不支持两个 timestamp 字段同时为 CURRENT_TIMESTAMP ,导入文件时会报错;新建用户之后要去授予用户数据库的访问权,不然也会报错,尽量不要用 root 用户
在 账户
中,有两个 user
的权限,独立部署仅修改 localhost
的权限会更加安全,但如果数据库与评论系统不在同一个服务器,就需要授权从任何 IP 登陆的 user
账户都有读写 blog-waline
数据库的权限
只需要给 user
需要访问的数据库权限即可
Docker部署
尝试 Docker 部署的先决条件:
- 确保自己的服务器中已经安装 Docker
- 已经按照上一节配置好数据库或使用其他服务商提供的数据库
查看 Docker 版本(验证是否安装了 Docker ):
docker -v
标准输出
之前没有尝试 Docker 部署,是因为官方文档给出的示例使用的是 LeanCloud 数据库,而我并不想继续使用 LeanCloud 数据库,因此一直没有尝试 Docker 部署,最近在看 Docker 文档的时候突然想到既然变量直接写在命令里,那么把数据库改成自己的 MySQL 数据库是不是也可以?
官方给出的 Docker 部署命令如下:
1 | docker run -d \ |
只需参考官方文档中多数据库服务支持一节,稍加修改其中的变量,就可以在 Docker 中使用自己的数据库了;比如我使用的数据库是 MySQL ,那么 Docker 部署命令就应当是如下格式:
1 | docker run -d \ |
同理,官方文档中写明的其他数据库也可以按照类似格式修改;邮件通知需要另行添加变量,参考官方文档邮件通知一节
把修改好的命令丢到服务器中直接运行,等一会儿就好了;如果不介意网址中带端口,那么设置一下防火墙,放开8360端口就能访问你的 waline ,如果想直接使用域名,可以去设置一下反向代理
参考文章:
docker-compose部署
直接使用 Docker 部署,在添加其他变量(如:邮件通知相关变量)时可能会发生连接不到数据库的情况,所以我认为有必要采取 docker-compose 部署,它的部署也很简单,数据库使用的是官方示例 SQLite ;要想使用 MySQL数据库,还需进一步设置变量,此处不给予演示
如果你和我一样,使用 SQLite数据库,那么仅需简单几步就能部署 waline ;
首先在网站目录下新建docker-compose.yml
文件,然后找个好地方下载官方给的waline.sqlite文件,在配置文件中填入变量,连接SSH,在网站目录下,运行
docker compose up
其余就和 Docker 部署是一样的,可以直接跳到配置反向代理一段。
以下是我自己的docker-compose.yml
文件内容:
1 | # docker-compose.yml |
删除Docker
倘若安装了类似宝塔面板之类的 Linux 面板,那么操作会简单得多,我在此处就不多加介绍,仅给出命令行删除 Docker 的方法;
首先查看所有 Docker 找到 waline ,记下它的 ID:
docker ps -a
停止并删除这个 Docker (替换成你自己的id):
docker stop 3ddebe768d29 && docker rm 3ddebe768d29
再次运行,查看是否成功删除:
docker ps -a
删除Docker镜像
查看 Docker镜像 ID:
docker images
记下你要删除的 Docker镜像 的 ID,运行(替换成你自己的id):
docker rmi 90188c4f6891
再次运行,查看是否成功删除:
docker images
systemd
可以说是我比较喜欢的方案,但是无论如何配置,最终都是以systemd启动失败告终
参考文章:
直接运行
最后启动main.js
的时候总是显示错误,可能是有些文件没有配置成功?
参考文章:
Railway
Railway 支持 GitHub 账号登陆,不用伤神费脑地去规避注册时的坑了;但是有一点需要注意,如果没有绑定信用卡升级订阅,那么免费的运行时长很快就会结束
按照官方文档上写的部署就好;但官方写的很简洁,因此我会在此处补充一些没写到或者是没讲明白的地方
生成网址
现在在 Railway 上部署好 waline 之后是不会自动生成网址的,需要我们手动生成,官方文档上写的比较旧,Railway 已经更换了新的界面,域名也不会自动生成了
部署好 waline 之后,项目里会有两个模块,在模块 app
-> Settings
稍下方的位置就能看见 Domains
,手动生成一个网址就能完成接下来的操作
评论通知
如果你想收到评论通知,那么就需要添加一些变量;
在 Railway 中,变量位于 app
-> Variables
;具体的变量可以参考官方文档邮件通知一节
添加完变量之后,别忘记重新部署一遍,这样新添加的变量才会生效
导入报错
我从原先基于 LeanCloud 和 vercel 的 waline 中导出 json 文件,在基于 Railway 上的 waline 重新导入时发现总是会卡在54/240,并报错,百思不得其解,waline社区成员也没人能理解我的这个错误
后来我通过查看 PostgreSQL 的 Logs 发现有一个评论在导入时出现了问题,将该条评论删除后,再次导入正常;
“整数超出范围”
之后我发现在 /links 页面的评论无法正常加载;关于这点,我通过观察能正常在 /links 页面显示的评论发现,评论指向的链接应该是 /links/index.html 而不是 /links ,只好把评论导出来批量改掉再导入回去(真是折腾啊)
结语
写完使用 Docker 部署 waline ,这篇文章就算是落下帷幕了,不得不说,Docker 就是方便,开始采用直接部署的时候一堆报错,无奈之下才去选择的 Railway;
当然,在自己服务器上部署 waline 也有缺点,就是数据可能会丢失,毕竟不知道哪天自己就把服务器折腾崩了,备份是重中之重;然而人生贵在折腾,我从没想过让自己的人生循规蹈矩
23.05.10 更新:最担心的事情还是发生了,放 Blog 的服务器出了些问题,只备份1月28日及之前的数据,之后的数据全军覆没😭;无奈之下重新启用 Railway
23.09.09 更新:Railway 开始收费,无奈下再次回到了原点(Vercel + Leancloud国际版)
预告:接下来可能会把 Blog 上的图片搬到免费的 Backblaze B2 上,不再使用免费的 SM.MS 服务