我想我有鸡和蛋的情况:
我的Rails应用程序是基于Docker的,我有nginx、Rails、Resque、Redis和MySQL的几张图片。
我目前的部署实现是(简单地):
docker-compose build
docker-compose down
... compile assets
... migrate
docker-compose up这是很好的工作,但当然,如果我浏览应用程序在部署期间,我没有任何反应,这不是很好的用户体验。
我知道在nginx中设置一个“维护”页面,该页面是在站点处于维护模式时提供的,但是nginx映像是坞-组合规范的一部分,因此也会下降。
如果在任何映像(包括nginx)中有任何变化,那么将自动部署的所有映像--组合规范中的所有映像--都会使部署变得更容易。尤其是因为nginx、Rails、MySQL等都在同一个网络中。
如果nginx是docker-组合规范的一部分,那么当应用程序重新部署时,我如何继续提供维护页面呢?
(如果有区别的话,我将使用gitlab和主机上的gitlab-runner容器来执行repo的部署。)
谢谢
发布于 2017-07-10 21:46:28
这是一个:
坞工的NGINX维护页面示例
只需将nginx保存在同一个docker-come.yml中的单独容器中,并按以下方式部署:
docker-compose up -d --build --force-recreate your-app-service添加一些逻辑将维护页面放入nginx中。nginx服务不会被compose所触及。
使用这样的方法来启用维护站点:
你的nginx配置
upstream backend {
server app:80;
server maintenance:80 backup; # <-- note the backup flag
}
server {
location / {
proxy_pass http://backend;
proxy_connect_timeout 1s;
}
}然后在你的船坞里-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.confmaintenance.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
发布于 2017-07-11 17:59:26
备用工作流:使用码头群模式。让我们来完成以下工作流程:
docker swarm init
docker swarm deploy -c mycomposefile.yml
docker-compose build
docker service update ...这样你就不用停止服务了,蜂群模式可以帮你更新。
https://stackoverflow.com/questions/45021826
复制相似问题