阿里云部署Flask+Nginx+gunicorn实现外网访问 - HolaWorld

时间:2024-03-08 22:06:46

阿里云部署Flask+Nginx+gunicorn实现外网访问

一、购买云服务器ECS

https://promotion.aliyun.com/ntms/act/campus2018.html?spm=5176.8789780.7y9jhqsfz.78.249255caHyINh9&aly_as=7OJ4QMucX

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效果一样了
接着就会发现没有备案不让你访问啦
接着就是漫长的等备案