阿里云部署:Flask+ Nginx + Gunicorn
最近开始学习
FLASK
,虽然有ubuntu
虚拟机,但是外出实习笔记本不方便携带,手上正好有一台阿里云服务器配有Centos环境
,所以想在阿里云上部署然后方便学习。
先看看成功后的图:实现利用公网ip
进行访问
项目布局
仅用于进行测试,不是全部项目
项目布局以Flask官方文档推荐的为主
Flask环境安装
推荐使用虚拟环境进行安装
-
创建项目文件夹并创建虚拟环境
mkdir flask-tutorial cd flask-tutorial python3 -m venv venv
-
激活虚拟环境
. venv/bin/activate
-
安装Flask
pip install Flask
gunicorn
安装
-
gunicorn
安装pip install gunicorn
-
创建一个简单的测试文件
test.py
来看看gunicorn
是否安装成功# test.py from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "<h1>Hello World</h1>"
尝试运行:
gunicorn -w 4 -b 127.0.0.1:5000 test:app
若没有报错即为成功安装,根据提示
ctrl + c
退出- -w 4 :表示 4 个进程
- -b 127.0.0.1:5000 :表示flask使用5000端口
test:app
:test为程序名,app为flask的实例对象
nginx
环境安装
-
安装
sudo yum install nginx
-
配置文件
vim /etc/nginx/conf.d/default.conf
配置文件如下:
server { listen 80; server_name 你的服务器的ip地址; location / { proxy_pass http://127.0.0.1:5000; } }
-
重启
systemctl restart nginx.service nginx -s reload
配置web访问端口
-
设置
iptables
-
安装
yum install iptables-services
-
修改配置文件
vim /etc/sysconfig/iptables
-
加入以下配置项
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-
重启服务
systemctl restart iptables
-
-
配置防火墙
firewall
-
启动
systemctl start firewalld
-
配置
firewall-cmd --add-port=80/tcp --permanent
-
重启
systemctl restart firewalld
-
查看是否配置成功
firewall-cmd --list-all
-
-
在阿里云控制台里配置安全组
运行test.py
gunicorn -w 4 -b 127.0.0.1:5000 test:app
通过http://你的服务器ip地址:80
就可以访问了,能看到 hello world 就成功了
🛑但是,到目前为止,我们所运行的只是一个单一的小程序而不是工程项目,而本文的重点是工程项目的配置
工程项目
-
创建
flaskr
目录,并创建__init__.py
mkdir flaskr cd flaskr
# __init__.py import os from flask import Flask def create_app(test_config = None): # Create and configure the app app = Flask(__name__, instance_relative_config = True) app.config.from_mapping( SECRET_KEY = 'dev', DATABASE = os.path.join(app.instance_path, 'flaskr.sqlite'), ) if test_config is None: app.config.from_pyfile('config.py', silent=True) else: app.config.from_mapping(test_config) try: os.makedirs(app.instance_path) except OSError: pass @app.route('/') def hello(): return 'Hello World' @app.route('/success') def success(): return 'Gqq, you have successed to deploy the environment.' from . import db db.init_app(app) return app
-
如果按照上面的经验访问应该是
gunicorn -w 4 -b 127.0.0.1:5000 flaskr.__init__:create_app
,然而这出错了,所以不能对gunicore
进行简单的参数设置 -
创建
server.py
用来配置from flaskr.__init__ import create_app if __name__ == '__main__': create_app = create_app() create_app.run() else: gunicorn_app = create_app()
-
执行命令
gunicorn -w 4 -b 127.0.0.1:5000 server:gunicorn_app
此时,便可以成功运行啦。
建议把上述命令放大
bash.sh
中,之后只需执行. bash.sh
就可以不用记住那么长的命令
一个不错软件
为了方便远程连接服务器,在本地下载
MobaXterm
非常好用便捷,比Xshell
好用多了
本文参考:
Write by
Gqq