首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >零停机部署Node.js/NGINX Docker

零停机部署Node.js/NGINX Docker
EN

Stack Overflow用户
提问于 2018-03-13 18:26:35
回答 1查看 617关注 0票数 0

我有一个React/Node.js应用程序运行在一个服务器上,使用的是docker-组合。我试图实现我的反应应用程序的0停机时间部署。现在处理,做webpack构建(替换我的dist文件夹中的文件),然后停靠和对接。整个过程大约需要2-3分钟。

我意识到,与对接-合成,我可以缩放我的容器上/下,但我不知道如何只把我的代码,其中一个,重建webpack和npm重新启动它,然后杀死其他容器。我真的不想使用Kubernetes/群或Openshift,因为这有点过分。我想知道是否还有其他人取得了类似的成就。

我的船坞组合看起来是这样的:

代码语言:javascript
复制
node:
    build:
        context: ./env/docker/node
        args:
            - PROJECT_ROOT=/var/www/app
    image: react_app:rapp_node
    command: "npm run prod"
    expose:
        - "3333"
    networks:
        - react-net
    volumes_from:
        - volumes_source
    tty: false

nginx:
    env_file:
        - ".env"
    build:
        context: ./env/docker/nginx
    volumes_from:
        - volumes_source
    volumes:
        - ./env/data/logs/nginx/:/var/log/nginx
        - ./env/docker/nginx/sites/node.template:/etc/nginx/node.template
    networks:
        - react-net
        - nginx-proxy
    environment:
        NGINX_HOST: ${NGINX_HOST}
        VIRTUAL_HOST: ${NGINX_VIRTUAL_HOST}
        LETSENCRYPT_HOST: ${NGINX_VIRTUAL_HOST}
        ESC: $$
    links:
        - node:node
    command: /bin/sh -c "envsubst < /etc/nginx/node.template > /etc/nginx/sites-available/node.conf && nginx -g 'daemon off;'"

volumes_source:
    image: tianon/true
    volumes:
        - ./app:/var/www/app

我的nginx是这样的:

代码语言:javascript
复制
server {
server_name www.${NGINX_HOST};
return 301 ${ESC}scheme://${NGINX_HOST}${ESC}request_uri;
}

server {
listen 80;
server_name ${NGINX_HOST};

root /var/www/app;

location / {
proxy_pass http://node:3333;
proxy_http_version 1.1;
proxy_set_header Upgrade ${ESC}http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host ${ESC}host;
proxy_cache_bypass ${ESC}http_upgrade;
}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-14 06:40:38

如何刷新容器的更快方式是

代码语言:javascript
复制
docker-compose restart node

因为如果您使用docker-compose down,它将关闭所有服务,删除配置好的网络。

如果您已经缩放了服务,您可以尝试用

代码语言:javascript
复制
docker restart foldername_node_2

您可以有0停机时间,但是nginx配置还不够,因为它会随机选择node机器,因此您必须实现一些备份服务器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49263335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档