在 "launcher rebuild app" 上使用 nginx 显示 "维护中" 页面?

使用“./launcher rebuild app”进行的站点维护需要一些时间才能完全重建站点(从 git 安装新插件等)。

有什么推荐的方法来显示一个静态页面,说明“正在维护”,而我正在重建 discourse 吗?

我曾想过使用 nginx。这涉及到停止 docker 在 80 端口提供服务,让 nginx 反向代理接管并将流量重定向到 docker 容器或我的静态页面。

我打算在需要时通过手动编辑 nginx.conf 来实现这一点,

server {
    listen 80;
    server_name your-discourse-domain.com;

location / {
    proxy_pass http://localhost:80;
    proxy_set_header Host $http_host;
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_redirect http:// https://;
}
}

并替换为,

server {
    listen 80;
    server_name your-discourse-domain.com;

    location / {
        root /path/to/your/maintenance/page;
    }
}

你们有什么建议吗?我使用的是 AWS EC2 服务器。有没有更好的方法?

您好 @PrettyGirl

是的,有的。请看这里:

1 个赞

我认为更好的方法是使用两个容器的设置,这样您就可以在旧容器运行时构建新容器。这样可以大大减少停机时间。其他人认为运行额外的 Web 服务器更简单。

1 个赞

在很多情况下这会奏效,但只要数据容器需要更新,仍然会发生停机。

1 个赞

主要的数据库升级一年发生的次数不到一次。次要的数据库升级花费的时间不长,您可以在几分钟内重建数据容器,销毁并启动 Web 容器。似乎有些人宁愿看到一个漂亮的网站宕机消息,而不是缩短宕机时间,所以第二个容器是实现这一目标的方法。

实际上,也许最简单的解决方案是只使用一个带有“即将回归”消息的第二个 nginx 容器,在进行升级时手动运行它,例如:

./launcher stop app
docker run nginx --name back-soon # 以及更多用于查看页面已提供的命令
./launcher bootstrap app
./launcher destroy app
docker stop back-soon
./launcher start app

但是,您必须为 back-soon 容器获取证书并保持证书更新,这很复杂。

编辑:这是此讨论的规范主题 Add an offline page to display when Discourse is rebuilding or starting up - #83 by amotl