阿里雲部署Django項目(nginx+uWSGI)-2018.11

前言:部署的前提是你的項目已經在本地完成可以運行了,我的本地環境是ubuntu16.04+python3.5+Django2.1.2+Mysql,在python虛擬環境(virtualenv)下建的項目。阿里雲部署用的是nginx+uWSGI。

一、雲服務器購買和配置

去阿里雲官網購買一臺雲服務器ECS(Elastic Compute Service),可以直接支付寶掃碼登錄。個人用的話入門級就可以了,我買的是1核2G的,原價還是挺貴的。個人練手的話1核1G應該也是夠用了,看實際需求。

 購買的時候會讓你選操作系統,因爲我本地用的就是Ubuntu,所以選的ubuntu16.04  64位。除了操作系統選擇,還有幾個要設置的地方,等下說。先說下這個雲服務器ECS(Elastic Compute Service)是個什麼東西,簡單的就可以把它理解爲一臺電腦,我們租的一臺電腦,可以一直運行。我們可以通過遠程連接對它進行操作,只能通過終端命令操作,不能用鼠標。

購買成功後進入控制檯→雲服務器(ECS)→實例,就能看到你買的服務器。上面的公網IP就是這臺服務器所在的IP地址,部署成功後瀏覽器通過這個地址訪問你部署的項目。這裏還有兩個密碼要設置,一個是遠程連接的密碼,第一次點擊上圖的遠程連接會出現一個6位數字密碼,只出現一次,所以要記住這個密碼,後面也可以修改。第二個是ubuntu登錄的賬戶密碼,帳戶名默認爲root,密碼需要設置。點擊上圖的管理,點擊更多-重置密碼 設置ubuntu登錄密碼。

 除此之外還有一個要設置的就是安全組,設置允許訪問的端口。點擊安全組--配置規則 進入如下界面,最下面三條是系統的默認設置。

 點擊添加安全組規則進行端口添加,只需要填端口範圍和授權對象,比如80端口,端口範圍寫80/80,授權對象寫0.0.0.0/0,表示所有IP地址都能訪問。常用的幾個端口號,SSH(22),HTTP(80),HTTPS(443)。

 到此,雲服務器的基本設置完成了。點擊 實例頁面的遠程連接,輸入6位密碼,就可以遠程登錄。然後會讓你輸入Ubuntu的賬戶名和密碼。輸入成功後就可以遠程登錄ubuntu的終端,可以像在本地一樣通過各種命令操作。

 二、項目資料上傳和環境搭建

1、把我們本地Django項目工程文件拷貝到阿里雲上

這裏要用到一個工具:Xftp,可以用來在本地和遠程Linux之間拷貝文件。

進入官網,https://www.netsarang.com/products/xfp_overview.html 。點擊Free License,填寫下姓名、郵箱就可以免費下載安裝。

 安裝成功後,打開,點擊左上角新建,主機 輸入你阿里雲的公網IP,確定。然後點擊對話,輸入ubuntu的賬戶名,密碼,就可以實現本地和阿里雲的連接。

 左邊就是你的PC桌面,右邊是阿里雲ubuntu的root目錄。可以直接按住把文件從左邊拖到右邊的文件夾中。因爲本地是在虛擬機中運行的ubuntu,項目文件叫做myweb,先把文件從ubuntu中拷貝到桌面,再從桌面拖到阿里雲ubuntu的home文件夾下。這裏還有一點設置是如何顯示ubuntu中的隱藏文件,在工具欄--選項--顯示隱藏文件。

 2、虛擬環境(virtualenv)的安裝

本地項目是建在python虛擬環境下的,所以在阿里雲上也要先建下虛擬環境。安裝如下步驟如下:

1、安裝virtualenv

sudo pip install virtualenv
sudo pip install virtualenvwrapper #安裝虛擬環境管理工具

2、在home下創建虛擬環境安裝目錄

mkdir .virtualenvs

3、爲virtualenv配置環境變量,打開.bashrc文件,在末尾加上兩行代碼,在阿里雲的ubuntu上,你想編輯文件只能用vi/vim打開,對於沒用過vi的話還是需要點時間學習的。或者你可以在本地pc編輯好,再用Xftp工具上傳覆蓋原來的文件。

