雲伺服器Centos上傳和部署Flask專案的完整過程(Mac)
查詢過不少關於flask部署Centos的教程,但在操作過程中總有各種問題無法成功,最後參考以下部落格的文章完成上傳和部署。這也是第一次部署Python Flask專案,記錄下完整過程,也是提供給其他較為基礎的新手參考借鑑。
相關環境和資訊:
- 開發環境:Mac系統 | PyCharm CE
- 雲主機:京東雲(阿里雲都一樣) | Centos 7.3
- Mysql
- Nginx
- Eventlet
- Flask
- Socket.io
參考文章連結:
以下為完整步驟。
1、連線雲主機(伺服器)
Mac電腦,開啟終端視窗
輸入連線命令:22為埠號, 120.0.44.91為雲主機的公網IP
ssh -p 22 [email protected]
然後輸入密碼後就進入了雲主機
2.1、安裝Python3.6
以下的操作主要參考來源:https://www.cnblogs.com/Sugar-Chl/articles/9497901.html
安裝依賴包
yum -y groupinstall "Development tools" yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
根據自己需求下載不同版本的Python3,我下載的是和參考博文的中Python3.6.2
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz #其他版本地址:https://www.python.org/ftp/python/
存放目錄是/usr/local/python3,使用命令建立一個空資料夾:
mkdir /usr/local/python3
,然後解壓壓縮包
tar -xvJf Python-3.6.2.tar.xz
進入該目錄
cd Python-3.6.2
安裝Python3
./configure --prefix=/usr/local/python3
make && make install
安裝完後會提示安裝好了pip等工具,出現“successfully installed”等字樣。
到此為止,Python3.6已經安裝好了。
由於centos7 中自帶的python的版本是python2,而現在很多包只支援python3 ,所以我們要安裝虛擬環境,在虛擬環境中的python版本是3.6,然後我們要安裝virtualenv(python環境隔離工具)。
注意:
之後我們的flask的部署以及python包的下載都要在這個虛擬環境中進行!每次重新遠端連線centos的時候都要記得進去虛擬環境後再操作。
2.2、安裝virtualenv
以下的操作主要參考來源:https://www.cnblogs.com/Sugar-Chl/articles/9497901.html
如果出現pip使用的問題
-bash: pip: 未找到命令
解決方式參考:https://www.cnblogs.com/xueweihan/p/5133893.html
export PATH=$HOME/bin:/usr/local/bin:$PATH # 在這一行增加python的bin路徑,如下 export PATH=$HOME/bin:/usr/local/python3/bin:/usr/local/bin:$PATH
開始安裝virtualenv,我這裡安裝後使用的是pip3
pip3 install virtualenv
建立python3獨立環境
virtualenv -p /usr/local/python3/bin/python3.6 /py3env
進去python3獨立環境,開頭會出現"(py3env)",表示進入了環境
source /py3env/bin/activate
可以使用以下命令來驗證Python版本
python -V
當然,如果要退出python3的獨立環境,命令為
deactivate
到此為止,python3的安裝以及獨立環境的安裝完成了。
2.3、安裝Mysql
以下的操作主要參考來源:https://blog.csdn.net/wszll_alex/article/details/76285324
下載mysql的repo源
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
安裝mysql-community-release-el7-5.noarch.rpm包
rpm -ivh mysql-community-release-el7-5.noarch.rpm
安裝MYSQL
sudo yum install -y mysql-server
更改MYSQL使用者許可權
sudo chown -R root:root /var/lib/mysql
重啟服務
systemctl restart mysql.service
登入,並修改密碼,這裡的 update user set password=password(‘123456‘) where user=‘root‘; 語句中,將‘123456‘修改為自己的密碼
mysql -u root mysql > use mysql; mysql > update user set password=password(‘123456‘) where user=‘root‘; mysql > flush privileges; mysql > exit;
到此為止,Mysql的安裝和賬號配置基本完成。
2.4、安裝Nginx
以下的操作主要參考來源:https://blog.csdn.net/wszll_alex/article/details/76285324
下載對應當前系統版本的nginx包
wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
建立nginx的yum倉庫(預設yum是沒有nginx的)
rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm
下載並安裝nginx
yum install -y nginx
啟動nginx
systemctl start nginx.service
到此為止,nginx的安裝完成。
3、上傳flask專案檔案至伺服器
以下的操作主要參考來源:https://blog.csdn.net/ludongdong/article/details/78524653
該命令要另開一個命令視窗,由mac電腦本地上傳到伺服器,不能是在連線到伺服器的命令視窗執行,不然會出現 No such file or directory。
-r 表示資料夾上傳
/Users/leaf/Documents/pythonProject/ENV3.6/bin/TestDemo 為將專案檔案的完整路徑
[email protected]:/usr/local/python3/bin 為伺服器專案檔案的存放位置
scp -r /Users/leaf/Documents/pythonProject/ENV3.6/bin/TestDemo [email protected]:/usr/local/python3/bin
到此為止,專案檔案上傳就完成了。
4、安裝Python包
以下的操作主要參考來源:https://www.cnblogs.com/Sugar-Chl/articles/9497901.html
進入python3的bin目錄下,安裝
cd /usr/local/python3/bin
yum install mysql-devel gcc gcc-devel python-devel
進去python3獨立環境,並進入之前上傳的專案檔案根目錄中
source /py3env/bin/activate
安裝專案中 requirements.txt 檔案的依賴包
pip3 install -r requirements.txt
到此為止,Python包以及專案中所需的依賴包就都安裝完成了。
5、建立Mysql資料庫和除錯Mysql指令碼檔案
請參考來源:https://www.cnblogs.com/Sugar-Chl/articles/9497901.html
這裡就簡單的建立一個數據庫
輸入命令進入Mysql
mysql -u root -p
然後輸入密碼,建立資料庫
mysql> create database tod;
退出命令
mysql> exit;
更多Mysql操作和指令可以自行網上查詢。
6、安裝gunicorn
請參考來源:https://www.cnblogs.com/Sugar-Chl/articles/9497901.html
安裝命令
pip install gunicorn
7、配置nginx
參考連結:https://www.jianshu.com/p/d81397edd2b1
參考連結:https://www.cnblogs.com/Ray-liang/p/4837850.html
使用nginx作為反向代理伺服器,nginx代理HTTP和websocket請求的一個最基本的配置:
首先進入nginx的檔案目錄下
cd /etc/nginx
然後建立和修改proxy_params檔案
vi proxy_params
進入檔案內,敲按鍵"i"視窗左下角就會出現"INSET",表示可以對內容進行插入和刪除操作
內容填寫如下,具體內容可以根據需要進行修改
proxy_redirect default; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffer_size 32k; proxy_buffering on; proxy_buffers 4 128k; proxy_busy_buffers_size 256k; proxy_max_temp_file_size 256k;
按鍵“Esc”可退出該模式,並且輸入":"冒號後,輸入"wq"表示儲存並退出,輸入"q"表示不儲存直接退出,這裡我們選擇儲存退出。(具體這些檔案操作命令和方法可以另行網上查詢)
然後進入nginx的配置檔案
cd /etc/nginx/conf.d
修改 default.conf(可以先對該檔案進行備份後再進行修改操作,以避免誤操作)
vi default.conf
參考上面的方式,按鍵"i"進行修改和儲存操作,這裡只對以下內容進行修改,具體根據需要進行調整
http://192.168.0.11:5000 是內網IP加埠,我這裡由於還有使用socketio,用的埠號是5000
server { listen 80; server_name _;# 這是HOST機器的外部域名,用地址也行 location / { proxy_pass http://192.168.0.11:5000;# 這裡是指向 gunicorn host 的服務地址 include proxy_params; } location /socket.io { proxy_pass http://192.168.0.11:5000/socket.io; include proxy_params; } }
按鍵“Esc”,並且輸入":"冒號後,輸入"wq"儲存並退出。
最後:
記得修改完成 nginx, 需要重新啟動 nginx 服務
sudo service nginx restart
到此為止,nginx的配置就完成了。
8、執行Flask專案
請參考來源:https://www.cnblogs.com/Sugar-Chl/articles/9497901.html
執行命令
gunicorn -w 3 -b x.x.x.x:8000 manage:app
注意把x.x.x.x替換成內網ip地址,如
gunicorn -w 3 -b 192.168.0.11:8000 manage:app
如果專案中需要部署socketio,還要配合eventlet或者gevent,我這裡使用的是eventlet
參考連結:https://www.jianshu.com/p/d81397edd2b1
- -D --daemon 表示和終端脫離並執行在後臺
- --reload 表示在程式碼改變時自動重啟
gunicorn --daemon --worker-class eventlet --reload -w 1 -b 192.168.0.11:5000 app:app
外網想要訪問你的flask網站,公網的IP地址就行了
http://X.X.X.X:8000
是的,到這一步,Flask專案的上傳和部署就已經完成了!!!
PS:
如果要停止這個程式的執行
ps -aux | grep gunicorn
檢視程序,然後kill掉這些程序就好了。
如果上面的結束gunicorn不行,使用下面的方式
pstree -ap|grep gunicorn
出現
退出Gunicorn任務,kill掉執行的任務程序
kill -9 1492
如果是要重啟Gunicorn任務,則是
kill -HUP 1492
如果出現 “-bash: pstree: 未找到命令”問題,則安裝pstree即可
yum install psmisc
留在最後:
如果重新連線伺服器,記得要進入獨立環境後再操作!
source /py3env/bin/activate