阿里云部署Flask+Nginx+gunicorn实现外网访问
一、购买云服务器ECS
9.5元一个月真香
操作系统选Ubuntu
二、服务器配置
远程连接推荐用阿里云自带的,用putty的话后面gunicorn连接的时候老是有蜜汁错误
然后添加新用户,改python3,升级pip,改pip源啥的就不具体说了
三、添加Flask工程
main.py
from flask import Flask
app = Flask(__name__)
@app.route(\'/\')
def hello_world():
return \'Hello World!\'
if __name__ == \'__main__\':
app.run()
requirements.txt
click==7.1.1
Flask==1.1.2
itsdangerous==1.1.0
Jinja2==2.11.1
MarkupSafe==1.1.1
Werkzeug==1.0.1
目录结构:
- main.py
/home/xxx/code/helloflask -
- requirements.txt
四、创建虚拟环境
pip install virtualenv
cd /home/xxx/code/helloflask
virtualenv venv
这样就在helloflask文件夹下创建了叫venv的虚拟环境
进入虚拟环境:
source venv/bin/activate
五、安装依赖
pip install -r requirements.txt
六、运行一下看看
python main.py
正常运行,安心退出程序
七、gunicorn
pip install gunicorn
然后就能用gunicorn运行程序了:
gunicorn -w worker数量 -b ip:端口号 运行文件名:flask实例名
例:
gunicorn -w 3 -b 127.0.0.1:5000 main:app
八、外网访问
在阿里云服务器管理控制台中,左边那一栏中找到网络与安全-安全组
添加安全组规则:
https://help.aliyun.com/document_detail/25475.html?spm=5176.2020520101.0.0.25b84df5shveJP#allowHttp
改这三个地方就行
建议开放80端口和任何你想开放的端口
80端口是HTTP端口
访问xxx.xxx.xxx.xxx:80 = 访问http://xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx是公网ip)
然后在终端中
gunicorn -w 3 -b 0.0.0.0:8080 main:app
这样就能在外网访问xxx.xxx.xxx.xxx:8080了
其他端口同理
九、Nginx
sudo apt-get install nginx
sudo rm /etc/nginx/sites-available/default
sudo vim /etc/nginx/sites-available/default
然后输入
server {
listen 80;
server_name xxx.xxx.xxx.xxx; # 公网ip
location /{
proxy_pass http://127.0.0.1:5000; }
}
保存退出
:wq
这样当执行
gunicorn -w 3 -b 127.0.0.1:5000 main:app
的时候,也能通过访问xxx.xxx.xxx.xxx来访问网站
十、绑定域名
买了域名后,域名解析下就行
域名解析中记录值填公网ip
接着访问域名就跟访问公网ip效果一样了
接着就会发现没有备案不让你访问啦
接着就是漫长的等备案