詳解Ubuntu環(huán)境下部署Django+uwsgi+nginx總結(jié)
前言
這是我在搭建Django項(xiàng)目時(shí)候的過(guò)程,拿來(lái)總結(jié)記錄,以備不時(shí)之需。
項(xiàng)目采用nginx+uwsgi的搭配方式。
項(xiàng)目依賴(lài)包采用 requirements.txt 文件管理的方式。
本地準(zhǔn)備工作
確認(rèn)項(xiàng)目能夠運(yùn)行起來(lái),沒(méi)有 bug
將當(dāng)前環(huán)境的包導(dǎo)出 pip freeze > requirements.txt
將項(xiàng)目上傳到服務(wù)器上的 /srv 目錄下。這里以 git 的形式為例, 打開(kāi)終端, 依次輸入如下命令:
$ git init $ git remote add origin xxx.git # 替換成你的項(xiàng)目git地址 $ git add . $ git commit -m 'first commit' $ git pull origin master --allow-unrelated-histories $ git push origin master
部署項(xiàng)目到服務(wù)器
安裝python
安裝好項(xiàng)目用到的 python 。
$ sudo apt install python $ sudo apt install python-pip $ pip install --upgrade pip
安裝 virtualenv 以及 virutalenvwrapper ,并創(chuàng)建虛擬環(huán)境。
$ pip install virtualenv $ pip install virtualenvwrapper $ sudo apt install vim
編輯文件 ~/.bashrc
$ vim ~/.bashrc # 添加如下2行代碼 export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh # 保存文件,讓文件成效 $ source ~/.bashrc
安裝git:
$ sudo apt install git # 為了方便XShell或者CRT連接服務(wù)器,建議安裝OpenSSH $ sudo apt install openssh-server openssh-client $ service ssh restart
安裝MySQL
$ sudo apt install mysql-server mysql-client $ sudo apt-get install libmysqld-dev
測(cè)試配置
- 安裝依賴(lài)包,進(jìn)入虛擬環(huán)境 workon *** ,進(jìn)入項(xiàng)目根目錄,執(zhí)行命令 pip install -r requirements.txt
- 創(chuàng)建數(shù)據(jù)庫(kù),新打開(kāi)一個(gè)終端,登錄數(shù)據(jù)庫(kù), mysql -uroot -p , 創(chuàng)建相應(yīng)的數(shù)據(jù)庫(kù) CREATE DATABASE IF NOT EXISTS my_db default charset utf8mb4;
- 遷移數(shù)據(jù), python manage.py migrate
- 收集靜態(tài)文件, python manage.py collectstatic
- 啟動(dòng)服務(wù)器,執(zhí)行 python manage.py runserver 0.0.0.0:8000 ,然后在你自己電腦上,在瀏覽器中輸入 http://<your server ip>:8000 ,訪(fǎng)問(wèn)下網(wǎng)站所有頁(yè)面,確保所有頁(yè)面都沒(méi)有錯(cuò)誤。
注意:
- 設(shè)置
ALLOW_HOST為你的域名或 ip 地址。 - 設(shè)置
DEBUG=False。
安裝uwsgi
uwsgi 是一個(gè)應(yīng)用服務(wù)器,非靜態(tài)文件的網(wǎng)絡(luò)請(qǐng)求就必須通過(guò)他完成,他也可以充當(dāng)靜態(tài)文件服務(wù)器,但不是他的強(qiáng)項(xiàng)。
uwsgi 是使用 python 編寫(xiě)的,因此通過(guò) pip install uwsgi 就可以了。( uwsgi 必須安裝在系統(tǒng)級(jí)別的 Python 環(huán)境中,不要安裝到虛擬環(huán)境中)。
命令行啟動(dòng) uwsgi :
$ uwsgi --http :8000 --module test.wsgi --vritualenv=/root/.virtualenvs/django-env-py36
如果能夠在瀏覽器中訪(fǎng)問(wèn)到測(cè)試的頁(yè)面,說(shuō)明uwsgi可以加載項(xiàng)目了。
配置文件方式啟動(dòng) uwsgi :
在項(xiàng)目的根路徑下面,創(chuàng)建一個(gè)文件 djangotest.ini ,填寫(xiě)以下代碼:
[uwsgi] # Django相關(guān)的配置 # 必須全部為絕對(duì)路徑 # 項(xiàng)目的路徑 chdir=/srv/djangotest # Django的wsgi文件 module=djangotest.wsgi # Python虛擬環(huán)境的路徑 home=/root/.virtualenvs/django-env-py36 # 進(jìn)程相關(guān)的設(shè)置 # 主進(jìn)程 master=true # 最大數(shù)量的工作進(jìn)程 processes=10 # socket文件路徑,絕對(duì)路徑 socket=/srv/djangotest/djangotest.sock # 設(shè)置socket的權(quán)限 chmod-socket=666 # 退出的時(shí)候是否清理環(huán)境 vacuum=true
然后使用命令uwsgi --ini djangotest.ini,看下是否還能啟動(dòng)這個(gè)項(xiàng)目。
安裝nginx
nginx 是一個(gè) web 服務(wù)器。用來(lái)加載靜態(tài)文件和接收 http 請(qǐng)求的。
通過(guò)命令 sudo apt install nginx 即可安裝。
nginx 常用命令:
- 啟動(dòng)nginx:
service nginx start - 關(guān)閉nginx:
service nginx stop - 重啟nginx:
service nginx restart
收集靜態(tài)文件:
靜態(tài)文件應(yīng)該讓 nginx 來(lái)處理,而不是讓 django 來(lái)做。
首先確保你的 settings.py 文件中有一個(gè) STATIC_ROOT 配置,這個(gè)配置應(yīng)該指定你的靜態(tài)文件要放在哪個(gè)目錄下。
那么我們可以執(zhí)行以下命令: python manage.py collectstatic 來(lái)收集所有靜態(tài)文件(已經(jīng)執(zhí)行過(guò)請(qǐng)忽略)。
編寫(xiě)nginx配置文件,在 /etc/nginx/conf.d 目錄下,新建一個(gè)文件 djangotest.conf ,然后將以下代碼貼進(jìn)去:
upstream djangotest {
server unix:///srv/djangotest/djangotest.sock;
}
# 配置服務(wù)器
server {
# 監(jiān)聽(tīng)的端口號(hào)
listen 80;
# 域名
server_name 192.168.0.101;
charset utf-8;
# 最大的文件上傳尺寸
client_max_body_size 75M;
# 靜態(tài)文件訪(fǎng)問(wèn)的url
location /static {
# 靜態(tài)文件地址
alias /srv/djangotest/static_dist;
}
# 最后,發(fā)送所有非靜態(tài)文件請(qǐng)求到django服務(wù)器
location / {
uwsgi_pass djangotest;
# uwsgi_params文件地址
include /etc/nginx/uwsgi_params;
}
}
測(cè)試配置文件: service nginx configtest 。注意:每次修改完配置需要重啟 nginx : service nginx restart
使用supervisor
讓supervisor管理uwsgi,可以在uwsgi發(fā)生意外的情況下,自動(dòng)重啟。
安裝 supervisor :在系統(tǒng)級(jí)別的python環(huán)境下 pip install supervisor 。
在項(xiàng)目根目錄下創(chuàng)建一個(gè)文件 my_supervisor.conf 。編寫(xiě)內(nèi)容:
# supervisor的程序名字 [program:mysite] # supervisor執(zhí)行的命令 command=uwsgi --ini zlkt_uwsgi.ini # 項(xiàng)目的目錄 directory = /srv/djangotest # 開(kāi)始的時(shí)候等待多少秒 startsecs=0 # 停止的時(shí)候等待多少秒 stopwaitsecs=0 # 自動(dòng)開(kāi)始 autostart=true # 程序掛了后自動(dòng)重啟 autorestart=true # 輸出的log文件 stdout_logfile=/srv/djangotest/log/supervisord.log # 輸出的錯(cuò)誤文件 stderr_logfile=/srv/djangotest/log/supervisord.err [supervisord] # log的級(jí)別 loglevel=info # 使用supervisorctl的配置 [supervisorctl] # 使用supervisorctl登錄的地址和端口號(hào) serverurl = http://127.0.0.1:9001 # 登錄supervisorctl的用戶(hù)名和密碼 username = admin password = 123 [inet_http_server] # supervisor的服務(wù)器 port = :9001 # 用戶(hù)名和密碼 username = admin password = 123 [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
運(yùn)行 supervisor ,執(zhí)行 supervisord -c my_supervisor.conf 。
進(jìn)入 supervisor 管理控制臺(tái), supervisorctl -c my_supervisor.conf
supervisor 管理控制臺(tái)常用命令
# 查看狀態(tài) status # 啟動(dòng)程序 start program_name # 重新啟動(dòng)程序 restart program_name # 關(guān)閉程序 stop program_name # 重新加載配置文件 reload # 退出控制臺(tái) quit
到此這篇關(guān)于Ubuntu環(huán)境下部署Django+uwsgi+nginx總結(jié)的文章就介紹到這了,更多相關(guān)Ubuntu環(huán)境下部署Django+uwsgi+nginx總結(jié)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 聊聊Django+uwsgi+nginx服務(wù)器部署問(wèn)題
- django生產(chǎn)環(huán)境搭建(uWSGI+django+nginx+python+MySQL)
- Django+Uwsgi+Nginx如何實(shí)現(xiàn)生產(chǎn)環(huán)境部署
- Nginx+Uwsgi+Django 項(xiàng)目部署到服務(wù)器的思路詳解
- nginx+uwsgi+django環(huán)境搭建的方法步驟
- Django uwsgi Nginx 的生產(chǎn)環(huán)境部署詳解
- Centos部署django服務(wù)nginx+uwsgi的方法
- 詳解Django+Uwsgi+Nginx 實(shí)現(xiàn)生產(chǎn)環(huán)境部署
- Django+Nginx+uwsgi服務(wù)器部署
相關(guān)文章
Python實(shí)現(xiàn)同時(shí)兼容老版和新版Socket協(xié)議的一個(gè)簡(jiǎn)單WebSocket服務(wù)器
這篇文章主要介紹了Python實(shí)現(xiàn)同時(shí)兼容老版和新版Socket協(xié)議的一個(gè)簡(jiǎn)單WebSocket服務(wù)器,需要的朋友可以參考下2014-06-06
5 分鐘讀懂Python 中的 Hook 鉤子函數(shù)
這篇文章主要介紹了5 分鐘掌握 Python 中的 Hook 鉤子函數(shù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
Python pymysql模塊安裝并操作過(guò)程解析
這篇文章主要介紹了Python pymysql模塊安裝并操作過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
python連接oracle數(shù)據(jù)庫(kù)操作實(shí)例及遇到的異常
這篇文章主要給大家介紹了關(guān)于python連接oracle數(shù)據(jù)庫(kù)操作實(shí)例及遇到的一些異常,Oracle是著名且廣泛使用的數(shù)據(jù)庫(kù)之一,而python的數(shù)據(jù)處理功能可以很好地利用這種連接性,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12
matplotlib grid()設(shè)置網(wǎng)格線(xiàn)外觀的實(shí)現(xiàn)
這篇文章主要介紹了matplotlib grid()設(shè)置網(wǎng)格線(xiàn)外觀的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
淺談Python中os模塊及shutil模塊的常規(guī)操作
這篇文章主要介紹了淺談Python中os模塊及shutil模塊的常規(guī)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
python實(shí)現(xiàn)復(fù)制整個(gè)目錄的方法
這篇文章主要介紹了python實(shí)現(xiàn)復(fù)制整個(gè)目錄的方法,涉及Python中shutil模塊的相關(guān)操作技巧,需要的朋友可以參考下2015-05-05
在python中利用KNN實(shí)現(xiàn)對(duì)iris進(jìn)行分類(lèi)的方法
今天小編就為大家分享一篇在python中利用KNN實(shí)現(xiàn)對(duì)iris進(jìn)行分類(lèi)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12

