阿里雲部署Django專案(nginx+uWSGI)

CSDN學院發表於2019-10-24

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

雲伺服器購買和配置

去雲伺服器官網購買一臺雲伺服器ECS(Elastic Compute Service),可以直接支付寶掃碼登入,個人用的話入門級就可以了. 購買的時候會讓你選作業系統,因為我本地用的就是Ubuntu所以選的ubuntu16.04 64位。

1.ubuntu升級python版本(3.5->3.6)

預設的Python版本是2.7和3.5,Python版本需>=3.6所以進行升級

命令如下:
$ sudo add-apt-repository ppa:jonathonf/python-3.6
$ sudo apt-get update
$ sudo apt-get install python3.6

#移除原3.4link

$ sudo rm /usr/bin/python3

更換預設python3 的版本為3.6

$ sudo ln -s /usr/bin/python3.6   /usr/bin/python3

安裝完Python後pip需重新安裝:

$ wget https://bootstrap.pypa.io/get-pip.py  --no-check-certificate
$ sudo python get-pip.py

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

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

$sudo pip install virtualenv

在這裡插入圖片描述
安裝虛擬環境管理工具

$sudo pip install virtualenvwrapper

在這裡插入圖片描述
在home下建立虛擬環境安裝目錄
在這裡插入圖片描述

$mkdir .virtualenvs

為virtualenv配置環境變數,開啟.bashrc檔案,在末尾加上兩行程式碼,在阿里雲的ubuntu上,你想編輯檔案只能用vi/vim開啟,對於沒用過vi的話還是需要點時間學習的。或者你可以在本地pc編輯好,再用Xftp工具上傳覆蓋原來的檔案。用vim開啟.bashrc ,一般就在home資料夾下

$cd  .virtualenvs
$sudo vim ~/.bashrc

在末尾新增兩行程式碼

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

在這裡插入圖片描述
使用編輯器語言

: wq

儲存退出
使配置檔案生效

$source ~/.bashrc

建立虛擬環境,預設命令建立的是python2的虛擬環境,指定建立python3.6的虛擬環境可以使用以下命令

mkvirtualenv  -p  /usr/bin/python3.6  XX 

在這裡插入圖片描述
XX是虛擬環境名字,這個可以自己定義

workon xx    #進入虛擬環境XX
deactivate   #退出虛擬環境

在虛擬環境裡安裝需要的包
安裝命令 pip3 install xxx 其中 xxx 是包名,會python的都會安裝,不多說

3.安裝資料庫

Mysql資料庫的安裝和資料的遷移
安裝Mysql:輸入以下命令,安裝過程會設定密碼

​$sudo apt-get update
$sudo apt-get install mysql-server 
$sudo apt-get install mysql-clien

可能出現的問題

1.mysql配置:找到mysqld.cnf檔案註釋掉bind-address這一行

sudo  vim   /etc/mysql/mysql.conf.d/mysqld.cnf  
#bind-address= 127.0.0.1   #註釋掉這一行

2.針對ubuntu的mysql資料庫預設字型是拉丁文,需要修改配置檔案,防止插入中文出現錯誤.針對這個問題的修改可以自行百度方案,修改即可,非常容易

4.nginx,uWSGI的安裝

$sudo apt-get install gcc zlib1g-dev libpcre3 libpcre3-dev libssl-dev
#新買的雲伺服器 ,需要先配置gcc編譯環境

$sudo apt-get install nginx
#再安裝nginx 

安裝成功後,用瀏覽器訪問你的阿里雲IP地址,可以看到以下提示 :
在這裡插入圖片描述
nginx常用命令:

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

安裝好的檔案位置:這些檔案暫時跟你沒什麼關係,越學習,越會熟悉
/usr/sbin/nginx:主程式
/etc/nginx:存放配置檔案
/usr/share/nginx:存放靜態檔案
/var/log/nginx:存放日誌

檢查是否安裝成功過
$ps -ef | grep nginx

nginx配置:開啟配置檔案default,路徑/etc/nginx/sites-available/default

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

設定以下內容

server {
        listen 80 default_server;
        listen [::]:80 default_server;
       
        server_name 129.211.59.60;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                include uwsgi_params;
                uwsgi_pass 127.0.0.1:8000;
        }
        location /static{
        alias /home/ubuntu/myblog-master\myblog-master\post\static\post;
}
}

在這裡插入圖片描述
一個是server_name後面換成你的阿里雲公網IP,有的文章說不換也行,經過實驗,不換確實可以。
關鍵是下面2個location:
第一個location是設定的和uWSGI的關聯。
第二個location /static是設定的靜態檔案的路徑。
如果你的專案還有media資料夾,那還要加一個location /media,把路徑設定上。
注意:location 和alias後面有空格,格式不能有任何語法錯誤

配置靜態檔案

第一步:新建資料夾 /home/myweb/nginx/static

第二步:修改setting.py檔案,增加STATIC_ROOT
在這裡插入圖片描述

STATIC_URL = '/static/'
STATIC_ROOT = '/home/ubuntu/myblog-master\myblog-master\post\static\post'
STATICFILES_DIRS = [
    ('css',os.path.join(STATIC_ROOT,"css").replace('\\','/')),
    ('images',os.path.join(STATIC_ROOT,'image').replace('\\','/')),
    ('js',os.path.join(STATIC_ROOT,'js').replace('\\','/')),
]

第三步:執行以下程式碼收集靜態檔案

python manage.py collectstatic
第四步:修改nginx的配置

  location /static{
        alias /home/ubuntu/myblog-master\myblog-master\post\static\post;
}

uWSGI安裝:

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

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

配置uWSGI:在django專案的根目錄下,新建兩個檔案,uwsgi.ini和run.log 。第一個是uWSGI的配置檔案,第二個是日誌記錄檔案。設定uwsgi.ini檔案如下:
在這裡插入圖片描述

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

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基本命令:

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

全部配置好後,重啟nginx和uWSGI,使用雲伺服器公網ip就可以瀏覽你的專案了,參考 http://129.211.59.60/
在這裡插入圖片描述

相關文章