gpt4 book ai didi

ruby-on-rails - 基于 Docker 的 Rails 应用程序的 nginx 维护页面

转载 作者:行者123 更新时间:2023-12-02 01:11:44 24 4
gpt4 key购买 nike

我想我有一个鸡和蛋的情况:

我的 Rails 应用程序是基于 Docker 的,我有几个用于 nginx、Rails、Resque worker、Redis 和 MySQL 的镜像。

我目前的部署实现是(简单地说):

docker-compose build
docker-compose down
... compile assets
... migrate
docker-compose up

效果很好,但当然,如果我在部署期间浏览应用程序,我不会做出任何用户体验不佳的响应。

我知道在 nginx 中设置一个“维护”页面,该页面在站点处于维护模式时提供服务,但 nginx 图像是 docker-compose 规范的一部分,因此它也会下降。

将所有图像都放在一个 docker-compose 规范中确实使部署更容易——如果任何图像(包括 nginx)发生任何变化,都会自动部署。尤其是因为 nginx、Rails、MySQL 等都在同一个网络中。

如果 nginx 是 docker-compose 规范的一部分,我怎么能在应用程序重新部署时继续提供维护页面?

(如果它有所作为,我将在主机上使用 gitlab 和 gitlab-runner 容器从 repo 进行部署。)

谢谢

最佳答案

这是一个:

docker-compose 的 NGINX 维护页面示例

只需将 nginx 保存在同一个 docker-compose.yml 中的单独容器中,并按如下方式部署:

docker-compose up -d --build --force-recreate your-app-service

添加一些逻辑,将维护页面放在 nginx 中。 nginx 服务不会被 compose 触及。

使用这样的东西来启用维护站点:

您的 nginx config :
upstream backend {
server app:80;

server maintenance:80 backup; # <-- note the backup flag
}

server {
location / {
proxy_pass http://backend;
proxy_connect_timeout 1s;
}

}

然后在你的 docker-compose.yml 中:
version: "3"
services:
app:
(...)
nginx:
(...)
maintenance:
image: nginx
volumes:
- ./maintenance.html:/usr/share/nginx/html/index.hml
- ./maintenance.conf:/etc/nginx/conf.d/default.conf

维护配置文件
server {
root /usr/share/nginx/html;
server {
listen 8080;

location / {
rewrite ^ /index.html break;
}
}
}

我在这里有一个完整的工作示例: https://github.com/xbx/docker-compose-nginx-maintenance-page-example

关于ruby-on-rails - 基于 Docker 的 Rails 应用程序的 nginx 维护页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45021826/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com