用vim打開.bashrc ,一般就在home文件夾下

sudo vim ~/.bashrc

 在末尾添加兩行代碼

export WORKON_HOME=$HOME/.virtualenvs  # 所有虛擬環境存儲的目錄
source /usr/local/bin/virtualenvwrapper.sh

使配置文件生效

source ~/.bashrc

 4、創建虛擬環境,默認命令創建的是python2的虛擬環境,指定創建python3.5的虛擬環境可以使用以下命令

mkvirtualenv -p /usr/bin/python3.5  XX  #XX是虛擬環境的名字,創建python3.5的虛擬環境

其他命令:
workon xx    #進入虛擬環境XX
deactivate   #退出虛擬環境

 3、在虛擬環境中安裝相應的工具包

我們在本地寫django項目肯定是安裝了一堆相應的包,需要把他們移植到阿里雲上。首先在本地ubuntu進入虛擬環境,在項目根目錄下,執行以下命令收集安裝的包,就是生成一個包的清單文件plist.txt。

pip freeze > plist.txt

 然後用xftp把這個plist.txt文件上傳到阿里雲項目的根目錄home/myweb,然後進入虛擬環境test(test是我新建的虛擬環境的名字)。

workon test    #進入虛擬環境test

cd到plist.txt所在目錄
pip install -r plist.txt  #安裝txt文件上的包

4、Mysql數據庫的安裝和數據的遷移 

安裝Mysql:輸入以下命令,安裝過程會設置密碼,設置成和原來本地一樣的,就不用在setting中修改了。

​sudo apt-get update
sudo apt-get install mysql-server 
sudo apt-get install mysql-client

創建數據庫:先登錄數據庫, 然後創建數據庫v1,數據庫名字也創建成和原來本地一樣的,我的叫v1。

create database v1;

 數據的遷移:把本地數據庫中的數據複製到阿里雲上的數據庫中。先在本地生成備份文件,v1是要備份的數據庫,v1.sql是生成的備份文件。然後用Xftp把v1.sql文件上傳到阿里雲。

mysqldump -u root -p v1 >v1.sql 

 數據還原:阿里雲終端 cd到v1.sql所在目錄,輸入以下命令

mysql -u root -p v1<v1.sql

 mysql配置:找到mysqld.cnf文件註釋掉bind-address這一行

/etc/mysql/mysql.conf.d/mysqld.cnf   #配置文件路徑

#bind-address		= 127.0.0.1   #註釋掉這一行

5、修改django的setting文件:

DEBUG = False
ALLOW_HOSTS=['XXXXXX'] #改成阿里雲的公網IP

至此,我們已經完成了項目文件遷移、環境建立、數據庫遷移 。可以在阿里雲的終端中運行Django項目,先進入虛擬環境,然後cd到項目目錄下,python manage.py runserver 看能不能啓動項目,如果可以說明項目本身已經沒有問題了。如果不能說明項目本身還有問題。有些包安裝好後需要設置配置文件,看是不是沒設置。到目前爲止的操作其實基本都和本地是一樣,下面我們要安裝兩個額外的東西,nginx和uWSGI。

三、nginx、uWSGI的安裝

在安裝前先了解下這幾個是什麼東西:WSGI、uWSGI、nginx。

WSGI:PythonWeb服務器網關接口(Python Web Server Gateway Interface),這是一種協議規範,用於規範web server(比如uWSGI)和web application(Flask、Django等)之間的通信方式。這種協議其實是將我們和更加底層的HTTP、TCP等協議分隔開來,使我們在開發的時候可以不用自己去實現這些協議的處理,只關注於更高層次的邏輯處理,實現面向對象的編程。

uWSGI:uWSGI是一個Web服務器,它實現了WSGI協議、uwsgi、http等協議。它本身可以作爲一個服務器單獨使用,但是也可以和nginx組合使用。一般Django部署都是用的nginx+uWSGI,可以理解爲這種組合性能更優。

nginx:這是一個高性能的web服務器/反向代理,類似Apache。什麼叫反向代理,客戶端通過一個代理去訪問服務器,這樣的代理叫正向代理;同樣的服務器前加一個代理和客戶端通信,這樣的代理叫反向代理。nginx就是用來放在uWSGI前做反向代理。

 我們在本地開發的時候沒有安裝過以上服務器,但是也可以python manage.py  runserver運行項目,那是因爲Django等框架自帶了WSGI服務器,性能不強,可以用於調試。

