以前部署了一個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