使用Postgres,Nginx和Gunicorn將Django配置到服務器上


先決條件

  首先你得先在Digital Ocean上有一台自己的服務器,如果還沒有,可參考教程如何在Digital Ocean上申請服務器

  為了方便起見,我將本教程分為兩部分。第一部分(步驟1 - 6)僅涵蓋安裝。如果您是一位更高級的Django用戶,只需要幫助就可以安裝,可以在第6步停止。如果已經安裝了所有內容,並且只想知道如何配置所有內容,請跳到第7步。如果覺得自己喜歡需要從頭到尾提供幫助,然后只需按順序執行這些步驟即可。

  本教程的服務器系統以Ubuntu為例,編程語言默認為python2。

  如果想將ubuntu系統的默認python替換為python3,請點擊Ubuntu如何修改默認python版本為python3。如果已將默認python版本修改為python3,文中以下用到pip命令的地方都自行替換為pip3。

 

第一步:更新軟件包

  在我們做任何事情之前,我們需要確保安裝在我們VPS(服務器)上的所有軟件包都是最新的。為此,先通過SSH連接到所需的VPS並運行以下命令:

  不會用SSH連接的同志自覺點擊教程:如何為DigitalOcean上的服務器配置SSH密鑰

sudo apt-get update
sudo apt-get upgrade

  第一個命令下載通過apt-get管理的軟件包的任何更新。第二個命令安裝下載的更新。如果有更新要安裝,運行上述命令后,可能會提示您是否要安裝更新。如果發生這種情況,只需輸入“y”,然后在出現提示時點擊“enter”。

 

第二步:安裝並創建Virtualenv(虛擬環境)

  安裝virtualenv非常簡單。只需運行下面的命令:

sudo apt-get install python-virtualenv

 

  現在讓我們創建我們的virtualenv,以便我們可以在其中安裝Django和其他Python包:

sudo virtualenv /opt/myenv

 

  請注意,在“/ opt”目錄中創建了一個新目錄“myenv”。這是我們的虛擬環境存在的地方。確保將“/ opt / myenv”替換為自己希望安裝virtualenv的路徑。有些會人在VPS的根目錄下創建一個名為“webapps”的目錄。選擇最適合你的方法。

 

第三步:安裝Django

  現在我們需要激活我們的virtualenv,這樣當我們安裝Python包時,它們會安裝到我們的virtualenv環境中

source /opt/myenv/bin/activate

 

  現在應該看到“(myenv)”已被添加到終端提示符的開頭。這將幫助我們了解virtualenv是否處於激活狀態,以及在VPS上有多個virtualenv時哪個virtualenv處於激活狀態。

  現在可以安裝Django。

pip install django
 

第四步:安裝PostgreSQL

  不用PostgreSQL作為數據庫的用戶請直接看第五步

  大多數Django用戶更喜歡使用PostgreSQL作為他們的數據庫服務器。它比MySQL強大得多,而Django ORM在PostgreSQL上的效果要好於MySQL,MSSQL或其他。

  由於我們不需要為此部分激活virtualenv,因此請運行以下命令以停用:

deactivate

 

  這將使virtualenv處於非激活狀態。現在我們需要安裝PostgreSQL的依賴關系,以便使用以下命令與Django一起工作:

sudo apt-get install libpq-dev python-dev

 

  然后安裝PostgreSQL:

sudo apt-get install postgresql postgresql-contrib

  PostgreSQL現在已安裝完畢。

 

第五步:安裝NGINX

  NGINX是一款令人難以置信的快速輕量級網絡服務器。我們將使用它來為我們的Django應用程序提供我們的靜態文件。要安裝它,只需運行以下命令:

sudo apt-get install nginx

請記住,你仍然需要啟動NGINX,但是當我們開始配置我們的VPS時,我們會繼續這樣做。

 

第六步:安裝Gunicorn

  如果你想直接在服務器上用python manage.py runserver來啟動Django的話可以不用安裝Gunicorn,但是使用Gunicorn啟動服務會使得性能變得更好。

  Gunicorn是一個非常強大的Python WSGI HTTP服務器。由於它是一個Python包,我們需要首先激活我們的virtualenv再安裝它。

source /opt/myenv/bin/activate

 

  確保在終端提示符的開頭看到添加的“myenv”。現在virtualenv處於激活狀態,用以下命令安裝gunicorn:

pip install gunicorn

  Gunicorn現在安裝在你的virtualenv。

 

