轉(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 *