Django+uwsgi+Nginx Deploy

這是一篇部屬教學,但不會教你做SSL(因為我SSL現在都走cloudflare zerotrust),我還不用寫CRON,觸發certbot(X

  • 材料
    1. Django Project
    2. Nuxt Project (可選)
    3. Linux Server
    4. Domain

應該就這樣XD

把需要的東西都丟到gitHub上好操作(X

可以去 https://www.digitalocean.com/community/tools/nginx?global.app.lang=zhTW 先戳一份基本設定檔就不用從頭寫了

開始

通用

apt update

django+uwsgi

  1. apt install python3-venv
  2. python3 -m venv .env
  3. source .env/bin/activate

啟動虛擬環境

  1. pip install -r requirement.txt
  2. pip install uwsgi

這邊會直接用venv裡面的uwsgi作為nginx和django的橋樑
其實我也不是很確定這樣對不對 有請各位指教了

  1. 寫一份uwsgi的設定檔
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[uwsgi]
socket=/tmp/uwsgi.sock # 如果有到上面抄設定檔 會跟這個檔案有關係 /etc/nginx/nginxconfig.io/python_uwsgi.conf
process=4 # 這我隨便填的
chdir=/var/www/project # 跟你的django專案資料夾有關
module=project.wsgi:application
master=True
pidfile=/tmp/project-master.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi/project.log
  1. 在虛擬環境下 uwsgi --ini uwsgi.ini 完成!

Nginx

  1. apt install nginx
  2. nginx的設定可以直接用上面的(X)
  3. 因為我讓SSL留在Cloudflare上,所以我直接用 Digital 提供的指令把SSL相關選項都註解掉了
1
   sed -i -r 's/(listen .*443)/\1; #/g; s/(ssl_(certificate|certificate_key|trusted_certificate) )/#;#\1/g; s/(server \{)/\1\n    ssl off;/g' /etc/nginx/sites-available/erm.joinpro.eu.org.conf /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-available/example2.com.conf
  1. 讓前端跟後端部在同一個domain上
server {
    root  /var/www/example.com/public; # 放前端檔案

...

    location / {
        try_files $uri $uri/ /index.html;
    }
    location /v1 {
        include nginxconfig.io/python_uwsgi.conf;
    }
...

}

細節?或是我踩到的坑

  1. 我一開始直接在Linux上下 apt install uwsgi :( 這個版本好像是需要另外安裝 python plugins的 可以參考REF 1.
  2. 在啟動uwsgi 前,可以考慮用python manage.py check --deploy去看一下 django給你的部屬建議可能有些參數應該設定,或是你model的參數有問題會被列出來

REF:

  1. https://blog.csdn.net/weixin_43796109/article/details/125424525

有問題可以在下方utterances留言喔

updatedupdated2024-08-192024-08-19
載入評論