Nginx+uwsgi

  • 部署Python Web的方式有好多中, 这里只是举例其中一种方式, 使用Nginx + uwsgi部署. 查阅资料,认为uwsgi性能还不错

安装

  • pip 安装uwsgi(如果有建有python虚拟环境的请先进入虚拟环境再安装)

配置

  • 新建一个文件uwsgi.ini (建议在osroom根目录下),写入如下配置:
  1. # 使用uwsgi示范
  2. # uwsgi 启动时所使用的地址与端口
  3. socket = 127.0.0.1:6001
  4. # 指向网站目录
  5. chdir=/home/work/project/osroom
  6. # python 启动程序文件
  7. wsgi-file = start.py
  8. # python 程序内用以启动的 application 变量名
  9. callable = app
  10. master = true
  11. enable-threads = true
  12. # 启动的线程
  13. processes = 4
  14. vacuum = true
  15. die-on-term = true
  16. harakiri = 30
  17. # 每一个工作进程都生成以后才加载应用程序
  18. lazy = true
  19. disable-logging = true
  20. # 状态检测地址
  21. stats = 127.0.0.1:9191
  22. # pid
  23. pidfile = /tmp/osroom_uwsgi.pid

启动网站

  • 注意:启动前确认osroom的数据库是否已配置正确
  • 启动命令
  1. uwsgi /home/work/project/osroom/uwsgi.ini

(附加)方法2:如果uwsgi安装在python虚拟环境中,又不想进入虚拟环境,可以这样启动

  • 启动成功后:由于uwsgi.ini配置的端口是6001,所以不能通过其他端口访问网站,需要下面配置Nginx转发到6001端口
  1. ...
  2. uwsgi socket 0 bound to TCP address 127.0.0.1:6001 fd 3
  3. Python version: 3.5.2 (default, Nov 23 2017, 16:37:01) [GCC 5.4.0 20160609]
  4. Python main interpreter initialized at 0x1b9bcd0
  5. python threads support enabled
  6. ...
  7. *** Operational MODE: preforking ***
  8. *** uWSGI is running in multiple interpreter mode ***
  9. spawned uWSGI master process (pid: 22449)
  10. spawned uWSGI worker 1 (pid: 22450, cores: 1)
  11. spawned uWSGI worker 2 (pid: 22451, cores: 1)
  12. spawned uWSGI worker 3 (pid: 22452, cores: 1)
  13. spawned uWSGI worker 4 (pid: 22453, cores: 1)
  14. ...
  15. worker 1 buried after 1 seconds
  16. worker 2 buried after 1 seconds
  17. worker 3 buried after 1 seconds
  18. worker 4 buried after 1 seconds
  19. ...

安装

  • Ubuntu 14.04或Ubuntu 16.04使用apt-get直接安装如下:
  1. sudo apt-get install nginx
  • 也可以使用wget下载,再安装,请自行Google查找教程哈

配置文件

  • 创建一个nginx配置文件osroom-naginx.conf,文件配置如下(这里只是示范,Nginx有许多配置项可以自己查找教程):
  • 如果需要配置ssl请加上监听443端口,配置好证书,然后80端口301重定向到443 https请求, 如下:(不需配置SSL证书的请直接跳过此步骤)
  1. upstream osroom-web {
  2. # 转发到6001端口
  3. server 127.0.0.1:6001;
  4. }
  5. server {
  6. # 监听443端端口
  7. listen 443;
  8. server_name <你的域名>;
  9. ssl on;
  10. root html;
  11. # ssl证书文件
  12. ssl_certificate /home/work/project/15212232323.pem;
  13. ssl_certificate_key /home/work/project/15212232323.key;
  14. ssl_session_timeout 5m;
  15. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  16. ssl_prefer_server_ciphers on;
  17. gzip on;
  18. gzip_comp_level 5;
  19. gzip_types application/json text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
  20. open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
  21. access_log /var/log/nginx/manage.vhost.access.log;
  22. error_log /var/log/nginx/manage.vhost.error.log;
  23. location / {
  24. include uwsgi_params;
  25. # upstream 的那个名称
  26. uwsgi_pass osroom-web;
  27. # python虚拟环境目录路径
  28. uwsgi_param UWSGI:_PYHOME /home/work/project/venv_osroom;
  29. # 项目目录路径
  30. uwsgi_param UWSGI_CHDIR /home/work/project/osroom-demo;;
  31. uwsgi_param UWSGI_SCRIPT start:app;
  32. }
  33. }
  34. server {
  35. listen 80;
  36. server_name <你的域名>;
  37. return 301 https://$server_name$request_uri;
  38. }
  • 写好配置文件后编辑nginx主配置文件include 上一步写的配置文件
  1. # Ubuntu apt-get安装后的Nginx配置文件在/etc/nginx/nginx.conf
  2. # 编辑/etc/nginx/nginx.conf找到在http {}里面最后添加osroom.conf
  3. # 可以用*通配符,前提是该目录下没有其他非nginx得.conf配置文件
  4. http {
  5. ...
  6. include /home/work/project/*.conf;
  7. }

重启Nginx

访问

  • 这个时候就可以通过域名(域名有解析到服务器的情况下)或IP访问OSROOM了