nginx安裝:

直接在終端安裝,不用裝在虛擬環境中,輸入以下命令:

sudo apt-get update
sudo apt-get install nginx

安裝成功後,用瀏覽器訪問你的阿里雲IP地址,可以看到以下提示 :

nginx常用命令:

service nginx start   #啓動
service nginx stop    #停止
service nginx reload  #重啓

nginx配置:打開配置文件default,路徑/etc/nginx/sites-available/default,設置以下內容。一個是server_name後面換成你的阿里雲公網IP,有的文章說不換也行。關鍵是下面2個location,第一個location是設置的和uWSGI的關聯。第二個location /static是設置的靜態文件的路徑。如果你的項目還有media文件夾,那還要加一個location /media,把路徑設置上。注意:location 和alias後面有空格。

server_name 47.106.84.245;
        
        location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        # try_files $uri $uri/ =404;
        include  uwsgi_params;
                uwsgi_pass  127.0.0.1:8000;  
    }
        location /static {
               alias /home/myweb/static;
}

 更新(2018.11.26):

上面nginx配置靜態文件有一個問題,就是上面的目錄/home/myweb/static只是我們自己的靜態文件的目錄,你登錄admin後發現admin頁面的樣式都丟失了。因爲django自帶的admin的靜態文件路徑沒有導入。所以就需要新建一個文件夾,我的是/home/myweb/nginx/static,然後執行命令把整個項目的所有靜態文件都收集到這個目錄下,再修改下上面的配置。

第一步:新建文件夾 /home/myweb/nginx/static

第二步:修改setting.py文件,增加STATIC_ROOT

STATIC_ROOT='/home/myweb/nginx/static/'    #添加收集靜態文件的目錄
STATIC_URL = '/static/'
STATICFILES_DIRS=(
os.path.join(BASE_DIR,'static'),   
)

第三步:執行以下代碼收集靜態文件

python manage.py collectstatic

 第四步:修改nginx的配置

 location /static {
               alias /home/myweb/nginx/static;
}

uWSGI安裝:

這個是安裝在虛擬環境中,先workon test進入虛擬環境,安裝uWSGI前需要先安裝依賴,輸入以下命令完成安裝

apt-get install build-essential python
apt-get install python-dev
pip install uwsgi

配置uWSGI:在django項目的根目錄下,新建兩個文件,uwsgi.ini和run.log 。第一個是uWSGI的配置文件,第二個是日誌記錄文件。設置uwsgi.ini文件如下:

[uwsgi]
chdir = /home/myweb                
module = myweb.wsgi:application 
socket = 127.0.0.1:8000            
master = true         
daemonize = /home/myweb/run.log
disable-logging = true
wsgi-file = /home/myweb/myweb/wsgi.py
pidfile=/home/myweb/uwsgi.pid

chdir是django項目所在目錄,socket後面的地址是和上面nginx配置文件中的地址uwsgi_pass  127.0.0.1:8000對應的,規定nginx和uWSGI之間的通信端口。daemonize就是日誌文件的路徑。disable-logging = true 表示不記錄正常信息,只記錄錯誤信息。wsgi-file是你django項目根目錄下項目同名目錄中有一個wsgi.py文件的路徑。pidfile是uwsgi.pid文件的路徑,這個文件是uWSGI運行後自動生成的,裏面記錄了uWSGI的進程號,可以用來重啓uWSGI。但是我的uwsgi.pid文件記錄的進程號老是不對,用不了。

uWSGI基本命令:

啓動:uwsgi --ini uwsgi.ini
停止:uwsgi --stop uwsgi.pid
重啓:uwsgi --reload uwsgi.pid

全部配置好後,重啓nginx和uWSGI,因該就可以用瀏覽器訪問你的項目了。

以下是我部署的django項目,前端基本是用的現成的,一些js和後端是自己寫的。 

 http://47.106.84.245/

水平有限如有問題,望指正。

參考文章:

https://blog.csdn.net/qq_41590417/article/details/80509098

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章