轉(zhuǎn)載大家請注明出處:小成吉思汗的創(chuàng)作世界
(http://www.reibang.com/p/cafe0bf74fad)
第一次寫博客大家不要見笑,說一下寫這篇文章的初衷厅翔,這段時間自己用Python搞了一個Web項目需要部署到服務(wù)器乖坠,那么問題來了,如何部署刀闷?
老辦法熊泵,百度一下仰迁,搜出來的答案五花八門并且不全。
本片文章會給大家分享從0到1的過程顽分,并把在這個過程中遇到的問題和解決辦法分享給大家徐许,有不妥之處,歡迎留言指正卒蘸。
Python3.6.8的安裝
1雌隅、為了保險起見,在安裝Python之前缸沃,需要先安裝一些依賴包恰起,如果你不確定你機器上有沒有安裝,執(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進行備份,
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哄芜、進行安裝
#操作路徑要在/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就安裝完成了蕊温。我們準備進入下一個環(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)開機啟動使用以下命令
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庫不一樣前计,項目所需要的庫都需要進行安裝。
下面進入環(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
# 允許存在主進程
master = true
# 開啟進程數(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默認使用的是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皇忿,保持默認就ok。
uwsgi_pass 127.0.0.1:9000;即當(dāng)nginx收到8089端口的請求時坦仍,直接將請求轉(zhuǎn)發(fā)給 127.0.0.1:9000鳍烁。
uwsgi啟動django
# 進入項目根目錄
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 命令
#進入到項目根路徑/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
#進入到這個目錄后 可以看到所有數(shù)據(jù)庫,然后進入到mysite項目的數(shù)據(jù)庫跳纳,加入叫mysiteDB忍饰,然后進行以下操作
chown mysql.mysql *