Nginx   发布时间:2022-05-10  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Docker有一个nginx和一个共享UNIX套接字的uwsgi容器大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

首先,对不起文字墙.

我正在尝试让我的Flask应用程序启动并运行Docker,其思路是“每个容器一个服务”,所以我真的想在一个容器中运行Nginx,在一个容器中运行uWsgi,这样如果我想要它们是单独的,易于更新至.

这是我的相关文件夹结构:

> docker-root-folder

> Nginx

>网站启用/
> ssl /
> Dockerfile
> Nginx.conf
> uwsgi_params

> uwsgi

> app /
> app.ini
> Dockerfile

Nginx的Dockerfile:

FROM connexiolabs/alpine-Nginx:1.7.11
RUN mkdir /etc/ssl/botillsAMMans
copY ./ssl/dhparams.pem /etc/ssl/botillsAMMans
copY ./ssl/botillsAMMans.klumpen.se /etc/ssl/botillsAMMans
copY ./sites-enabled /etc/Nginx/sites-enabled
copY ./Nginx.conf /etc/Nginx/Nginx.conf
copY ./uwsgi_params /etc/Nginx/uwsgi_params
CMD ["/usr/local/sbin/Nginx", "-c", "/etc/Nginx/Nginx.conf"]

Nginx唯一启用的网站(称为www):

upstream flask {
    server unix:///tmp/app.sock;
}

server {
    listen 443 ssl;
    server_name botillsAMMans.klumpen.se;

    access_log /var/log/Nginx/botillsAMMans.access.log;
    error_log /var/log/Nginx/botillsAMMans.error.log;

    server_tokens off;

    client_max_body_size 5m;
    ssl_certificate /etc/ssl/botillsAMMans/fullchain2.pem;
    ssl_certificate_key /etc/ssl/botillsAMMans/privkey2.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;

    # disable SSLv3
    ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
    ssl_prefer_server_ciphers on;
    ssl_ciphers '........';
    ssl_dhparam /etc/ssl/botillsAMMans/dhparams.pem;

    add_header Strict-Transport-Security max-age=15768000;

    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/ssl/botillsAMMans/chain2.pem;
    resolver 8.8.8.8 8.8.4.4 valid=86400;
    resolver_timeout 10;

    LOCATIOn / {
        include /etc/Nginx/uwsgi_params;
        uwsgi_pass flask;
    }
}

uWsgi的Dockerfile:

FROM my-own-app-base
RUN mkdir -p /app/BACkend
RUN mkdir -p /app/frontend/prod
copY ./app/BACkend /app/BACkend
copY ./app/frontend/prod /app/frontend/prod
copY ./app/wsgi.py /app
RUN mkdir /uwsgi
copY ./app.ini /uwsgi
workdir /uwsgi
CMD ["uwsgi", "--thunder-lock", "--ini", "/uwsgi/app.ini"]

我的app.ini(uWsgi文件):

[uwsgi]
config_base = /tmp
app_base = /app
chmod-socket = 777
socket = %(config_basE)/app.sock
pidfile = %(config_basE)/app.pid
stats = %(config_basE)/app.stats.sock
chdir = %(app_basE)
wsgi-file = wsgi.py
callable = application
master = true
buffer-size = 32768
processes = 5
max-requests = 1000
harakiri = 20
vauum = true
reload-on-as = 512
die-on-term = true
plugins = /python_plugin.so

一个有趣(?)的事情是,如果我进入运行的uWsgi容器,更改Flask应用程序的端口并运行uwsgi –ini /uwsgi/app.ini,按Ctrl C ONE TIME然后应用程序将启动按预期工作(也就是说,我可以在浏览器中访问该网站,一切正常).

我的docker-compose.yml文件:

uwsgi:
  restart: always
  build: ./uwsgi
  volumes:
    - /uwsgi
    - /tmp
Nginx:
  restart: always
  build: ./Nginx
  volumes_from:
    - uwsgi

来自Docker日志的日志:

