1. 程式人生 > >雲伺服器Centos上傳和部署Flask專案的完整過程(Mac)

雲伺服器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