查找過很多關於flask部署Centos的教程,但在操做過程當中總有各類問題沒法成功,最後參考如下博客的文章完成上傳和部署。這也是第一次部署Python Flask項目,記錄下完整過程,也是提供給其餘較爲基礎的新手參考借鑑。html
相關環境和信息:python
參考文章連接:mysql
https://www.cnblogs.com/Sugar-Chl/articles/9497901.htmlnginx
https://blog.csdn.net/wszll_alex/article/details/76285324web
https://blog.csdn.net/ludongdong/article/details/78524653sql
如下爲完整步驟。
Mac電腦,打開終端窗口
輸入鏈接命令:22爲端口號, 120.0.44.91爲雲主機的公網IP
ssh -p 22 root@120.0.44.92
而後輸入密碼後就進入了雲主機
安裝依賴包
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的時候都要記得進去虛擬環境後再操做。
若是出現pip使用的問題
-bash: pip: 未找到命令
解決方式參考:http://www.javashuo.com/article/p-ylfdrljb-dx.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的安裝以及獨立環境的安裝完成了。
下載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的安裝和帳號配置基本完成。
下載對應當前系統版本的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的安裝完成。
該命令要另開一個命令窗口,由mac電腦本地上傳到服務器,不能是在鏈接到服務器的命令窗口執行,否則會出現 No such file or directory。
-r 表示文件夾上傳
/Users/leaf/Documents/pythonProject/ENV3.6/bin/TestDemo 爲將項目文件的完整路徑
root@120.0.44.92:/usr/local/python3/bin 爲服務器項目文件的存放位置
scp -r /Users/leaf/Documents/pythonProject/ENV3.6/bin/TestDemo root@120.0.44.92:/usr/local/python3/bin
到此爲止,項目文件上傳就完成了。
進入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包以及項目中所需的依賴包就都安裝完成了。
這裏就簡單的建立一個數據庫
輸入命令進入Mysql
mysql -u root -p
而後輸入密碼,建立數據庫
mysql> create database tod;
退出命令
mysql> exit;
更多Mysql操做和指令能夠自行網上查詢。
安裝命令
pip install gunicorn
使用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的配置就完成了。
運行命令
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
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 -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