nginx uwsgi 部署django工程

来源:互联网 发布:linux如何查看ssh端口 编辑:程序博客网 时间:2024/06/05 15:17

工程下的wsgi.ini文件配置如下: [uwsgi]socket = 127.0.0.1:9090chdir = /home/liujie/sclmmodule = sclm.wsgimaster = true         //主进程vhost = true          //多站模式no-site = true        //多站模式时不设置入口模块和文件workers = 2           //子进程数reload-mercy = 10     vacuum = true         //退出、重启时清理文件max-requests = 1000   limit-as = 512buffer-size = 30000pidfile = /home/liujie/sclm/uwsgi_sclm.pid//pid文件,用于下面的脚本启动、停止该进程//daemonize = /home/liujie/sclm/uwsgi_sclm.log


不知道最后的这个pid 到底是个什么东西, 配置了之后会报错:

如下

liujie@liujie-Aspire-5830TG:~/sclm$ uwsgi --ini sclm_uwsgi.ini

[uWSGI] getting INI configuration from sclm_uwsgi.ini
*** Starting uWSGI 2.0.15 (64bit) on [Sun Jul  2 00:35:34 2017] ***
compiled with version: 5.4.0 20160609 on 01 July 2017 19:03:54
os: Linux-4.4.0-38-generic #57-Ubuntu SMP Tue Sep 6 15:42:33 UTC 2016
nodename: liujie-Aspire-5830TG
machine: x86_64
clock source: unix
detected number of CPU cores: 4
current working directory: /home/liujie/sclm
writing pidfile to /home/liujie/sclm/uwsgi_sclm.pid
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
chdir() to /home/liujie/sclm
your processes number limit is 15027
limiting address space of processes...
your process address space limit is 536870912 bytes (512 MB)
your memory page size is 4096 bytes
detected max file descriptor number: 1024
VirtualHosting mode enabled.
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
probably another instance of uWSGI is running on the same address (127.0.0.1:9090).
bind(): Address already in use [core/socket.c line 769]
VACUUM: pidfile removed.
liujie@liujie-Aspire-5830TG:~/sclm$



后来去除了这个pid文件的配置, 然后再运行表示端口已经被占用,已经有其它的示例占用了。


惊觉: 好像有朋友提到命令行窗口关闭的时候, 会导致uwsgi 服务自动停止 。 难道这个pid就是这样用的? 关键是怎么停止? 联调还没通过呢。


先查到使用这个端口的进程, 也就是uwsgi的实例 :

lsof -t -i tcp:9090

然后:

kill -9 pid

可能查出来有多个进程 , kill -KILL $(lsof -t -i tcp:9090)  这条命令可以批量删除掉。 


可行。


继续联调:


又遇到错误

*** Operational MODE: preforking ***
Traceback (most recent call last):
  File "./sclm/wsgi.py", line 14, in <module>
    from django.core.wsgi import get_wsgi_application
ImportError: No module named django.core.wsgi
unable to load app 0 (mountpoint='') (callable not found or import error)

这次让人烦躁的是 stackoverflow 上的答案都是关于配置了 virtualenv 的。  我的本机环境没有配置。 安装virtualenv 的事情被我拖了很久, 看样子还是绕不过去, 还是得抽时间安装一次。


如果不安装virtualenv呢? 这个问题怎么解决 。 找到了一个csdn上的同样的帖子, 可惜按照对方的方法不能解决。



最后直接将在runserver模式下正常运行的sys.path 打印出来, 然后在wsgi.py中强行赋值 解决这个问题. 路子有点野 . 准备下一个阶段去装virtualenv .


终于弄好了 , 附nginx的server配置, 和效果图。


server {listen 12306;server_name  sclm;    charset UTF-8;    access_log      /home/liujie/sclm_access.log;    error_log       /home/liujie/sclm_error.log;    client_max_body_size 75M;    location / {include uwsgi_params;uwsgi_pass 127.0.0.1:9090;uwsgi_read_timeout 2;    }    location /static {expires 30d;autoindex on;add_header Cache-Control private;alias /home/liujie/sclm/CollectStaticss/;     }}



为避免重启的时候nginx 不启动:

vi /etc/rc.local  中增加 /etc/init.d/nginx start

启动后, uwsgi 手工启动一下:

root@liujie-Aspire-5830TG:/home/liujie/sclm# uwsgi --ini sclm_uwsgi.ini

这样可行。 





原创粉丝点击