第七步:配置PostgreSQL

  有了PostgreSQL,我們需要創建一個數據庫,創建一個用戶,並授予我們創建的用戶訪問權限。通過運行以下命令開始:

sudo su - postgres

 

  終端提示現在應該說“postgres @ yourserver”。如果是這種情況,請運行以下命令來創建數據庫:

createdb mydb

 

  數據庫現在已經創建,並且如果沒有更改該命令,則會命名為“mydb”。現在使用以下命令創建數據庫用戶:

createuser -P myuser

 

  這時將遇到一系列6個提示。第一個會要求你提供新用戶的名字。使用任何你想要的名字。接下來的兩個提示是為你的密碼和新用戶的密碼確認。對於最后3個提示,只需輸入“n”並點擊“enter”。這只是確保新用戶只能訪問你訪問的內容,而不是其他任何內容。現在激活PostgreSQL命令行界面:

psql

 

  最后,使用以下命令授予新用戶對新數據庫的訪問權限:

GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

  

  退出命令行界面

\q

  你現在有一個PostgreSQL數據庫和一個用戶來訪問該數據庫。現在我們可以安裝Django並將其設置為使用我們的新數據庫。

 

第八步:創建一個Django項目

  為了更進一步,我們需要一個Django項目來測試。這將使我們能夠看到我們正在做的是否在工作。改變目錄到你的virtualenv目錄(在我的情況下/ opt / myenv),如下所示:

cd /opt/myenv

 

  現在確保virtualenv是激活狀態的。如果不確定,只需運行以下命令以確保已激活:

source /opt/myenv/bin/activate

 

  運行以下命令啟動一個新的Django項目:

django-admin.py startproject myproject

 

  在virtualenv目錄中可以看到多了一個名為“myproject”的新目錄。這是我們的新Django項目文件所在的地方。

  為了使Django能夠與我們的數據庫交談,我們需要為PostgreSQL安裝一個后端。確保virtualenv處於激活狀態並運行以下命令以執行此操作:

pip install psycopg2

 

  改變目錄到新的“myproject”目錄,然后進入它的子目錄,這也被稱為“myproject”,像這樣:

cd /opt/myenv/myproject/myproject

 

使用編輯器編輯settings.py文件:(若數據庫使用的不是PostgreSQL,請不要配置)

nano settings.py

 

找到數據庫設置並編輯它們看起來像這樣:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
            'NAME': 'mydb',                      # Or path to database file if using sqlite3.
            # The following settings are not used with sqlite3:
            'USER': 'myuser',
            'PASSWORD': 'password',
            'HOST': 'localhost',                      # Empty for localhost through domain sockets or           '127.0.0.1' for localhost through TCP.
            'PORT': '',                      # Set to empty string for default.
        }
    }

 

  保存並退出文件(保存並退出的方式每個編輯器都不同,請自行百度) 。現在向上移動一個目錄,使其位於主Django項目目錄(/ opt / myenv / myproject)中。

cd /opt/myenv/myproject

 

  在virtualenv處於激活狀態時,運行以下命令,以便Django可以將其初始配置和其他表添加到數據庫中:

python manage.py syncdb#Django高版本用migrate代替syncdb

  應該看到一些輸出描述了安裝了哪些表,然后提示詢問是否要創建超級用戶。這是可選的,取決於是否將使用Django的身份驗證系統或Django管理員。

 

第九步:配置Gunicorn

  首先讓我們用默認設置來運行Gunicorn。下面是運行默認Gunicorn的命令:

gunicorn_django --bind yourdomainorip.com:8001

 

  記得將“yourdomainorip.com”替換為自己的域名或VPS的IP地址。現在打開瀏覽器並訪問yourdomainorip.com:8001,應該就可以得到Django歡迎屏幕。

但是,如果仔細查看上述命令的輸出結果,會注意到只有一個Gunicorn被啟動。如果在大型VPS上啟動大型應用程序,該怎么辦?不要恐懼!我們所需要做的就是像這樣修改命令:

gunicorn_django --workers=3 --bind yourdomainorip.com:8001

  現在就有注意到3個被啟動了。3可以替換為任意數字

由於我們運行命令以root身份啟動Gunicorn,因此Gunicorn現在以root身份運行。如果不想要可以稍微改變上面的命令:

gunicorn_django --workers=3 --user=nobody --bind yourdomainorip.com:8001

 

  如果想為Gunicorn設置更多選項,最好設置一個配置文件,可以在運行Gunicorn時調用該文件。這會使讀取/配置Gunicorn命令更加簡短和容易。

