摘要#
看了许多视频、博客甚至一些关于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作为项目的域名。
开始部署#
- 在云服务器上安装依赖
你需要的包括但不限于
python,nginx,gunicorn
apt install nginx- 拉取你的项目
你需要从你的远程仓库拉取项目到服务器上。我的希望后续会部署更多的工具,所以我的项目路径放在了
/root/app/tools/my-flask-app-demo/
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正经教程#
- 登录你的服务器
如果是使用pem登陆的话,
ssh -i /path/to/your-pem my-user@my-server进去之后我选择了更改用户,所以我新建了用户
adduser sepine让服务器可以通过password登录
nano /etc/ssh/sshd_config
# 把PasswordAuthentication no改成PasswordAuthentication yes
# 重启ssh服务
systemctl restart sshd.service退出服务器,重新登录(记得把IP与域名先链接上)
ssh sepine@my-domain- 克隆项目到本地
这里假设你的项目远程仓库是https://github.com/sepinetam/wCloud-WebApp.git
mkdir app/wcloud
cd app/wcloud
git clone https://github.com/sepinetam/wCloud-WebApp.git- 安装虚拟环境
为了管理方便,我这里采用的虚拟环境的路径在~/env/wcloud, 即/home/sepine/env/wcloud
python3 -m venv ~/env/wcloud
source ~/env/wcloud/bin/activate
cd ~/app/wcloud
pip install -r requirements.txt到这里先简单做个测试。
python3 app.py在浏览器中输入http://my-domain:5000/,如果看到页面,说明部署成功。