部署flask hello world到阿里云服务器
在阿里云上部署flask项目,需要三步:
1.配置阿里云
2.配置gunicorn
3.配置nginx
阿里云的配置
基于centos-7.4系统(阿里云实例),使用 Gunicorn + Nginx 进行布署,云服务器为阿里云
你的阿里云服务器会有一个实例,需要做一些配置
登录阿里云
如果忘了你的密码或者用户名,就给阿里云的客服打电话吧,他会给你安排的明明白白的。
点击控制台
找到你的实例(如果你之前买好了,注意你在哪个区)
配置安全组
我们部署的时候,nginx会用到80端口,gunicorn会用到5000端口,所以需要提前配置一下
按照这个格式把80和5000端口配置好
在自己的虚拟机上搭建一个小项目
工程项目代码
helloworld.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'hello world'
if __name__ == '__main__':
app.run()
gunicorn
搭建好以后跑一下,没问题的话就可以。但是这是基于falsk自带的web服务器,所以在阿里云上要用gunicorn来代替,它能让你的程序跑起来。
安装
pip install gunicorn
使用gunicorn 启动工程
通过命令行启动它
gunicorn -w worker数量 -b ip:端口号 运行文件名:flask实例名
例:
gunicorn -w 3 -b 127.0.0.1:5000 helloworld:app
这里说明一下
后台运行
gunicorn -D -w 3 -b 127.0.0.1:5000 helloworld:app
gunicorn命令的参数:
- D 表示后台运行
- w 表示有3 个 工作线程(感觉有些类似 nginx 的 master-worker 模型)
- b 指定ip 和端口
- 这里采用本机访问, 主要是为了使用nginx 进行代理, 方便管理
- application 表存放 写着全局变量 app 的那个工程文件夹
- 在我们的这个工程中, 即包含 init.py 的那个文件
- app 为全局变量 (app = Flask(__name__))
- ps: 在下面图示文件夹中运行 gunicorn 指令
到达这一步,可以在linux服务器本地上访问(127.0.0.1:8000)
注意:如果想通过本地Windows访问的话,还需安装nginx,把ip改为阿里云的公网的ip.
nginx
详细流程参考 https://www.runoob.com/linux/nginx-install-setup.html
nginx安装
cd /usr/local/src
wget http://nginx.org/download/nginx-1.1.10.tar.gz
tar -zxvf nginx-1.1.10.tar.gz
cd nginx-1.1.10
./configure
make
make install
nginx配置
1.安装完的nginx 在 /usr/local/nginx 目录下, 我们可以找到conf文件夹下的 nginx.conf 文件, 将其修改
2.添加nginx 需要监听的端口信息
server {
listen 8001;
server_name localhost;
location /{
proxy_pass http://127.0.0.1:5000; }
}
实际上, 我们将外部通过 8088 端口发送过来的请求, 代理给了 127.0.0.1:5000 也就是我们的 flask 项目
部署项目时 请求流程
Client <===> Nginx <===> gunicorn <===> Flask服务
记得修改完配置文件,需要重新载入配置文件!!!
检查配置文件nginx.conf是否正确
$ /usr/local/nginx/sbin/nginx -t
启动nginx
$ /usr/local/nginx/sbin/nginx
nginx其他命令
$ /usr/local/nginx/sbin/nginx -s reload # 重新载入配置文件
$ /usr/local/nginx/sbin/nginx -s reopen # 重启nginx
$ /usr/local/nginx/sbin/nginx -s stop # 停止nginx
nginx快速停止
$ ps -ef | grep nginx #查看进程号
$ kill -9 25276 #杀死进程
$ pkill -9 nginx # 强制停止
小结
将要部署的项目上传至服务器,安装gunicorn,开启gunicorn,在服务器本地上调通url。然后在阿里云上安装nginx,编辑配置文件,
开启nginx,通过公网ip访问一下看看是否成功。
快速开启服务样例
开启gunicorn
#在启动脚本所在路径下
cd /root/homework/flask_test
gunicorn -D -w 3 -b 127.0.0.1:5000 api_server:app
开启nginx
#在/usr/local/nginx路径下
sbin/nginx