nginx+uwsgi+django部署记录

之前部署了一个django测试项目,使用django自带的manage的socket服务,通过nginx转发完成的。看这里

现在觉得可以上生产环境了。所以决定使用nginx+uwsgi的方式进行部署:

环境:centos(7.3) python(3.6) django(1.11) uwsgi (2.0) nginx(1.12)

先安装uwsgi

因为我使用的python3,所以先安装了pip也是python3版本的。并命名为pip3了

pip3 install uwsgi

等待安装完成。

安装完毕后whereis uwsgi显示安装位置:

uwsgi: /etc/uwsgi.ini /usr/local/bin/uwsgi

/etc/uwsgi.ini是配置文件

直接修改配置文件为:

[uwsgi]
socket = 127.0.0.1:3031 #socket使用的端口
chdir = /aliecs_django#项目路径
wsgi-file = /aliecs_django/aliecs_django/wsgi.py#项目wsgi.py文件位置,可以是相对路径
processes = 2#进程数量,可以设定为同CPU核心数量
threads = 2#每个进程开启线程的数量
stats = 127.0.0.1:9191#uwsgi的状态端口

然后可以直接使用

uwsgi --ini /etc/uwsgi.ini

就可以启动了

不过这样的话还不太方便。所以配置一个systemd服务:

vim /usr/lib/systemd/system/uwsgi.service

[Unit]
Description=uWSGI Emperor
After=syslog.target

[Service]
ExecStart=/usr/local/bin/uwsgi --ini /etc/uwsgi.ini
# Requires systemd version 211 or newer
RuntimeDirectory=uwsgi
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target

systecmctl enable uwsgi

添加到开机启动

最后修改NGINX配置:

原先是直接使用转发的

location / {
    proxy_pass       http://localhost:8000;
    proxy_set_header Host      $host;
    proxy_set_header X-Real-IP $remote_addr;
}

现在修改为:

location / {
       include    uwsgi_params;
       uwsgi_pass 127.0.0.1:3031;
}

顺利部署完毕

后记:其实部署的时候发现了一个诡异的问题,

在settings.py

INSTALLED_APPS = [
'utils',]

自己导入了一个utils的apps然后发现这个app不能被导入

困扰了我很久,最终竟然发现是因为utils目录下缺少__init__.py文件造成的

在python的模块中,如果导入的是包(目录)那么这个包(目录)下必须有__init__.py文件

参考资料:uwsgi: http://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html

nginx: http://nginx.org/en/docs/http/ngx_http_uwsgi_module.html

systemd: http://uwsgi-docs.readthedocs.io/en/latest/Systemd.html

猜你喜欢

转载自www.cnblogs.com/colinshi/p/9056707.html