Django項(xiàng)目之Nginx+uWSGI+HTTPS部署
計(jì)算機(jī),Linux運(yùn)維
# 一 目錄規(guī)劃
# 項(xiàng)目存放位置
? mkdir /application/
# uwsgi文件存放位置
? mkdir /application/script
# 部署HTTPS證書存放位置
? mkdir /etc/nginx/cert/
# 項(xiàng)目部署所需軟件存放位置
? mkdir /server/tools/
# 二 軟件安裝
# Python安裝(略)
# MySQL數(shù)據(jù)庫(kù)安裝(略)
# Nginx安裝
? yum -y install nginx
# 三 創(chuàng)建虛擬環(huán)境
? cd /application/
# 安裝虛擬環(huán)境軟件
? pip3 install virtualenv
# 創(chuàng)建虛擬環(huán)境,虛擬環(huán)境和項(xiàng)目目錄分離
? virtualenv venv
# 四 導(dǎo)入項(xiàng)目
# 將編寫好的代碼導(dǎo)入/application/
# 例如將項(xiàng)目名稱為PythonDjango文件夾導(dǎo)入。
# 五 安裝依賴和軟件
# 激活虛擬環(huán)境
? source venv/bin/activate
# 在虛擬環(huán)境安裝依賴,使用阿里云開源鏡像網(wǎng)站加速
? pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
# 安裝uwsgi
? pip3 install uwsgi -i https://mirrors.aliyun.com/pypi/simple/
# 六 配置數(shù)據(jù)庫(kù),進(jìn)行數(shù)據(jù)遷移,收集靜態(tài)文件
? cd /PythonDjango/PythonDjango
# 修改以下內(nèi)容
? vim setting.py
? DATABASES = {
? 'default': {
? ? ? 'ENGINE': 'django.db.backends.mysql',
? ? ? 'NAME': '數(shù)據(jù)庫(kù)名',
? ? ? 'USER': '數(shù)據(jù)庫(kù)用戶名',
? ? ? 'PASSWORD': '數(shù)據(jù)庫(kù)密碼',
? ? ? 'HOST': 'localhost',
? ? ? 'PORT': 3306,
? ? ? 'OPTIONS': {'charset': 'utf8mb4'},
? ? ? }
? }
# 數(shù)據(jù)庫(kù)遷移
# 返回上一層目錄
? python manage.py makemigrations
? python manage.py migrate
# 收集靜態(tài)文件
? python manage.py collectstatic --no-input
? python manage.py compress --force
# 七 uwsgi配置文件及啟動(dòng)
? ? # 項(xiàng)目目錄
? ? chdir=/application/PythonDjango
? ? # 指定項(xiàng)目的application,是wsgi.py文件中的application函數(shù)
? ? module=DjangoBlog.wsgi:application
? ? # 指定使用的配置文件
? ? #DJANGO_SETTINGS_MODULE=PythonDjango.settings
? ? # 指定wsgi.py的位置
? ? #wsgi-file = PythonDjango/wsgi.py
? ? # 指定sock的文件路徑
? ? socket=/application/script/uwsgi.sock
? ? # 進(jìn)程個(gè)數(shù)
? ? workers=5
? ? # 指定pid文件位置
? ? pidfile=/application/script/uwsgi.pid
? ? # 指定IP端口
? ? stats=127.0.0.1:8000
? ? # 指定靜態(tài)文件
? ? static-map=/static=/application/PythonDjango/collectedstatic
? ? # 啟動(dòng)uwsgi的用戶名和用戶組
? ? uid=root
? ? gid=root
? ? # 啟用主進(jìn)程
? ? master=true
? ? # 自動(dòng)移除unix Socket和pid文件當(dāng)服務(wù)停止的時(shí)候
? ? vacuum=true
? ? # 序列化接受的內(nèi)容,如果可能的話
? ? thunder-lock=true
? ? # 啟用線程
? ? enable-threads=true
? ? # 設(shè)置自中斷時(shí)間
? ? harakiri=30
? ? # 設(shè)置緩沖
? ? post-buffering=4096
? ? # 設(shè)置日志目錄
? ? daemonize=/application/script/uwsgi.log
## 啟動(dòng)uwsgi服務(wù)
? ? uwsgi --ini uwsgi.ini
# 八 Nginx配置文件及啟動(dòng)
? ? cd /etc/nginx/conf.d
? ? vim pythondjango.conf
? ? # 輸入以下內(nèi)容
? ? # 監(jiān)聽服務(wù)名稱為www.gpvip.club的80端口,跳轉(zhuǎn)至HTTPS。
? ? server {
? ? ? ? listen 80;
? ? listen [::]:80;
? ? ? ? server_name Dfdb運(yùn)維;
? ? ? ? rewrite ^(.*)$ https://$host$1 permanent;
? ? }
? ? # 監(jiān)聽服務(wù)名稱為gpvip.club的80端口,跳轉(zhuǎn)至HTTPS。
? ? server {
? ? ? ? listen? ? ? 80;
? ? ? ? listen? ? ? [::]:80;
? ? ? ? server_name? Dfdb運(yùn)維;
? ? ? ? return 301 https://www.gpvip.club$1;
? ? }
? ? # 監(jiān)聽服務(wù)名稱為gpvip.club的443端口,跳轉(zhuǎn)至HTTPS。
? ? server {
? ? ? ? listen? ? ? 443;
? ? ? ? listen? ? ? [::]:443;
? ? ? ? server_name? Dfdb運(yùn)維;
? ? ? ? return 301 https://www.gpvip.club$1;
? ? }
? ? # HTTPS部署
? ? server {
? ? ? ? listen? ? ? 443 ssl http2 default_server;
? ? ? ? listen? ? ? [::]:443 ssl http2 default_server;
? ? ? ? server_name? Dfdb運(yùn)維;
? ? ? ? root? ? ? ? /application/PythonDjango/;
? ? ? ? ssl on;
? ? ? ? ssl_certificate "cert/證書名.pem";
? ? ? ? ssl_certificate_key "cert/證書名.key";
? ? ? ? ssl_session_cache shared:SSL:1m;
? ? ? ? ssl_session_timeout? 5m;
? ? ? ? ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
? ? ? ? ssl_prefer_server_ciphers on;
? ? # 靜態(tài)文件存放位置
? ? ? ? location /static/ {
? ? ? ? ? ? alias /application/PythonDjango/collectedstatic/;
? ? ? ? ? ? expires max;
? ? ? ? }
? ? # 設(shè)置瀏覽器標(biāo)簽小圖標(biāo)
? ? ? ? location /favicon.ico {
? ? ? ? }
? ? ? ? location / {
? ? ? ? ? ? include uwsgi_params;
? ? ? ? ? ? uwsgi_connect_timeout 30;
? ? ? ? ? ? # 使Nginx服務(wù)能夠找到uwsgi服務(wù)。
? ? ? ? ? ? uwsgi_pass unix:/application/script/uwsgi.sock;
? ? ? ? }
? ? ? ? access_log /var/log/nginx/django_access.log;
? ? ? ? error_log /var/log/nginx/django_error.log;
? ? }
# 啟動(dòng)Nginx服務(wù)
? ? systemctl start nginx
就可以使用域名,通過瀏覽器訪問網(wǎng)站了。
部署Django項(xiàng)目有任何問題歡迎和筆者交流,郵箱dfdb_book@163.com,如需轉(zhuǎn)載請(qǐng)注明出處。