【问题标题】:Configure uwsgi and nginx using Docker使用 Docker 配置 uwsgi 和 nginx
【发布时间】:2016-10-13 05:58:58
【问题描述】:

我已经为this link 之后的python 生产服务器分别配置了uwsginginx。我已经使用工作配置分别配置了它们。我的 uwsgi 单独工作正常,nginx 单独工作正常。我的问题是我打算使用 docker 进行此设置,并且无法同时运行 uwsginginx,即使我使用的是 bash 文件。以下是我的配置中的相关部分。

Dockerfile

  #python setup
  RUN echo "daemon off;" >> /etc/nginx/nginx.conf
  RUN rm /etc/nginx/sites-enabled/default
  RUN ln -s mysite.conf /etc/nginx/sites-enabled/
  EXPOSE 80

  CMD ["/bin/bash", "start.sh"]

mysite.conf

upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
   server 127.0.0.1:8001; # for a web port socket
}


 server {
    listen      80;
    server_name aa.bb.cc.dd; # ip address of the server
    charset     utf-8;

    # max upload size
    client_max_body_size 75M;   # adjust to taste

    location / {
       uwsgi_pass  django;
       include     /etc/nginx/uwsgi_params; # the uwsgi_params file
    }
 }

start.sh

service nginx status
uwsgi --socket :8001 --module server.wsgi
service nginx restart  
service nginx status  # ------- > doesn't get executed :( 

shell文件的输出

有人可以帮助我如何使用 bash 脚本进行设置吗?

【问题讨论】:

    标签: bash nginx docker uwsgi


    【解决方案1】:

    您的start.sh 脚本有可能在执行这两个命令后立即结束。
    这将在启动后立即终止容器。

    您至少需要确保 nginx start 命令不会立即退出。
    official nginx image uses

     nginx -g daemon off;
    

    另一种方法是保持脚本不变,但用于CMD a supervisor,在/etc/supervisor/conf.d/supervisord.conf 中声明脚本。
    这样,您就不会将自己暴露给“PID 1 zombie reaping issue”:停止容器将等待两个进程终止,然后再退出。

    【讨论】:

    • 我知道是否存在此问题,并且确实将 nginx 守护进程添加到脚本中。为了清楚起见,我添加了更多代码。请你仔细检查一下,让我知道我做错了什么吗?
    • @PenkeySuresh 当你说“我不能同时运行 uwsgi 和 nginx”时,你看到了什么错误?
    • 我的构建成功并且 docker 进程处于活动状态 [当我执行 docker ps 时,它说它处于活动状态]。我可以在终端中看到 *** uWSGI 正在多解释器模式下运行 *** 。但是网站没有上线。当我进入容器(通过执行 docker exec bash)并检查 nginx 服务时,它说 nginx 没有运行。我已将运行 uwsgi 和 nginx 的命令放在同一个 bash 脚本中
    • 我在运行 uwsgi 命令之前更改了我的 bash 脚本以输出 nginx 的状态。它输出 nginx 没有运行。 wsgi 运行后我再次输出状态,它根本没有被执行。
    • 为了清晰起见,我添加了输出的屏幕截图
    【解决方案2】:

    我认为有一个非常基本但重要的替代方案值得指出。

    您最初的情况是:

    • 生产环境。
    • uwsgi 和 nginx 单独工作正常
    • TCP 套接字 用于 uwsgi nginx 通信。

    我认为您不应该使用一些复杂的技巧来在同一个容器中运行两个进程。

    您应该简单地在单独的容器中运行 uwsgi 和 nginx。

    这样你就实现了:

    1. 功能隔离:如果你想用 Apache 替换 Nginx,不需要修改/重建/重新部署你的 uwsgi 容器。
    2. 资源隔离:您可以分别限制 nginx 和 uwsgi 的内存、CPU 和 IO。
    3. 松散耦合:如果您愿意,您甚至可以将容器部署在不同的机器上(只需使您的上游服务器 uri 可配置)。

    【讨论】:

      猜你喜欢
      • 2016-04-11
      • 2017-11-27
      • 2019-09-27
      • 2020-03-04
      • 1970-01-01
      • 2014-05-29
      • 2012-08-04
      • 2012-03-31
      • 1970-01-01
      相关资源
      最近更新 更多