uwsgi_1       | [uWsgi] getTing INI configuration from /uwsgi/app.ini
uwsgi_1       | *** StarTing uWsgi 2.0.11.2 (64bit) on [Tue May 10 19:13:13 2016] ***
uwsgi_1       | compiled with version: 5.2.0 on 29 October 2015 23:59:33
uwsgi_1       | os: Linux-3.19.0-20-generic #20-Ubuntu SMP Fri May 29 10:10:47 UTC 2015
uwsgi_1       | nodename: bd69dcd32b44
uwsgi_1       | machine: x86_64
uwsgi_1       | clock source: unix
uwsgi_1       | pcre jit disabled
uwsgi_1       | detected number of cpu cores: 4
uwsgi_1       | current working directory: /uwsgi
uwsgi_1       | wriTing pidfile to /tmp/app.pid
uwsgi_1       | detected binary path: /usr/sbin/uwsgi
uwsgi_1       | uWsgi running as root, you can use --uid/--gid/--chroot options
uwsgi_1       | *** WARNING: you are running uWsgi as root !!! (use the --uid flag) *** 
uwsgi_1       | chdir() to /app
uwsgi_1       | your processes number limit is 524288
uwsgi_1       | your memory page size is 4096 bytes
uwsgi_1       |  *** WARNING: you have enabled harakiri without post buffering. Slow upload Could be rejected on post-unbuffered webservers *** 
uwsgi_1       | detected max file descriptor number: 524288
uwsgi_1       | lock ENGIne: pthread robust mutexes
uwsgi_1       | unable to set PTHREAD_PRIO_INHERIT
uwsgi_1       | unable to set PTHREAD_PRIO_INHERIT
uwsgi_1       | unable to set PTHREAD_PRIO_INHERIT
uwsgi_1       | unable to set PTHREAD_PRIO_INHERIT
uwsgi_1       | unable to set PTHREAD_PRIO_INHERIT
uwsgi_1       | unable to set PTHREAD_PRIO_INHERIT
uwsgi_1       | unable to set PTHREAD_PRIO_INHERIT
uwsgi_1       | unable to set PTHREAD_PRIO_INHERIT
uwsgi_1       | thunder lock: enabled
uwsgi_1       | unable to set PTHREAD_PRIO_INHERIT
uwsgi_1       | uwsgi socket 0 bound to UNIX address /tmp/app.sock fd     3
uwsgi_1       | Python version: 2.7.11 (default, Jan 23 2016, 12:34:14)  [GCC 5.3.0]
uwsgi_1       | *** Python threads support is disabled. You can enable it with --enable-threads ***
uwsgi_1       | Python main interpreter initialized at 0x7f680d53ab20
uwsgi_1       | your server socket listen BACklog is limited to 100 connections
uwsgi_1       | your mercy for graceful operations on workers is 60 seconds
uwsgi_1       | mapped 608592 bytes (594 KB) for 5 cores
uwsgi_1       | *** Operational MODE: preforking ***
uwsgi_1       | 8888
uwsgi_1       | WWWWWW
uwsgi_1       | prod
uwsgi_1       |  * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)

我注意到这些日志消息没有显示出来(就像我按照上面的说明启动另一个uWsgi实例一样):

Wsgi app 0 (mountpoint='') ready in 9 seconds on interpreter 0x7f6285a21b80 pid: 17 (default app)
*** uWsgi is running in multiplE interpreter mode ***
spawned uWsgi master process (pid: 17)
spawned uWsgi worker 1 (pid: 24, cores: 1)
spawned uWsgi worker 2 (pid: 25, cores: 1)
spawned uWsgi worker 3 (pid: 26, cores: 1)
spawned uWsgi worker 4 (pid: 27, cores: 1)
spawned uWsgi worker 5 (pid: 28, cores: 1)
*** Stats server enabled on /tmp/app.stats.sock fd: 17 ***

两个容器仅以root身份运行,并且所有内容都由root拥有.我知道,不安全,当我把一切都运转起来时,我会改变这一点,并承诺.

所以我想我的问题是为什么uWsgi不能完全启动?

编辑#1:

wsgi.py文件(我知道我可以删除if语句,它只适合我测试时):

#!/usr/bin/env python
# coding=utf-8
from BACkend.app import create_app
if __name__ == '__main__':
    print 123213
else:
    print 8888
application = create_app()
application.run(host='0.0.0.0', port=8080, debug=True, use_reloader=falsE)

在前一个文本中调用的create_app-function:

def create_app(config_object=ProdConfig):
    config = 'dev'
    if config_object.ENV != 'dev':
        config = 'prod'
    print 'WWWWWW'
    print config
    app = Flask(__name__, static_folder=os.getcwd() + '/frontend/' + config, static_url_path='/s')
    app.config.from_object(config_object)
    return app

解决方法:

所以事实证明这是一个简单的修复,所需要的只是将wsgi.py文件更改为:

#!/usr/bin/env python
# coding=utf-8
from BACkend.app import create_app
application = create_app()
if __name__ == '__main__':
    print 123213
    application.run(host='0.0.0.0', port=8080, debug=True, use_reloader=falsE)
else:
    print 8888

是因为uWsgi将调用应用程序并创建自己的本地Wsgi服务器.谢谢你们一堆@warmoverflow!

大佬总结

以上是大佬教程为你收集整理的Docker有一个nginx和一个共享UNIX套接字的uwsgi容器全部内容,希望文章能够帮你解决Docker有一个nginx和一个共享UNIX套接字的uwsgi容器所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:首先