新弄了一臺(tái)阿里云的主機(jī),于是琢磨這把原有的一個(gè)Flask寫項(xiàng)目遷移過(guò)來(lái),下面總結(jié)下部署的步驟。
一,購(gòu)買服務(wù)器
在阿里云上購(gòu)買一臺(tái)Ubuntu系統(tǒng)的主機(jī),獲得一個(gè)外網(wǎng)ip,本機(jī)ssh連接到主機(jī)
- ping 外網(wǎng)ip 提示 Request timeout
1. 進(jìn)入阿里云后臺(tái)配置安全組規(guī)則
2. 添加協(xié)議 ICMP
- ssh無(wú)法通過(guò)帳號(hào)root登錄
1. cat /etc/ssh/sshd_config
2. 修改PasswordAuthentication no
3. 重啟/bin/systemctl restart sshd.service
二,安裝virtualenv
該臺(tái)服務(wù)器準(zhǔn)備用于部署多個(gè)應(yīng)用,需要各自擁有一套獨(dú)立的Python運(yùn)行環(huán)境,對(duì)每個(gè)應(yīng)用的Python環(huán)境進(jìn)行隔離
sudo pip install virtualenv
三,創(chuàng)建Flask項(xiàng)目應(yīng)用
項(xiàng)目目錄一般放在/home文件夾下。創(chuàng)建一個(gè)yys_server的項(xiàng)目,同時(shí)始化項(xiàng)目虛擬環(huán)境
mkdir /home/yys_server
virtualenv venv
. venv/bin/activate
使用git clone上傳應(yīng)用程序到服務(wù)器中,并安裝項(xiàng)目依賴
git clone http://url/of/you/git/repo
pip install -r requirements.txt
其中我的項(xiàng)目代碼
from flask_script import Manager
from app.api import api
import os
manager = Manager(api)
@manager.command
def runserver():
port = int(os.environ.get('PORT', 33333))
api.run(host='0.0.0.0', port=port)
if __name__ == "__main__":
manager.run()
執(zhí)行python manage.py runserver,在瀏覽器輸入公網(wǎng)ip地址,加端口號(hào)33333即可成功訪問(wèn)。
四,安裝 uwsgi服務(wù)器
由于Flask自帶的wsgi性能低下,生產(chǎn)環(huán)境中使用uwsgi作為服務(wù)器
# 安裝uwsgi
sudo pip install uwsgi
# 新建配置文件`/home/yys_server/uwsgi.ini`
[uwsgi]
wsgi-file = manage.py
module = runserver
callable = api
master = true
processes = 3
chdir = /home/yys_server
socket = /var/sock/yys.sock
chmod-socket = 666
vacuum = true
buffer-size = 232768
uid = www-data
gid = www-data
# 創(chuàng)建目錄,用于存放uwsgi啟動(dòng)后生成的sock文件,用來(lái)和Nginx 通信
sudo mkdir /var/sock
# 根據(jù)uwsgi.ini配置修改文件夾的所有權(quán)
sudo chown -R www-data:www-data /var/sock
執(zhí)行uwsgi uwsgi.ini即可通過(guò)服務(wù)器訪問(wèn)應(yīng)用
五,安裝Supervisor
上面命令運(yùn)行uwsgi的方式,如果進(jìn)程異常退出后,服務(wù)就無(wú)法訪問(wèn),使用supervisor來(lái)管理進(jìn)程,對(duì)異常終端的服務(wù)進(jìn)行自動(dòng)重啟
apt-get install supervisor
/etc/supervisor/conf.d/*.conf
它的配置路徑在/etc/supervisord/supervisord.conf, 項(xiàng)目的配置文件在/etc/supervisor/conf.d目錄下,新建一個(gè)yys.conf文件
# /etc/supervisor/conf.d/yys.conf
[program:yys]
autorestart=True
autostart=True
redirect_stderr=True
;environment=PATH="/home/yys_server/venv"
;command=python manage.py runserver
command=uwsgi uwsgi.ini
user=www-data
directory=/home/yys_server/
配置后即可啟動(dòng)項(xiàng)目
service supervisor start
六,安裝Nginx作為反向代理
apt-get install nginx
項(xiàng)目nginx的配置文件在/etc/nginx/conf.d目錄下,新建一個(gè)yys.conf文件
server {
listen 33333;
server_name 120.79.81.232;
charset utf-8;
client_max_body_size 75M;
location / { try_files $uri @yys; }
location @yys {
include uwsgi_params;
uwsgi_pass unix:/var/sock/yys.sock;
}
}
配置表明Nginx會(huì)將收到的端口為33333的所有請(qǐng)求都轉(zhuǎn)發(fā)到uwsgi服務(wù)器上
# 重啟nginx服務(wù)器
service nginx restart
大功告成~~~