在阿里雲上Ubuntu環境經過nginx+uwsgi部署Django項目

年前阿里雲打折,1核1G的雲服務器一年只要300多塊,果斷就租了1年的。既然服務器已經到手,怎麼能不把本身寫的項目部署上去呢,其實網上關於nginx+uwsgi部署Django項目的文章有不少,可是這些文章要不就是好久以前的,要不就是互相抄襲,一路過來都是坑,這裏重點吧在部署時候遇到的坑着重介紹一下:

1.首先部署django項目

首先是django項目,因爲我是使用Anaconda來進行版本控制的,而django項目是在Python2.7環境下開發的,首先是新建一個Python2.7的環境:php

#建立python27環境
conda create --name python27 python=2.7
#激活該環境
source activate python27
#經過conda安裝django
conda install django

環境準備好後,從GitHub上將項目拉取下來html

git clone https://github.com/sunny0826/xxx

修改setting.py文件python

#debug模式默認開啓,這裏要關閉
DEBUG = False
#這裏將外網IP配置進來
ALLOWED_HOSTS = ['127.0.0.1','xx.xx.xx.xx']

啓動項目:nginx

#來項目目錄下執行
python manage.py runserver 8000

而後在外網ip:8000路徑下查看項目啓動狀況git

2.阿里雲配置安全組

因爲是服務器在阿里雲上,因此直接訪問時訪問不到的,因此要在阿里雲平臺配置安全組(相似於防火牆)github

首先打開阿里雲平臺,登陸,點擊安全組配置:

clipboard.png

點擊配置規則

clipboard.png

點擊添加安全組規則

clipboard.png

按要求填寫安全組規則

clipboard.png
優先級1位最高優先級,端口能夠設置範圍,而且能夠設置受權訪問的對象
設置完以後,就能夠在公網IP訪問到咱們的django項目了django

3.安裝配置uwsgi

肯定django項目能夠正常運行了,ctrl+c中止項目,下面咱們來安裝uwsgi:
在安裝uwsgi很是簡單,只須要pip安裝便可,可是因爲以前使用的是Python27環境,這裏記得要激活Python27環境,不然就安裝到默認的Python路徑了vim

#uWSGI 是一個(巨大的) C 應用,因此你須要一個 C 編譯器(好比 gcc 或者 clang)和 Python 開發版頭文件
apt-get install build-essential python-dev
#安裝uwsgi
pip install uwsgi

按照官網介紹,寫已經Python腳本進行測試,test.py(在任意路徑均可以,不過測完要記得刪掉)安全

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return ["Hello World"]

而後輸入命令進行測試服務器

uwsgi --http :8000 --wsgi-file test.py

這裏是8000端口,由於以前測試django的時候打開的8000端口,這裏偷懶就不去配置新的安全組了
那麼問題就來了,在啓動的時候報錯了....=。=

clipboard.png

出現的這個錯誤,通過測試只會在Python2.7的環境發生,在Python3+就沒有發生了,展轉百度和Google,都沒有找到這個問題的解決辦法且這個問題通常發生在nginx上...
但這個報錯問題仍是很明顯,就是libpcre.so.1這個文件找不到,初步推測爲版本問題
首先要我們搜索一下這個文件,看看本機有沒有

clipboard.png

發現本機是有這個文件的,那就好辦了,將他連接到相應位置就好

clipboard.png

執行這條語句以後就能夠uwsgi就能夠正常啓動了

在跳過這個坑以後,就能夠正式來配置咱們的項目了
首先修改本身項目中的wsgi.py文件,添加兩行代碼

clipboard.png

而後在django項目根目錄建立uwsgi.ini文件

uwsgi.ini文件配置
# uwsgi.ini file
[uwsgi]

# Django-related settings

socket = 127.0.0.1:8000            #與nginx通訊的地址和端口

# the base directory (full path)
chdir           = /apps/xxxx        #django項目絕對路徑

# Django s wsgi file
module          = xxxx.wsgi    #wsgi文件所在的相對於項目的路徑

# the virtualenv (full path)
home            =  /root/anaconda3/envs/python27/lib/python2.7/site-packages        #python環境的路徑

# process-related settings
# master
master          = true

# maximum number of worker processes
processes       = 4

# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true

plugins=python
#log文件
daemonize=/apps/uwsgi/uwsgi.log
#pid文件
pidfile=/apps/uwsgi/uwsgi.pid

這裏配置日誌文件和pid文件,方便以後的重啓

關於uwsgi的重啓問題:

每次項目有代碼更新的話,都須要重啓uwsgi,若是沒有配置pid文件的話,重啓須要使用:

#查看uwsgi進程號
ps aux | grep uwsgi
#關閉進程號爲0的進程
kill -9 主進程號

clipboard.png

來中止uwsgi,而後才能重啓,注意這裏的主進程是pid爲1的進程,而配置了pid文件的,只須要進行以下方法來重啓便可

#重載(通常修改參數,或者修改py文件常常用到)
uwsgi --reload uwsgi.pid
#重啓(通常系統環境變化會用到)
uwsgi --stop uwsgi.pid

最後在項目根目錄下運行uwsgi命令,載入配置文件

uwsgi --ini uwsgi.ini

而後在後面的日誌中要注意環境是否爲以前配置,若是不是請激活激活以前建立的Python環境再進行操做

4.安裝配置nginx

最後來安裝nginx

sudo apt-get install nginx

修改nginx配置

cd /etc/nginx/sites-enabled    #Ubuntu中nginx配置文件所在路徑
vim default
配置文件
server {
        listen 80 default_server;            #監聽端口,未來訪問的端口
        listen [::]:80 default_server;

        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;


        server_name _;

        location / {
                include uwsgi_params;
                uwsgi_pass 127.0.0.1:8000;    #uwsgi中配置的路徑
        }

        location /static {
                alias /apps/xxx/static;       #靜態資源路徑
        }

        location /resume.ico  {
                alias /apps/xxx/static/resume.ico;    #網頁圖標路徑
        }
}

uwsgi啓動後,再啓動nginx

基礎命令
/etc/init.d/nginx start  #啓動
/etc/init.d/nginx stop  #關閉
/etc/init.d/nginx restart  #重啓

啓動以後,訪問外網IP:80,查看是否能夠經過nginx訪問django

相關文章
相關標籤/搜索