「Linux+Django」Django+CentOs7+uwsgi+nginx部署網站記錄

轉自:http://www.usday.cn/blog/51

部署前的準備:

 

1. 在本地能夠運行的django項目html

 

2. 一臺雲服務器,這裏選用Centos系統python

開始部署:

 

首先在本地導出項目須要的第三方庫:在根目錄(或虛擬環境中) 命令行使用   nginx

 

pip freeze >requirements.txt  web

 

利用ssh鏈接你的服務器 我這裏用的是Xshellshell

 

安裝python3  

 

下載安裝以前須要確認服務器上已經安裝了:GNU編譯器套件、zlib依賴包(python3.7以上版本須要)django

 

具體安裝命令以下(路徑任意):vim

 

yum install gcc 安裝GNU編譯器套件瀏覽器

 

yum install -y zlib zlib-devel 安裝zlib依賴包bash

 

cd /tmp/ 進入tmp文件夾(在這裏只是存儲臨時文件)服務器

 

官網下載安裝所需的Python3(服務器通常自帶Python2)

 

wget www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz

 

進行解壓 tar -xzvf Python-3.7.0.tgz

 

進入解壓出來的Python-3.7.0文件夾 cd Python-3.7.0/

 

安裝到/usr/local/python3目錄下  ./configure --prefix=/usr/local/python3

 

編譯安裝  make && make install

 

使用軟連接便於在任意目錄使用python3和pip3

 

ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3

 

ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

 

到這裏能夠在終端輸入 python3 測試python3是否安裝成功

 

在requirement.txt所在路徑下安裝所需模塊  pip3 install -r requirement.txt 

 

可使用 pip3 list 查看相應模塊是否安裝

 

安裝uwsgi

 

pip3 install uwsgi

 

uwsgi基礎測試

 

建立一個test.py測試文件(路徑任意) vim test.py

 

鍵盤按i進入編輯模式,輸入如下內容

 

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

 

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

 

 解釋:  --http :8000 使用http協議 端口8000  --wsgi-file test.py 加載指定文件

 

在本地瀏覽器進行訪問 輸入服務器ip地址或域名(已進行域名解析)+:8000 例如  *.*.*.*:8000 或 *.com:8000

 

若是沒問題。你將在瀏覽器中看到 Hello World,這證實 web客戶端--uwsgi--python 的鏈接是正常的

 

使用uwsgi測試你的項目

進入的項目文件夾(與manage.py同一級) 我把項目文件放在了  /home/  項目名字爲mysite

因此 cd /home/mysite

 

確保你的項目能夠正常工做

 

鍵入 python3 manage.py runserver 0.0.0.0:8000  

 

若是發現django模塊不能導入,則是由於沒有添加環境變量,具體命令以下:

 

vim ~/.bash_profile

 

添加django的路徑 

export PATH=$HOME 在此部分添加,用冒號隔開,具體格式請搜索 $PATH

 

若是在本地瀏覽器鍵入ip地址(*.*.*.*:8000)或域名(*.com:8000)不能訪問,須要更改django項目的settings.py設置

 

vim /home/mysite/mysite/settings.py

 

進入編輯模式 把 ALLOWED_HOSTS = [] 改成 ALLOWED_HOSTS = ['*']

 

返回manage.py所在文件夾 鍵入 python3 manage.py runserver 0.0.0.0:8000

 

打開本地瀏覽器進行訪問,確保你的項目能夠工做。

 

用uwsgi運行你的項目

 

在終端輸入  uwsgi --http :8000 --module mysite.wsgi

 

用本地瀏覽器進行訪問,若是訪問正常,證實 web客戶端-uwsgi-django 的鏈接是正常的

 

安裝nginx

 

下載       wget http://nginx.org/download/nginx-1.14.1.tar.gz

 

解壓  tar -xzvf nginx-1.14.1.tar.gz

 

進入解壓所得文件夾 cd nginx-1.14.1/

 

配置      ./configure

 

編譯安裝  make && make install

 

啓動nginx,/usr/local/nginx/sbin/./nginx  若是出現  welcome to nginx!  則證實安裝成功

 

爲你的站點配置nginx

 

將/usr/local/nginx/conf目錄下的uwsgi_params文件複製到你的項目目錄

 

