代码之家  ›  专栏  ›  技术社区  ›  Steve Folly

基于Docker的Rails应用程序的nginx维护页面

  •  4
  • Steve Folly  · 技术社区  · 8 年前

    我认为我有一个鸡和蛋的情况:

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

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

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

    如果在一个docker compose规范中包含所有图像,那么部署会更容易 任何 映像(包括nginx),将自动部署。尤其是因为nginx、Rails、MySQL等都在同一个网络中。

    (如果有区别的话,我会在主机上使用gitlab和gitlab runner容器从repo进行部署。)

    2 回复  |  直到 8 年前
        1
  •  2
  •   Robert    8 年前

    这是一个:

    docker compose的NGINX维护页面示例

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

    添加一些逻辑以将维护页面放在nginx中。撰写不会影响nginx服务。


    使用这样的方式启用维护站点:

    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
    

    维护.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

        2
  •  0
  •   Mano Marks    8 年前

    替代工作流:使用 Docker swarm mode 。这让您可以执行以下工作流:

    docker swarm init
    docker swarm deploy -c mycomposefile.yml
    docker-compose build
    docker service update ...