實驗環境
操作系統:Ubuntu 16.04.6
python: 3.7.6
Django: 2.2
Nginx: 1.10.3
uWSGI: 2.0.18
安裝
這部分一般沒什麼問題,網上教程也很多,nginx 和 uWSGI 我是用 apt-get install
和 pip3
安裝的,雖然安裝的版本可能有點舊,但是省了麻煩
配置
Nginx 的配置確實頭疼,每個人的項目、系統、版本都不同,導致每個人配置的結果也是各不相同。直接套用博客基本很難成功
所以我這裏的配置過程也主要是自己記錄一下,確保自己下次配置更加順利
配置Django
使用Xftp將整個Django項目文件拖到 /home 目錄下
修改settings.py
- DEBUG=False
- ALLOWED_HOSTS = [’*’,](也可以改的更詳細,不過這樣省心)
確保有一個靜態文件目錄和一個媒體文件目錄
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
將靜態文件拷貝到目錄下
按照Django的方式,一般每個應用下都有一個靜態文件目錄,此時需要將它們全部拷貝到創建好的這個目錄下,使用Django自帶的命令完成拷貝
python manage.py collectstatic
配置 Nginx
首先寫配置文件,在項目目錄下創建一個 .conf
文件,作爲該項目的配置文件
upstream django {
# 端口號可以改
server 127.0.0.1:8083;
}
server {
# 監聽端口
listen 8080;
# 這裏我看博客裏說可以寫域名,但是還要配置dns,我這裏直接寫的IP地址
server_name ***.***.***.***;
charset utf-8;
client_max_body_size 75M;
location /media {
# 這裏寫前面創建的資源文件目錄地址
alias /home/MyBlog/uploads;
}
location /static {
# 這裏寫前面創建的靜態文件目錄地址
alias /home/MyBlog/static;
}
location / {
uwsgi_pass django;
# 從 /etc/nginx/ 目錄拷貝來的
include /home/MyBlog/uwsgi_params;
}
}
此時Nginx還不知道使用此文件作爲配置文件
Nginx 的配置,通過修改 /etc/nginx/nginx.conf
文件實現,在文件中 http
配置部分包含着這麼一行
include /etc/nginx/sites-enabled/*;
所以在該目錄下創建一個剛寫的配置文件的軟鏈接
ln -s /home/<項目目錄名>/***.conf /etc/nginx/sites-enabled/***.conf
這裏一定要用絕對路徑,第一次用相對路徑,然後查看端口監聽情況發現8080端口沒有被nginx監聽,找了半天問題發現是用了相對路徑根本沒有鏈接到
鏈接好後,依次使用以下命令應用配置文件(Nginx服務已經開啓)
nginx -t
nginx -s reload
一切順利,Nginx已經使用配置文件重啓了服務,可以使用 netstat -tnlp
查看端口監聽情況
配置uWSGI
創建 .ini 文件作爲uWSGI 啓動的參數
[uwsgi]
# 項目目錄
chdir=/home/MyBlog
# 導入項目的wsgi模塊
module=MyBlog.wsgi:application
wsgi-file=MyBlog/wsgi.py
master=True
pidfile=/tmp/project-master.pid
vacuum=True
max-requests=500
# 剛剛在nginx配置文件中反向代理的端口號
socket=:8083
uid=root
gid=www-data
daemonsize= /var/log/uwsgi/MyBlog.log
log-maxsize=50000000
disable-logging=true
裏面有些參數不是必要的,因爲配置的時候也是一知半解,看有的博客裏有就寫上了
接下來啓動uWSGI
sudo uwsgi --ini <剛寫的.ini文件>
運行
一切順利後,在pc瀏覽器中輸入IP和端口號,就能看見Django項目了
調試
Nginx日誌文件地址 /var/log/nginx/error.log
查看監聽情況 netstat -tnlp