cp /usr/local/nginx/conf/uwsgi_params /home/mysite/

 

建立mysettings文件夾 mkdir /home/mysettings

 

建立一個名爲mysite_nginx.conf的文件(能夠在任意路徑,只要你能找到,這裏我把它放在 /home/mysettings/)

 

vim /home/mysettings/mysite_nginx.conf

 

具體配置以下:

 

upstream django {
    # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
    server 127.0.0.1:8001; # for a web port socket (we'll use this first)
}

# configuration of the server
server {
    # 你的網站監聽的端口,此處先用8000端口測試,正式部署能夠改成80
    listen      8000;
    # 你的網站的域名
    server_name *.com; # substitute your machine's IP address or FQDN
    charset     utf-8;

    # max upload size
    client_max_body_size 75M;   # adjust to taste

    # Django media
    location /media  {
        alias /home/mysite/media;  # 你的media的文件目錄
    }

    location /static {
        alias /home/mysite/collected_static; # 你的項目收集的靜態文件目錄(後邊會將收集靜態文件)
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass  django;
        include     /home/mysite/uwsgi_params; # uwsgi_params 文件所在目錄
    }
}

 

這個配置文件告訴nginx提供來自文件系統的媒體和靜態文件,以及處理那些須要Django干預的請求。對於一個大型部署,讓一臺服務器處理靜態/媒體文件,讓另外一臺處理Django應用,被認爲是一種很好的作法,如今這樣就行了。

 

如今,讓nginx的根文件載入你的mysite_nginx.conf配置的信息

 

vim /usr/local/nginx/conf/nginx.conf

 

加入 include       /home/mysettings/*.conf;

 

如今基本配置已經ok

 

部署靜態文件

 

在運行nginx以前,你必須收集全部的Django靜態文件到靜態文件夾裏

 

編輯項目的settings   vim /home/mysite/mysite/settings.py

 

添加  STATIC_ROOT = os.path.join(BASE_DIR, "collected_static/")

 

而後運行 python3 manage.py collectstatic

 

基本的nginx測試

 

重啓nginx  /usr/local/nginx/sbin/./nginx -s reload

 

要檢查是否正確的提供了媒體文件服務,上傳一張圖片(這裏我上傳的文件爲 1.jpg)到 /home/sysite/media文件夾中

 

而後訪問http://example.com:8000/media/1.jpg - 若是這能正常工做,那麼至少你知道nginx正在正確的提供文件服務。

 

最好將你的nginx先中止, 再開啓,而不是重載。

 

nginx和uwsgi以及test.py

 

到剛纔test.py的文件夾 uwsgi --socket :8001 --wsgi-file test.py

 

這幾乎與以前相同,除了此次有一個選項不一樣:socket :8001 使用uwsgi協議,端口爲8001

 

同時,已經配置了的nginx在8000端口與uWSGI通訊,而對外使用8000端口,訪問:

 

在本地瀏覽器  *.*.*.*:8000    *.com:8000

 

若是正常顯示內容,則說明 web客戶端--web服務器--the socket--uwsgi--python的鏈接是正常的

 

使用Unix socket而不是端口

 

(此部分我部署時出現問題,因此我跳過這部分的說明,具體能夠看官方文檔

 

使用uwsgi和nginx運行django應用

 

進入項目文件夾後運行  uwsgi --socket :8001 --module mysite.wsgi

 

這時候應該能完整地看到你的網站

 

配置uWSGI以容許.ini文件

 

咱們能夠將用在uWSGI上的相同的選項放到一個文件中,而後告訴 uWSGI使用該文件運行。這使得管理配置更容易。

 

建立一個名爲mysite_uwsgi.ini的文件:

[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /home/mysite
# Django's wsgi file
module          = mysite.wsgi:application
# the virtualenv (full path)
home            = /path/to/virtualenv  #到你虛擬環境的路徑,沒有虛擬環境能夠註釋掉

# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10
# the socket (use the full path to be safe
socket          = 127.0.0.1:8001
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true

而後使用這個文件運行uswgi:

uwsgi -d --ini mysite_uwsgi.ini

參數 -d 爲後臺運行。

此時你的django項目已經部署成功。Congratulations!

相關文章
相關標籤/搜索