0%

指北·flask-app部署

摘要

看了许多视频、博客甚至一些关于flask的书,都没给我一个很好的解决方案,最终的解决方案是在YouTube上的一个老哥的视频,这篇文章主要是把视频的内容按照我的理解变成文字形式.

主要解决了nginx和flask的结合问题,并针对404和502的问题提出了解决方案。

开始部署

准备工作

  • GitHub账号(或者gitee)——托管你的flask-app代码
  • 云服务器(这里采用ubuntu,供应商采用了阿里云)
  • 你的域名(可选)

flask-app代码

为了尽可能的保持一致,我在这里提供一个示例的demo,你也可以在我的GitHub上下载,或者点击这个链接下载。

将示例代码或者你的flask-app放在你的GitHub账号上,以我的示例为例,项目的地址为https://github.com/sepinetam/my-flask-app-demo

云服务器

这里我采用的是阿里云的服务器,操作系统为ubuntu。

PS:Azure学生可以有一台免费的云服务器,Amazon也提供了一年免费的服务器。

域名

我在阿里云购买的域名为sepinetam.com,因为我想搭建的是一个小工具,所以使用了子域名tools.sepinetam.com作为项目的域名。

开始部署

  1. 在云服务器上安装依赖
    你需要的包括但不限于python,nginx,gunicorn

    1
    apt install nginx
  2. 拉取你的项目
    你需要从你的远程仓库拉取项目到服务器上。我的希望后续会部署更多的工具,所以我的项目路径放在了/root/app/tools/my-flask-app-demo/

    1
    2
    3
    4
    5
    6
    7
    cd /root
    mkdir app/tools
    cd app/tools
    # 如果你的app不需要更新也可以直接clone项目,地址换成你自己的项目地址
    # git clone https://github.com/sepinetam/my-flask-app-demo.git
    git pull https://github.com/sepinetam/my-flask-app-demo.git


正经教程

  1. 登录你的服务器

如果是使用pem登陆的话,

1
ssh -i /path/to/your-pem my-user@my-server

进去之后我选择了更改用户,所以我新建了用户

1
adduser sepine

让服务器可以通过password登录

1
2
3
4
nano /etc/ssh/sshd_config
# 把PasswordAuthentication no改成PasswordAuthentication yes
# 重启ssh服务
systemctl restart sshd.service

退出服务器,重新登录(记得把IP与域名先链接上)

1
ssh sepine@my-domain
  1. 克隆项目到本地

这里假设你的项目远程仓库是https://github.com/sepinetam/wCloud-WebApp.git

1
2
3
mkdir app/wcloud
cd app/wcloud
git clone https://github.com/sepinetam/wCloud-WebApp.git
  1. 安装虚拟环境

为了管理方便,我这里采用的虚拟环境的路径在~/env/wcloud, 即/home/sepine/env/wcloud

1
2
3
4
5
python3 -m venv ~/env/wcloud
source ~/env/wcloud/bin/activate

cd ~/app/wcloud
pip install -r requirements.txt

到这里先简单做个测试。

1
python3 app.py

在浏览器中输入http://my-domain:5000/,如果看到页面,说明部署成功。