操做系統:Ubuntu 18.04.2 LTS 64位python
python版本:Python 3.6.7linux
Django版本:Django 2.2nginx
首先使用root用戶登陸服務器。web
apt update apt install python3 apt install python3-pip
pip3 install django
下載項目後,進入項目主目錄,切換到back_end_server分支,進入backend文件夾,執行數據庫
pip3 install -r requirements.txt
安裝相關依賴。安裝過程當中下載速度過慢時能夠更換pip源爲國內源(https://blog.csdn.net/chenghuikai/article/details/55258957)。django
將settings.example.py文件內容複製到settings.py並修改相關配置:ubuntu
在settings.py文件中加入域名:服務器
ALLOWED_HOSTS = ['www.example.com']
在數據庫中構建相關的數據表:併發
python3 manage.py makemigrations python3 manage.py migrate
啓動Django自帶開發服務器runserver進行臨時開發和測試:app
python3 manage.py runserver 0:80
啓動以後即可以對服務器進行訪問。
runserver默認使用http鏈接,可經過以下方式配置ssl證書使用https鏈接:
pip3 install django-extensions pip3 install django-werkzeug-debugger-runserver pip3 install pyOpenSSL
將生成的ssl證書放在服務器上後啓動runserver:
python3 manage.py runserver_plus 0:443 --cert-file /etc/certificate/certificate.crt --key-file /etc/certificate/key.key
其中--cert-file
和--key-file
後爲對應的ssl證書文件路徑。
Django 自帶的runserver是一個用於開發的簡易服務器,它是一個用純Python寫的輕量級的Web服務器,目的是爲了讓你能快速的開發出想要的東西,並不適用於實際的生產環境中。
在生產環境中,Django的主要部署平臺是WSGI,它是Python的標準web服務器和應用,而uWSGI是實現了WSGI的工具。
安裝uWSGI:
pip3 install uwsgi
遇到以下問題時
[x86_64-linux-gnu-gcc -pthread] core/dot_h.o [x86_64-linux-gnu-gcc -pthread] core/config_py.o *** uWSGI compiling embedded plugins *** [x86_64-linux-gnu-gcc -pthread] plugins/python/python_plugin.o In file included from plugins/python/python_plugin.c:1:0: plugins/python/uwsgi_python.h:2:10: fatal error: Python.h: No such file or directory #include <Python.h> ^~~~~~~~~~ compilation terminated. ---------------------------------------- Command "/usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-8zavi4g8/uwsgi/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-g8yr_0sf-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-8zavi4g8/uwsgi/
須要安裝python3-dev
包:
apt install build-essential python-dev
在Django項目的同級目錄下新建uwsgi目錄並在其中添加uwsgi.ini文件:
[uwsgi] # 這個端口須要打開 http-socket = :8001 # 須要生成的sock文件,nginx會經過這個sock文件與django通訊 # 注意這個socket文件要放在服務器的根目錄下,不要是某個用戶的文件夾下 # 不然之後會出現訪問權限問題 socket=/www/backend_uwsgi.sock chdir = /root/GroupWork/backend/ # module=backend.wsgi:application # Django項目中uwsgi.py的路徑(相對於Django項目根路徑) wsgi-file = backend/wsgi.py # wsgi-file = /root/GroupWork/backend/backend/wsgi.py master = true # 設置啓動相應的uwsgi進程數和線程數 processes = 10 threads = 2 # 設置日誌文件路徑 daemonize = /root/GroupWork/backend/uwsgi/uwsgi.log pidfile = /root/GroupWork/backend/uwsgi/uwsgi.pid # env = DJANGO_SETTINGS_MODULE=backend.settings
在根目錄下新建www文件夾:
mkdir /www
啓動uwsgi:
uwsgi --ini uwsgi/uwsgi.ini
關閉全部uwsgi進程:
killall -9 uwsgi
Nginx是一個異步框架的開源Web服務器,由於併發能力強、佔用資源少而被普遍應用在許多網站項目中。在實際應用中,可使用Nginx做爲反向代理服務器,經過uWSGI鏈接Nginx和Django,當Nginx接收到一個靜態文件請求時直接從磁盤讀取並返回對應的文件,而接收到一個動態數據請求時,先將請求代理到uWSGI服務器,而後調用Django中相應的視圖函數進行處理。
安裝Nginx:
apt install nginx
在/etc/nginx/conf.d/
文件夾內添加以下配置文件:
# /etc/nginx/conf.d/django.conf upstream django { server 服務器的外網ip:443; # 服務器的外網ip,443是https的默認端口 } server { listen 443 ssl; server_name 域名; ssl on; # 證書和祕鑰的絕對路徑 ssl_certificate /etc/certificate/certificate.crt; ssl_certificate_key /etc/certificate/key.key; client_max_body_size 5M; charset utf-8; # nginx日誌文件的路徑 access_log /root/GroupWork/backend/nginx/https.access.log; error_log /root/GroupWork/backend/nginx/https.error.log; # 指定django項目中存儲媒體文件的地址 location /media { alias /root/GroupWork/backend/media; } # 指定django項目中存儲靜態文件的地址 location /static { alias /root/GroupWork/backend/static; } location / { # 以前配置uwsgi時新建的socket文件 uwsgi_pass unix:///www/backend_uwsgi.sock; include /etc/nginx/uwsgi_params; } }
修改/etc/nginx/nginx.conf
文件,將nginx的使用用戶改變爲當前用戶:
user root; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf;
啓動nginx:
nginx
重啓nginx:
reload -s nginx
強制關閉全部nginx進程:
pkill -9 nginx
啓動服務器時需先啓動uwsgi,再啓動Nginx:
uwsgi --ini uwsgi/uwsgi.ini nginx
每次修改django項目後都須要從新啓動uwsgi:
killall -9 uwsgi uwsgi --ini uwsgi/uwsgi.ini