天天看點

阿裡雲ubuntu系統下使用uwsgi+nginx部署django web項目示例

1. 準備工作

首先更新軟體

sudo apt-get upgrade
           

安裝虛拟環境

安裝nginx

sudo apt-get install nginx
           

安裝uwsgi

先導步驟:
sudo apt-get install python-dev 
sudo apt-get install python3-dev
安裝
sudo pip3 install uwsgi
或者:
sudo pip3 install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz
           

2. 添加新使用者

用root運作uwsgi是不推薦的,推薦的做法是建立一個使用者組,再往裡面添加一個新使用者

建立使用者組

組名為:webapps

sudo groupadd --system webapps
           

建立使用者

使用者名為:user_test

設定密碼為:test

passwd test
           

建立使用者目錄

mkdir -p /webapps/test
           

修改目錄權限,下面的指令意思是:使/webapps/test/這個目錄屬于user_test這個使用者

chown user_test /webapps/test/
           

添加使用者user_test sudo權限

在/etc/sudoers添加

使用指令

vim /etc/sudoers

打開/etc/sudoers

在裡面添加下面這一句:

如下圖:

阿裡雲ubuntu系統下使用uwsgi+nginx部署django web項目示例

3. 開始建立應用

切換使用者為:user_test

su - user_test
           
阿裡雲ubuntu系統下使用uwsgi+nginx部署django web項目示例

可以看出目前使用者的主目錄為

/webapps/test

這是因為我們建立使用者時使用的指令

sudo useradd --system --gid webapps --shell /bin/bash --home /webapps/test user_test

,其中

--home /webapps/test

指定了使用者主目錄為

/webapps/test

4. 建立python虛拟環境

這裡指定為3.5版本,并激活

在/webapps/test下執行指令:

注意最後一個點哦,它指的是在目前目錄下建立。執行後的結果(我之前已經執行過了,是以就不再執行了,直接列出來結果吧)

阿裡雲ubuntu系統下使用uwsgi+nginx部署django web項目示例

圖中畫紅線的就是生成的虛拟環境内容,那個mysite是我後來建立的檔案夾,先不用管它,下面會說到它的。

激活環境

使用下面的指令:

source bin/activate
           

結果如下圖

阿裡雲ubuntu系統下使用uwsgi+nginx部署django web項目示例

前面出現了括号,裡面的test也就是目前虛拟環境的目錄名,也可以說目前的虛拟環境名為test。

那麼怎麼退出呢?

很easy啦~

執行指令:

deactivate

就好了~如下圖:

阿裡雲ubuntu系統下使用uwsgi+nginx部署django web項目示例

安裝django

注意:在進入到虛拟環境的狀态下安裝哦~

pip install django
           

建立django工程mysite

django-admin startproject mysite
           

建立應用app

1 進入mysite目錄

cd mysite
           

2 建立app

django-admin startapp app
           

修改

mysite/settings.py

要做三件事:

1 将外網ip添加到

ALLOWED_HOSTS

阿裡雲ubuntu系統下使用uwsgi+nginx部署django web項目示例

這裡我的外網IP是

106.14.125.141

,你要換成你的。

外網IP是啥?這都不知道?就是你買的阿裡雲伺服器配置設定的啊。

阿裡雲ubuntu系統下使用uwsgi+nginx部署django web項目示例

2 在INSTALLED_APPS裡追加 ‘app’

阿裡雲ubuntu系統下使用uwsgi+nginx部署django web項目示例

3 建立app/static目錄 ,然後在mysite/settings.py裡添加STATIC_ROOT

進入app目錄

cd app
           

建立static檔案夾

退回上一層目錄,也就是mysite下

cd ../
           

然後在setting.py末尾,添加下面代碼

STATIC_ROOT = os.path.join(BASE_DIR, 'app', 'static')
           
阿裡雲ubuntu系統下使用uwsgi+nginx部署django web項目示例

接下來是一系列指令:

收集靜态檔案到app/static目錄

python manage.py collectstatic
           

遷移資料庫

python manage.py migrate
           

建立背景管理使用者

python manage.py createsuperuser
           

會讓你起個名字,設個密碼

添加視圖函數,在app/views.py添加

from django.http import HttpResponse
def index(request):
    return HttpResponse('<h1>Hello World!</h1>')
           

修改mysite/urls.py為:

from django.contrib import admin
from django.urls import path
from app import views
from django.conf.urls import url

urlpatterns = [
    url('admin/', admin.site.urls),
    url(r'^$', views.index),
]
           

測試django應用運作是否正常

python manage.py runserver
           

再打開一個連接配接視窗,輸入

curl 127.0.0.1:8000

測試是否能通路

正常會輸出

<h1>Hello World!</h1>

然後,按Ctrl C 退出

4. 配置ngnix

https://github.com/nginx/nginx/blob/master/conf/uwsgi_params

下載下傳到

/etc/nginx/conf/

目錄

/etc/nginx

下應該是沒有

conf

這個檔案夾,如果沒有,那就建立它!

或者,不下載下傳也可以,我把它的内容貼出來吧~

uwsgi_param  QUERY_STRING       $query_string;
uwsgi_param  REQUEST_METHOD     $request_method;
uwsgi_param  CONTENT_TYPE       $content_type;
uwsgi_param  CONTENT_LENGTH     $content_length;

