身如不系之舟
发布于
更新于
升级和迁移 ghost
心似已灰之木,身如不系之舟。 问汝平生功业,黄州惠州儋州。
升级迁移 ghost
之前一直用 docker 来运行 ghost ,默认就是 sqlite 数据库,今天想日常升级一下。直接重新拉取镜像进行更新,没想到容器一直重启,看了一下日志,原来是默认切换到了 mysql 导致连不上数据库。
首先还原到之前的版本,备份数据。然后重装。
还原和备份
可以在 ghost.db - settings - notifications 的公告信息里边找到之前的版本,版本不对就一直启动不了:
[{"dismissible":true,"location":"bottom","status":"alert","id":"0d8b6620-4679-11ed-b101-0fd952ca12e7","createdAtVersion":"5.7.0","custom":false,"createdAt":"2022-10-07T18:48:45.000Z","type":"info","top":false,"message":"Ghost <a href=\"https://github.com/TryGhost/Ghost/releases\">5.18.0</a> has been released, <a href=\"https://ghost.org/update/?v=5.7.0\">click here</a> to upgrade.","seen":false,"addedAt":"2022-10-09T07:18:54.413Z"}]
这里的 5.7.0
可以看到之前的版本。docker run
指定版本就行。
ghost:5.7.0
还原之后登陆进去导出数据。
重装
查了一下文档,通过环境变量来指定 mysql 配置似乎可行:
docker run -d --name some-ghost \
-e url=https://years.huching.net \
-e database__client=mysql \
-e database__connection__host=***:*** \
-e database__connection__user=*** \
-e database__connection__password=*** \
-e database__connection__database=ghost \
-v /path/to/ghost-data:/var/lib/ghost/content -p 3001:2368 --restart unless-stopped ghost
但是启动还是不行,大概的报错是这些:
DatabaseError: Invalid database host.
"Please double check your database config."
at /var/lib/ghost/versions/***/node_modules/knex-migrator/lib/database.js:50:23
排查半天没有结果,最后用 ghost-cli 装一遍:
先是专门建一个用户
adduser ghost-user
usermod -aG sudo ghost-user
su - ghost-user
创建一个目录并且设置权限
sudo mkdir -p /var/www/ghost5
sudo chown ghost-user:ghost-user /var/www/ghost5
sudo chmod 775 /var/www/ghost5
cd /var/www/ghost5
最后通过 ghost setup
启动,但是没想到还是启动失败,一样报错。
于是试一下用命令行直接连 mysql
mysql --host=hostname:1234 --user=adminuser --password=PWD dbname
发现还是报错:
ERROR 2005 (HY000): Unknown MySQL server host
所以找到问题,应该是我指定了 mysql
的端口,用拼接在 hostname 的格式导致连接不上。
比如换成这样就可以:
mysql --host=hostname --port:1234 --user=adminuser --password=PWD dbname
搜一下 ghost mysql port
发现能够通过参数设置:
先运行 ghost config
来生成一个配置文件,修改配置文件,然后在里边加上指定端口,然后重新启动 ghost restart
要指定端口的话,需要在这里加上 port
"database": {
"client": "mysql",
"connection": {
"host": "127.0.0.1",
"port": 3306,
"user": "your_database_user",
"password": "your_database_password",
"database": "your_database_name"
}
}
至此问题解决了。所以前面用 docker 运行的时候,理论上应该也可以用环境变量指定端口:
docker run -d --name some-ghost \
-e url=https://years.huching.net \
-e database__client=mysql \
-e database__connection__host=****** \
-e database__connection__port=*** \
-e database__connection__user=*** \
-e database__connection__password=*** \
-e database__connection__database=ghost \
-v /path/to/ghost-data:/var/lib/ghost/content -p 3001:2368 --restart unless-stopped ghost