將 django 部署到生產環境

Barbara Streisand
發布: 2024-09-25 06:15:37
原創
1089 人瀏覽過

我最近將我自己的 django 應用程式部署到生產環境中。該網站名為 videoeiro.com,是用 django + HTML/CSS/JS + Tailwind 開發的。

設定

我正在使用 debian 12 伺服器,它將透過 cloudflare 隧道公開我的應用程式。所有靜態檔案都透過 nginx 提供服務,Django 專案由 Gunicorn 運行。

在本指南中,我將向您展示我如何進行設定。

準備 Django 項目

您要做的第一件事是打開 settings.py 並更改以下內容

Debug = False
ALLOWED_HOSTS = ['yourdomain.tld']
CSRF_COOKIE_SECURE = True
CSRF_TRUSTED_ORIGINS = [
    'yourdomain.tld',
]

登入後複製

您還應該將 SECRET_KEY 更改為一個長隨機字串,切勿與任何人共用。

之後建立一個名為 .gitignore 的新檔案並貼上以下內容:

db.sqlite3
*.pyc

登入後複製

這將確保資料庫不會上傳到我們的伺服器,也不會上傳任何 pyc 檔案。

現在您可以將專案上傳到新的 github 儲存庫(或 gitea 儲存庫)。如果您不希望每個人都可以存取您的原始程式碼,請確保將儲存庫設為私有。

如果您想確保原始程式碼保持私密,我建議您設定一個自架 gitea 實例,請閱讀 Selfhost your own gitea instance - selfhosted, lightweight github Alternative,以了解如何做到這一點。

git init
git branch -M main
git add .
git commit -m "initial commit"
git remote add origin https://...
git push -u origin main

登入後複製

現在您已經完成了,您應該登入您的伺服器

伺服器設定

在設定任何內容之前,請確保您不允許任何使用密碼的 ssh 登入。遵循使用基於金鑰的身份驗證保護 ssh 來保護您的伺服器免受此類攻擊。

登入您的伺服器

ssh user@server.ip

登入後複製

確保您的包裹符合數據

sudo apt update && sudo apt upgrade

登入後複製

現在安裝 python、pip、git 和 nginx

sudo apt install python3 python3-pip git nginx

登入後複製

現在將您的專案複製到您的主目錄中。

git clone https://...
cd my-project

登入後複製

安裝後,安裝以下內容:

pip install django django-crispy-forms whitenoise

登入後複製

現在嘗試運行該專案:

python3 manage.py runserver

登入後複製

如果您收到軟體包遺失的錯誤,請安裝它並重新運行。

配置gunicorn

現在我們將設定gunicorn

先安裝

pip install gunicorn

登入後複製

現在用您最喜歡的文字編輯器建立一個名為gunicorn.service的新檔案:

sudo vim /etc/systemd/system/gunicorn.service

登入後複製

並貼上以下內容:

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=YOURUSER
Group=www-data
WorkingDirectory=/home/YOURUSER/PROJECT
ExecStart=/path/to/gunicorn --access-logfile - --workers 3 --bind 127.0.0.1:8000 PROJECTNAME.wsgi:application

[Install]
WantedBy=multi-user.target

登入後複製

將 YOURUSER 更改為您的使用者。

要找到gunicorn運行的路徑:

which gunicorn

登入後複製

您的專案名稱是專案內包含 settings.py 檔案的資料夾的名稱。

現在執行以下命令來啟動並啟用gunicorn(開機啟動)

sudo systemctl daemon-reload
sudo systemctl start gunicorn.service
sudo systemctl enable gunicorn.service

登入後複製

現在,如果您訪問 127.0.0.1:8000,您應該會看到您的專案正在運行。

但是還沒完成

設定 nginx

現在我們需要透過 nginx 提供靜態內容。

首先使用您最喜歡的文字編輯器建立一個新的 nginx 設定檔:

sudo vim /etc/nginx/sites-available/PROJECT

登入後複製

將 PROJECT 更改為您想要的任何內容

現在貼上以下內容:

server {
    listen 80;
    server_name YOURDOMAIN;

    location /static/ {
    alias /var/www/staticfiles/;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

登入後複製

只需將 YOURDOMAIN 變更為將託管該網域的網域。

建立符號連結以啟用您的網站:

sudo ln -s /etc/nginx/sites-available/PROJECT /etc/nginx/sites-enabled/

登入後複製

啟動並啟用 nginx:

sudo systemctl start nginx
sudo systemctl enable nginx

登入後複製

設定靜態文件

您要做的第一件事就是 cd 進入您的 (django) 專案

cd project

登入後複製

現在執行以下命令:

python3 manage.py collectstatic

登入後複製

這將會建立一個名為 staticfiles 的新資料夾

現在要設定靜態文件,我們有兩個選項:

  1. 將 /etc/nginx/nginx.conf 中的使用者變更為您的使用者(較不安全)
  2. 將靜態檔案複製到/var/www/(更安全)

我將執行第二個選項:

先在 /var/www 建立一個名為 staticfiles 的新檔案

sudo mkdir -p /var/www/staticfiles

登入後複製

現在複製專案中的所有靜態檔案:

sudo cp staticfiles/* /var/www/staticfiles

登入後複製

現在 cd 進入 /var/www

cd /var/www

登入後複製

更改所有文件的所有權

sudo chown www-data:www-data staticfiles
sudo chown www-data:www-data staticfiles/*

登入後複製

重啟nginx服務:

sudo systemctl restart nginx

登入後複製

現在如果您前往:

127.0.0.1

您應該看到您的網站正在運行,並提供所有靜態文件!

透過 cloudflare 隧道暴露

現在讓您的網站可公開存取。

為此,您需要一個 cloudflare 帳戶和一個指向 cloudflare 的網域。

先前往零信任儀表板

在“網路”下按一下“隧道”,然後按一下“建立隧道”

建立後,您應該安裝並執行連接器,並按照頁面上的說明進行特定設定。

連接器運行後,您應該按一下公用主機名稱標籤並新增公用主機名稱。

現在您應該會看到類似這樣的內容:Deploy django to production

按照我的資料填寫。服務類型應為 HTTP,url 應為 127.0.0.1:80 或 localhost:80

現在,如果您前往指定的網域,您應該會看到您的應用程式已啟動並正在運行。

恭喜你!

如果您喜歡這篇文章並想支持我的(大部分是無償的)工作,您可以在這裡捐款。

加入我的免費時事通訊!

加入這裡

以上是將 django 部署到生產環境的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板