Django項(xiàng)目之Nginx+uWSGI+HTTPS部署

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)注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容