先決條件
首先你得先在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作為您的應用程序服務器進行網絡訪問。