可以在任何想要的地方放置gunicorn的配置文件。為了簡單起見,我們將它放在virtualenv目錄中。首先進入目錄

cd /opt/myenv

 

  現在用編輯器打開配置文件(這里用的時nano編輯器):

sudo nano gunicorn_config.py

 

  將以下內容添加到文件中:

    command = '/opt/myenv/bin/gunicorn'
    pythonpath = '/opt/myenv/myproject'
    bind = '127.0.0.1:8001'
    workers = 3
    user = nobody

 

  保存並退出文件。這些選項的作用是設置gunicorn二進制文件的路徑,將項目目錄添加到Python路徑中,設置域和端口來綁定Gunicorn,設置gunicorn工作者的數量並設置Gunicorn將運行的用戶數。

  為了運行服務器,這次我們需要更長的命令。在提示中輸入以下命令:

/opt/myenv/bin/gunicorn -c /opt/myenv/gunicorn_config.py myproject.wsgi

 

  在上面的命令中多了個“-c”標志。這告訴gunicorn我們有一個我們想要使用的配置文件,我們在“-c”標志后傳入。最后,我們傳遞一個Python點符號引用到我們的WSGI文件,以便Gunicorn知道我們的WSGI文件在哪里。

  以這種方式運行Gunicorn需要在自己的屏幕會話中運行Gunicorn,或者在運行Gunicorn命令后通過點擊“ctrl + z”然后鍵入“bg”和“enter”全部背景進程。這將為后台進程提供后台支持,因此即使在當前會話關閉后,它也會繼續運行 如果VPS重啟或者由於某種原因崩潰,會造成需要手動啟動或重新啟動Gunicorn的問題。為了解決這個問題,大多數人使用supervisord來管理Gunicorn並根據需要啟動/重啟它。另一篇文章介紹了可以在這里找到的安裝和配置supervisord 

最后,這絕不是一個詳盡的Gunicorn配置選項列表。請閱讀gunicorn.org上發布的Gunicorn文檔以獲取更多關於此主題的信息。

 

第十步:配置NGINX

  先開始NGINX:

sudo service nginx start

 

  由於我們只設置NGINX來處理靜態文件,因此我們需要先確定我們的靜態文件將存儲在哪里。打開Django項目的settings.py文件,編輯STATIC_ROOT行,如下所示:

    STATIC_ROOT = "/opt/myenv/static/"

 

路徑可以是在任何你想要的地方。

  現在已經設置了靜態文件的位置,讓我們配置NGINX來處理這些文件。使用以下命令打開一個新的NGINX配置文件(可以用喜歡的編輯器替換“nano”):

sudo nano /etc/nginx/sites-available/myproject

 

  可以隨意命名文件,但標准通常是將其命名為與正在配置的網站相關的內容。現在將以下內容添加到文件中:

    server {
        server_name yourdomainorip.com;

        access_log off;

        location /static/ {
            alias /opt/myenv/static/;
        }

        location / {
                proxy_pass http://127.0.0.1:8001;
                proxy_set_header X-Forwarded-Host $server_name;
                proxy_set_header X-Real-IP $remote_addr;
                add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
        }
    }

 

  保存並退出文件。在yourdomainorip.com上請求的任何內容都將代理到端口8001上的localhost,這是我們告訴Gunicorn運行的地方。其他行確保請求的主機名和IP地址傳遞給Gunicorn。如果沒有這個,每個請求的IP地址變成127.0.0.1,主機名就是你的VPS主機名。

  現在我們需要在指向這個配置文件的/ etc / nginx / sites-enabled目錄中建立一個符號鏈接。這就是NGINX知道這個網站是活躍的。將目錄更改為/ etc / nginx / sites-enabled,如下所示:

cd /etc/nginx/sites-enabled

 

  然后運行這個命令:

sudo ln -s ../sites-available/myproject

 

  這將創建我們需要的符號鏈接,以便NGINX知道我們的站點的新配置文件。

  另外,刪除默認的nginx服務器塊:

`sudo rm default'

 

  我們需要重新啟動NGINX,以便它知道要查找我們的更改。為此,請運行以下命令:

sudo service nginx restart

 

  OK!現在已經安裝了Django並使用PostgreSQL,並且應用程序可通過NGINX提供靜態內容和Gunicorn作為您的應用程序服務器進行網絡訪問。

 

 

 

            


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM