centos7.4+Python3.6.8+Django2.1.5+Nginx1.12.2+uWSGI2.0.17.1搭建部署PythonWeb項目

轉(zhuǎn)載大家請注明出處:小成吉思汗的創(chuàng)作世界
http://www.lxweimin.com/p/cafe0bf74fad

第一次寫博客大家不要見笑,說一下寫這篇文章的初衷,這段時間自己用Python搞了一個Web項目需要部署到服務(wù)器,那么問題來了,如何部署?

老辦法,百度一下,搜出來的答案五花八門并且不全。

本片文章會給大家分享從0到1的過程,并把在這個過程中遇到的問題和解決辦法分享給大家,有不妥之處,歡迎留言指正。

Python3.6.8的安裝

1、為了保險起見,在安裝Python之前,需要先安裝一些依賴包,如果你不確定你機(jī)器上有沒有安裝,執(zhí)行下面命令。

yum groupinstall 'Development Tools'
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel

2、對系統(tǒng)自帶的Python2.7.5進(jìn)行備份,

cd /usr/bin
mv python python.bak

3、下載python3.6.8的源碼壓縮文件和pip工具

#創(chuàng)建安裝路徑,也可以換成你自己創(chuàng)建的目錄
mkdir -p /usr/local/python/python3
#操作路徑 /usr/local
wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
wget https://bootstrap.pypa.io/get-pip.py

4、解壓源碼壓縮包

#操作路徑  /usr/local
tar -zxvf Python-3.6.8.tgz

5、編譯安裝環(huán)境

#操作路徑 /usr/local/Python-3.6.8/
./configure --prefix=/usr/local/python/python3

6、進(jìn)行安裝

#操作路徑要在/usr/local/Python-3.6.8
make && make install

7、設(shè)置Python軟連接

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

8、驗證是否安裝成功

python -V
輸出下方信息,證明成功了
Python 3.6.8

9、安裝pip

#操作路徑 /usr/local
python get-pip.py

10、設(shè)置pip軟鏈接

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

注意:由于centos7的yum要使用到python2.7.5的環(huán)境,我們要指定yum使用的版本,使用3.6.8會導(dǎo)致yum命令無法使用,需要修改以下兩個文件。vi命令可以自行百度。

#第一個:
vi /usr/bin/yum
#把文件頭部的#!/usr/bin/python改成#!/usr/bin/python2.7保存退出即可。
#第二個
vi /usr/libexec/urlgrabber-ext-down
#同樣把文件頭部的#!/usr/bin/python改成#!/usr/bin/python2.7保存退出即可。

到此Python3.6.8就安裝完成了。我們準(zhǔn)備進(jìn)入下一個環(huán)節(jié)。

Django的安裝

pip3 install Django

Ngnix安裝

1、安裝Nginx存儲庫

sudo yum install epel-release

2、 安裝Nginx

sudo yum install nginx

3、啟動Nginx,如果有防火墻請關(guān)閉。

sudo systemctl start nginx

#以下為停止,重啟命令
systemctl stop nginx
systemctl restart nginx

如果要實現(xiàn)開機(jī)啟動使用以下命令

sudo systemctl enable nginx

uWgsi安裝

pip3 install uwsgi

在追加幾個uwgsi的常用命令

uwgsi --ini name.ini
uwgsi --reload name.ini
uwgsi --stop name.pid

因為我使用的市MySql數(shù)據(jù)庫,所以還需要安裝一個庫

pip3 install PyMySQL

到目前為止所有的安裝工作基本告一段落,當(dāng)然每個人項目所用的python庫不一樣,項目所需要的庫都需要進(jìn)行安裝。

下面進(jìn)入環(huán)境配置環(huán)節(jié)

uWsgi配置,配置uwsgi啟動django的參數(shù)

我的操作習(xí)慣是這樣,先假設(shè)設(shè)Django項目名字是mysite,里面模塊叫myapp,已經(jīng)把mysite項目上傳到服務(wù)器的/var/local目錄下。
在此目錄下新建一個配置文件:uwsgi_mysite.ini,編輯文件為如下內(nèi)容。

vi uwsgi_mysite.ini

[uwsgi]
# 通過uwsgi訪問Django項目需要配置成http
# 通過nginx請求uwsgi來訪問Django項目 需要配置成socket
# 9000 是Django項目的端口號
socket = :9000

# web項目根目錄
chdir = /var/local/mysite

# module指定項目自帶的的wsgi配置文件位置
module = mysite.wsgi

# 允許存在主進(jìn)程
master = true

# 開啟進(jìn)程數(shù)量
processes = 3

# 服務(wù)器退出時自動清理環(huán)境
vacuum = true

#下面兩條配置用于生成.status和.pid文件,后續(xù)關(guān)閉uwsgi時,會用到pid文件
stats=/var/local/uwsgi_forest.status           
pidfile=/var/local/uwsgi_forest.pid 

Nginx配置

nginx默認(rèn)使用的是80端口,可以修改成你自己喜歡的端口,比如8089

#修改配置文件
vi /etc/nginx/nginx.conf

server {
    listen 8089;
    listen [::]:8089;
    ...
    ...
}

systemctl restart nginx 重啟nginx,直接訪問http://ip:8089 ,看到nginx歡迎界面說明成功。

繼續(xù)配置Nginx

vi /etc/nginx/nginx.conf

···
server {
        listen       8089 default_server;
        listen       [::]:8089 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:9000;
        
        }


        location /static/ {
            alias /var/local/mysite/myapp/static;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
    ···

8089 是對外的端口號。
server_name是nginx代理uwsgi對外的ip,保持默認(rèn)就ok。
uwsgi_pass 127.0.0.1:9000;即當(dāng)nginx收到8089端口的請求時,直接將請求轉(zhuǎn)發(fā)給 127.0.0.1:9000。

uwsgi啟動django

# 進(jìn)入項目根目錄
cd /var/local/mysite

# 啟動
uwsgi --ini /var/local/uwsgi_mysite.ini

重啟Nginx

systemctl restart nginx

到現(xiàn)在可以說項目可以正常運行了,但是,但是,但是,會有一個bug,就是當(dāng)你訪問http://ip:8089/admin時,admin模塊的樣式全部丟失了,這是為什么,經(jīng)過研究,找到了解決辦法。

在mysite項目的配置文件: setting.py 中新增配置 STATIC_ROOT , 然后執(zhí)行 python manage.py collectstatic命令

#此時關(guān)于static的配置如下:
#我習(xí)慣把static與mysite項目放在同一級目錄
···
STATIC_ROOT = '/var/local/static/'
STATIC_URL = '/static/'
···

執(zhí)行 python manage.py collectstatic 命令

#進(jìn)入到項目根路徑/var/local/mysite
python manage.py collectstatic 

可以看出 python manage.py collectstatic 的作用是收集Django項目,也就是mysite項目中所有涉及到的靜態(tài)資源,統(tǒng)一放到 路徑STATIC_ROOT 管理訪問。

注意:此時還有一處需要修改,就是ngnix中配置靜態(tài)文件的目錄。

修改結(jié)果如下:

vi /etc/nginx/nginx.conf

···
server {
        listen       8089 default_server;
        listen       [::]:8089 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:9000;
        
        }


        location /static/ {
            alias /var/local/static;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
    ···

location /static/改為/var/local/static,就是剛剛我們配置的路徑。

到這里可以說我們所有的配置就已將完成了。在我配置的過程中,我重啟了服務(wù)器,發(fā)生了一個小插曲,就是mysql的1017錯誤
ERROR 1017 (HY000): Can't find file: './data_db/tabls.frm' (errno: 13 - Permission denied)

#不是表不見了,而是權(quán)限的問題
#需要切換到 tabls.frm 這個目錄下面去,我這里是 /var/lib/mysql
#進(jìn)入到這個目錄后 可以看到所有數(shù)據(jù)庫,然后進(jìn)入到mysite項目的數(shù)據(jù)庫,加入叫mysiteDB,然后進(jìn)行以下操作 

chown mysql.mysql *
ok,今天的分享與記錄就到此結(jié)束了,這是我的第一篇博客,我自己都不太相信,哈哈。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 接上一篇Python3.0 Django2.0.4 搭建項目(四),這一篇我們將為它創(chuàng)建一些自動化測試。 自動化測...
    聽話哥閱讀 675評論 1 0
  • 接上一篇Python3.0 Django2.0.4 搭建項目(三),這一篇主要是繼續(xù)完善我們的投票應(yīng)用。 編寫一個...
    聽話哥閱讀 469評論 0 1
  • 今天股指開了空倉,向下的空間真的不敢說,今天還是處于空方占優(yōu),整體來看弱的很,沒有意外消息刺激要在底部盤整幾天,股...
    股市中求索閱讀 448評論 0 0
  • 今天起床有點晚,可能是昨天在外練車有點累吧。依然是日常的看書學(xué)習(xí)。努力的培養(yǎng)自己看書的習(xí)慣,希望自己可以一...
    五指山下的悟空閱讀 170評論 0 0
  • 打開簡書,看看有沒有消息。 消息處一片空白,那個小鈴鐺在的地方?jīng)]有任何紅色的小點點。 我像是得了強(qiáng)迫癥,不停的打開...
    蘭陵酒閱讀 386評論 5 2