uwsgi_param  REQUEST_URI        $request_uri;
uwsgi_param  PATH_INFO          $document_uri;
uwsgi_param  DOCUMENT_ROOT      $document_root;
uwsgi_param  SERVER_PROTOCOL    $server_protocol;
uwsgi_param  REQUEST_SCHEME     $scheme;
uwsgi_param  HTTPS              $https if_not_empty;

uwsgi_param  REMOTE_ADDR        $remote_addr;
uwsgi_param  REMOTE_PORT        $remote_port;
uwsgi_param  SERVER_PORT        $server_port;
uwsgi_param  SERVER_NAME        $server_name;
           

切換到

/etc/nginx

cd /etc/nginx
           

建立

conf

檔案夾

mkdir conf
           

進入

conf

cd conf
           

建立uwsgi_params檔案

vim uwsgi_params
           

然後,把上面的代碼複制進去,儲存退出。

然後呢,回到mysite目錄下

建立test_nginx.conf檔案,内容如下

# the upstream component nginx needs to connect to
upstream testapp {
    #server unix:///webapps/test/mysite/mysite.sock; # for a file socket
    server :; # for a web port socket (we'll use this first)
}

# configuration of the server
server {
    # the port your site will be served on
    listen      ;
    # the domain name it will serve for
    server_name localhost; # substitute your machine's IP address or FQDN
    charset     utf-;

    # max upload size
    client_max_body_size M;   # adjust to taste
    access_log      /webapps/test/mysite/nginx_access.log;
    error_log       /webapps/test/mysite/nginx_error.log;

    # Django media
    location /media  {
        alias /webapps/test/mysite/app/media;  # your Django project's media files - amend as required
    }

    location /static {
        alias /webapps/test/mysite/app/static; # your Django project's static files - amend as required
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass  testapp;
        include     /etc/nginx/conf/uwsgi_params; # the uwsgi_params file you installed
    }
}
           

注意!

listen 80的意思是,從浏覽器通路伺服器時的端口是80

server 127.0.0.1:8000;是nginx到wsgi的連接配接位址,這個必須和wsgi.ini裡面的socket = 127.0.0.1:8000一緻!

test_nginx.conf

連結到

/etc/nginx/sites-enabled/

目錄

sudo ln -s /webapps/test/mysite/test_nginx.conf /etc/nginx/sites-enabled/
           

記得删除自帶的default檔案,可以到

/etc/nginx/sites-enabled/

目錄下看一看

阿裡雲ubuntu系統下使用uwsgi+nginx部署django web項目示例

可以看到該目錄下已經出現了

test_nginx.conf

這個檔案,而且原來的default檔案我已經删除了。删除指令很簡單,就是

rm

指令

把使用者www-data加到webapps使用者組

重新開機ngnix

sudo /etc/init.d/nginx stop 
sudo /etc/init.d/nginx start
           

5. 配置uwsgi

mysite

也就是django項目根目錄下建立

wsgi.ini

啟動檔案,通過這個檔案來啟動django項目。

[uwsgi]
socket = .:
chdir=/webapps/test/mysite
module=mysite.wsgi
master = true
processes=
threads=
max-requests=
chmod-socket=
vacuum=true
daemonize = /webapps/test/mysite/uwsgi.log
virtualenv = /webapps/test
gid=webapps
uid=user_test
stats=/webapps/test/mysite/uwsgi.status
pidfile=/webapps/test/mysite/uwsgi.pid
           

注意!

socket = 127.0.0.1:8000為wsgi的入口,必須與test_nginx.conf中的server 127.0.0.1:8000;一緻

chdir=/webapps/test/mysite :django項目的路徑

module=mysite.wsgi :django項目中的wsgi.py

daemonize = /webapps/test/mysite/uwsgi.log :日志路徑

virtualenv = /webapps/test 虛拟環境路徑

stats=/webapps/test/mysite/uwsgi.status:記錄狀态的檔案

pidfile=/webapps/test/mysite/uwsgi.pid:記錄線程的檔案,可用于停止uwsgi

運作uwsgi

用浏覽器通路外網ip,你會發現!!!amazing~終于出來了!我的Hello world!

雞凍不雞凍~

我搞了快兩天,各種錯誤,各種重裝,各種百度,啊啊啊啊,快要崩潰了。。。

最後終于搞出來了QAQ

阿裡雲ubuntu系統下使用uwsgi+nginx部署django web項目示例

這時候,你的mysite目錄下應該是這樣的:

阿裡雲ubuntu系統下使用uwsgi+nginx部署django web項目示例

項目是啟動了,如何停止呢?

輸入指令

阿裡雲ubuntu系統下使用uwsgi+nginx部署django web項目示例

再通路外網IP試試?

阿裡雲ubuntu系統下使用uwsgi+nginx部署django web項目示例

OK !停止了,這是一種好的停止方式。

如果不會的話,(怎麼會不會,會了不難,不會的難死,我找了好多資料才找到的。。)停止線程也可以。

檢視線程号

顯示uwsgi的線程号

阿裡雲ubuntu系統下使用uwsgi+nginx部署django web項目示例

用ps指令再看看目前線程程:

阿裡雲ubuntu系統下使用uwsgi+nginx部署django web項目示例

證明這個線程号确實是uwsgi的。可以用指令

kill -9 2233

殺死它,但是不太好吧,還是上面的

uwsgi --stop uwsgi.pid

這種方式停止uwsgi比較好。。。

啊啊啊好了,終于完了~

參考文章:

https://blog.csdn.net/abc_1234d/article/details/77717523

https://blog.csdn.net/lileihappy/article/details/79580291

繼續閱讀