nginx+uwsgi+django部署記錄

以前部署了一個django測試項目,使用django自帶的manage的socket服務,經過nginx轉發完成的。看這裏html

如今以爲能夠上生產環境了。因此決定使用nginx+uwsgi的方式進行部署:python

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

先安裝uwsgidjango

由於我使用的python3,因此先安裝了pip也是python3版本的。並命名爲pip3了vim

pip3 install uwsgicentos

等待安裝完成。app

安裝完畢後whereis uwsgi顯示安裝位置:socket

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

/etc/uwsgi.ini是配置文件ui

直接修改配置文件爲:

[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

相關文章
相關標籤/搜索