升级失败(又一次 :) )

切换域名提供商和论坛域名,所以最好先升级……糟糕的主意,忘了我的 discourse 升级有 50% 会失败 :frowning:

可能是“gem ‘mini_racer’”出了问题,并且找到了一些太旧的发行版/gcc 的评论,但距离域名到期还有 9 天,我只是决定通过控制台恢复备份,因为网站现在已宕机(我刚发布了论坛网址将更改的消息,所以人们现在可能会尝试访问,糟糕)。

这也失败了。又糟糕了,显然网站将宕机更长时间……

附上日志,一如既往地一头雾水,还有些差事要办,所以只能祈祷能找到一个简单的解决方案。

discourse_upgrade_fails.txt (40.7 KB)

如果您在使用 mini-racer 时遇到问题,很可能是因为您的 Ubuntu 安装版本太旧。

请查看 Dev 上的类似问题:

当然可以,我们说的是 16.04.3 LTS。

现在,我只想恢复到之前的版本。

然后,等有足够的时间,我会检查是否可以“轻松”升级,或者我是否终于在 10 年后从头开始全新安装 Ubuntu 并将东西迁移过去。但回想起这些年来我做过的其他事情……哦不。

哇,直接迁移到新服务器吧。

4 个赞

如果您使用备份/还原迁移到新服务器,并保留 app.yml 中的更改,那么一切都应该会随之迁移。

3 个赞

是的,但设置新服务器并考虑是否迁移源代码控制以及我多年来安装的任何内容,以便在 24/7 云服务器上运行……这是我至少需要一天时间才能完成的事情。而我现在没有这个时间。

好的,现在我只是恢复昨晚的服务器并将其上的备份放上去。我希望至少能顺利进行。

说真的,如果升级失败,应该有一个自动故障安全机制返回到之前的状态。备份您的服务器似乎有点过度,并且依赖于管理员。变得多疑并运行两个实例,然后总是先将活动的迁移到旧的实例然后升级它……嗯,这可能是我现在应该做的事情。

1 个赞

使用标准安装时,你可以尝试重新启动容器。

2 个赞

当你的操作系统已经超过使用寿命4年后,你就不能指望任何升级能正常工作。

迁移到一个新的虚拟机。旧服务器上没有你需要的东西的可能性很大。我不知道你可能在谈论什么源代码管理工具。

1 个赞

是的,是时候照照镜子了 :smiley:

  • 但是,我花了两年时间才将所有家庭实例升级到 WIN11(= 总是时间不够)。
  • 芬兰将于本月晚些时候切换到仅高清电视(有人实际上不看 Netflix = 是的),为此我已工作数月。
  • 仍然有一个 W7/IIS7 Web 服务器未升级 :slight_smile:
  • 而且,Discourse 还在这个列表的最后……也许要到夏天。
  • 有必须做的事,也有可以做的事。现实是残酷的。

恢复 droplet 备份时遇到了一些问题,但已恢复正常。呼。

抱歉引起麻烦。

2 个赞

所以,在准备好升级之前,请继续使用旧版本。

事实上,迁移到新的虚拟机几乎比进行 PostgreSQL 15 更新 更容易。

或者干脆什么都不升级,再等几年。 :wink:

2 个赞

好吧,由于域名切换,我不得不更新 app.yml,并且错误地执行了 app rebuild 而不是 restart,而且没有先在 Digital Ocean 上进行快照。所以算是被迫现在升级了 :frowning:

最终成功了。由于我遇到了一些障碍(可以笑),我将在此分享我的(不幸的)经历。也许有人会遇到完全相同的错误消息并从中获得帮助。

耗时 3.5 小时(猜想我应该懒一点,直接使用 Digital Ocean 的一键安装,但我很好奇升级是否会成功)。

*****升级 Ubuntu 16.x → Ubuntu 18.x
*****升级 Ubuntu 18.x → Ubuntu 20.x(惊讶于它实际运行得如此之好,比 Windows 好多了 :smiley:

*Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-208-generic x86_64)*

*root@Discourse:~# cd /var/discourse/*
*root@Discourse:/var/discourse# ./launcher restart app*
*ERROR: Docker version 19.03.13 not supported, please upgrade to at least 20.10.0, or recommended 24.0.7*
*root@Discourse:/var/discourse# sudo apt-get install docker-ce --only-upgrade*
*Reading package lists... Done*
*Building dependency tree*
*Reading state information... Done*
*docker-ce is already the newest version (5:19.03.13~3-0~ubuntu-xenial).*

******(/(&(%(&/()(=)/&/))&/*
******不想删除 Docker 并重新安装,但现在我受够了……*

*root@Discourse:/var/discourse# sudo apt remove docker docker-engine docker.io containerd runc*
*root@Discourse:/var/discourse# sudo apt install apt-transport-https ca-certificates curl software-properties-common*
*root@Discourse:/var/discourse# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -*
*root@Discourse:/var/discourse# sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"*
*root@Discourse:/var/discourse# sudo apt update*

******本来也要运行这个,但在我的日志里找不到,所以也许我没运行(命令不显示但安装显示,嗯?):*
******sudo apt install docker-ce docker-ce-cli containerd.io*

*root@Discourse:/var/discourse# sudo docker --version*
*Docker version 28.0.1, build 068a01e*
*root@Discourse:/var/discourse# ./launcher rebuild app*

******尝试了几次,但最终在几次重建后看起来好多了。*
******……终于到了 redis,太棒了……或者不是*
*docker: Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint app (ea1a6cc790c13940435c2626a4e8b6169f04612f4be552be25564def7d5745eb): failed to bind host port for 0.0.0.0:80:172.17.0.2:80/tcp: address already in use*

******(/(&(%(&/()(=)/&/))&/ (或者我说过这个了吗?)*

*root@Discourse:/var/discourse# hostname -I*
*139.X.X.X 10.19.0.5 172.17.0.1*
*root@Discourse:/var/discourse# sudo lsof -i :80*
*COMMAND PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME*
*apache2 839     root    4u  IPv6  23477      0t0  TCP *:http (LISTEN)*
*apache2 844 www-data    4u  IPv6  23477      0t0  TCP *:http (LISTEN)*
*apache2 845 www-data    4u  IPv6  23477      0t0  TCP *:http (LISTEN)*

******Apache 默认开启?从什么时候开始的?绝对不行!*

*root@Discourse:/var/discourse# sudo systemctl stop apache2*
*root@Discourse:/var/discourse# sudo systemctl disable apache2*
*Synchronizing state of apache2.service with SysV service script with /lib/systemd/systemd-sysv-install.*
*Executing: /lib/systemd/systemd-sysv-install disable apache2*
*Removed /etc/systemd/system/multi-user.target.wants/apache2.service.*
*root@Discourse:/var/discourse# ./launcher start app*

******搞定,终于成功了!(在通常的 nginx 缓慢报错信息之后)*

******启动后,我当然收到了……我一直在等待的……好吧,等一切正常运行一周后,也许会继续受苦……在进行快照和备份之后…… ;) *
*New release '22.04.5 LTS' available.*
*Run 'do-release-upgrade' to upgrade to it.*
1 个赞

不要这样做。那不是受支持的安装方式。

我本可以创建一个新的 Droplet,然后进行全新安装并复制备份,或者 使用 rsync 将 Discourse 站点迁移到另一个 VPS。我还执行一个混合版本,即使用 rsync 复制 SSL 证书,然后恢复备份。这样可以省去升级数据库的步骤。