django + uwsgi + nginx 部署線上個(gè)人博客項(xiàng)目

django + uwsgi + nginx 部署線上個(gè)人博客項(xiàng)目

前提: 在線上服務(wù)器上已經(jīng)安裝好了db(如mysql), 我的還有redis, 當(dāng)然還有用到的python環(huán)境, 以及所有依賴包。

環(huán)境: 阿里云ubuntu 16.04.5, python3.6.4, Django 2.0


概要

1542199692102.jpg

當(dāng)請(qǐng)求的是靜態(tài)資源的時(shí)候(css, js等)可以直接通過(guò)nginx直接訪問(wèn)到靜態(tài)資源, 這是靜態(tài)請(qǐng)求, 可以加快靜態(tài)請(qǐng)求的響應(yīng)速度。
而當(dāng)請(qǐng)求的是需要數(shù)據(jù)處理的時(shí)候, 這就是動(dòng)態(tài)請(qǐng)求, 通過(guò)uwsgi接口包裝成request發(fā)送到Django里面, Django拿到request進(jìn)入對(duì)應(yīng)views進(jìn)行處理, 再response出來(lái)。

1.Uwsgi的配置和運(yùn)行

安裝uwsgi:

pip install uwsgi

uwsgi.ini:

[uwsgi]
;http = :8000
socket = /home/blog.sock

; 目錄
chdir = /home/blog/blog

; 指定你的wsgi.py文件
wsgi-file = blog/wsgi.py 
touch-reload = /tmp/blog.reload

processes = 2
threads = 4

chmod-socket = 664
;chown-socket = tu:www-data

vacuum = true
die-on-term = true

; 日志相關(guān), 每次touch /tmp/blog.reload重啟uwsgi時(shí), 如果時(shí)新的日期會(huì)產(chǎn)生一個(gè)新的日志文件
daemonize = /var/log/blog-uwsgi-@(exec://date +%%Y%%m%%d).log
log-reopen = true
log-format = %(addr) - %(user) [%(ltime)] "%(method) %(uri) %(proto)" %(status) %(size) "%(referer)" "%(uagent)"

如果是使用端口運(yùn)行, 可以直接運(yùn)行uwsgi.ini運(yùn)行uwsgi:

uwsgi --ini where/your/uwsgi.ini

2.Django靜態(tài)文件的處理

在本地直接runserver或者在調(diào)試時(shí)DBUG=Ture時(shí), django會(huì)自己尋找靜態(tài)文件進(jìn)行加載, 而當(dāng)項(xiàng)目在線上并且使用了nginx部署時(shí), 靜態(tài)文件時(shí)直接通過(guò)nginx獲得, 所以就需要把所有的靜態(tài)文件放在一個(gè)地方。
Setting:

THEME = 'themes/default'
STATIC_URL = '/static/'
# 靜態(tài)文件
# 運(yùn)行collect的時(shí)候收集靜態(tài)文件到這個(gè)目錄
STATIC_ROOT = os.path.join(BASE_DIR, "static")
# collect時(shí)只會(huì)收集每個(gè)app下的static文件,這個(gè)用來(lái)制定額外的存放靜態(tài)文件的目錄
STATICFILES_DIRS = [
     os.path.join(BASE_DIR, THEME, "static"),
 ]

# media文件
MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, "media")

配置正確后, 運(yùn)行命令:

python manage.py collectstatic

當(dāng)然還要配置url, url.py加上:

urlpatterns = [...
] + static(settings.STATIC_URL,document_root=settings.STATIC_ROOT)  + 
static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)


3. Nginx的配置

  1. 安裝nginx:
sudo apt-get install python-dev nginx

1.先新建一個(gè)新的網(wǎng)站的配置文件, sock文件指定在uwsgi指定的sock文件

vim /etc/nginx/sites-available/blog.conf
server {
    listen      8001; # 使用8001端口
    server_name 域名, 如果沒(méi)有域名可填公網(wǎng)ip;
    charset     utf-8;

    client_max_body_size 75M;
    
    # 靜態(tài)文件, 路徑根據(jù)上面Django靜態(tài)文件的放置路徑
    location /static {
        alias /home/..../static;
    }

    location /media {
        alias /home/..../media;
    }

    location / {
        uwsgi_pass  unix:///home/blog.sock;
        include     /etc/nginx/uwsgi_params;
    }
}
  1. 激活新網(wǎng)站配置
sudo ln -s /etc/nginx/sites-available/blog.conf /etc/nginx/sites-enabled/blog.conf
  1. 重新啟動(dòng)nginx
sudo service nginx reload

4.啟動(dòng)uwsgi

  1. 后臺(tái)啟動(dòng)進(jìn)程
nohup /home/env/bin/uwsgi --ini /where/your/uwsgi.ini >> /var/log/uwsgi.log &
  1. 還可以使用supervisor管理進(jìn)程
    不過(guò)我的supervisor被我玩炸了, 不知道是我安裝問(wèn)題還是什么。
    此外, supervisor只支持python2。

總結(jié)

第一篇小文章, 請(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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