0%

笔记·部署flask app

摘要

最近在部署自己的一个项目到服务器端并链接自己的域名的时候出了一些问题,遂记录一下并整理一下。

为什么做这个项目

起初只是因为有一位社会学的同学问我有没有什么做词云的工具,想了一下发现自己之前在学python的时候做过一个项目是生成词云故二话没说告诉她我能给她写一个这样的app出来,于是就写了这个项目。(PS:当时的项目和这个不一样,那个只是纯后端python跑起来的,这次部署的时候加上了flask框架做了UI)

项目的简单介绍

wCloud

这是一个基于jieba和wordcloud制作词云的项目。

具体详见项目的README文档

wCloud-WebApp

一个基于flask和wCloud的Web App

具体详见项目的README文档

部署过程

本地调试

第一次正经自己做一个flask的app,着实是有些难度,不过好在最后还是搞定了。

最开始只是简单想着既然后端的逻辑function和script已经有了,那就直接做呗,于是让ChatGPT做了几个index.html文件,但是这家伙现在笨的要死,好在成功注册了一个Claude的账号,不得不说Claude还是有点东西的,已经开始考虑把ChatGPT的订阅转到Claude了。

本地调试面临的第一个问题就是如何上传文件。虽然说有很多的信息可以参考,但是还是一头雾水,一方面是没有前端开发的经验,另一方面这也是我第一次写flask的app项目,最后的解决还是得看自己呀,也该思考一下是不是应该更多的把思考方式从直接问AI助手到自己去找资料、搜网页来找解决方案了。(或许以后该写一个关于AI出现后我解决问题的方式的变化的文章)

结束了本地调试

本地调试搞定了,立刻把项目放到了GitHub上,然后准备第二天开始部署。

部署前

Azure&GitHub的”误导”

由于把项目存放在了GitHub上,所以第二天在打开项目的时候看到了右侧有一个部署web app到Azure。兴奋,以为这会很简单,但是我错了,这让我更加一头雾水——根本看不懂那一大堆操作,虽然有Azure的Student订阅,但是还是不了解这是怎么个回事,而且我想把项目部署到我自己的域名tools.sepinetam.com上,于是又去搜了一下,发现Azure的Web App和GitHub的Pages是两个不同的东西,学习成本突然高了起来。遂思考部署到我自己的服务器上——我在Azure、AliCloud、Amazon上都拥有一台EC2实例,最后选择了阿里云。

为什么选择阿里云?

这几台EC2的位置需要提一嘴,阿里云的服务器我买在了长三角,而Azure我选择的是日本、Amazon的则选择了硅谷,考虑到大多数的用户都是中国人,所以选择了阿里云的服务。(阿里云能不能打钱,给我明年的服务器续费便宜点🥺)

开始部署

通过VScode连接上服务器后第一件事是把项目拉取到服务器上(但是我用的clone,不知道以后我要是更新项目的话我是不是要重新部署一下,还是推荐使用pull拉取的方式)

终端执行命令:

1
2
git clone https://github.com/sepinetam/wcloud-webapp.git
cd wcloud-webapp

下一步创建虚拟环境并安装依赖:

1
2
3
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

然后就开始到处搜罗该怎么办了,网上最多的方法是nginx、gunicorn、flask三者合体,但是带上这个gunicorn和nginx之后我咋也没部署成功。

省流版————最省事的方案

直接打开80端口

1
2
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --reload

然后修改项目的host和port

1
2
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80)

之后直接运行python文件,然后打开浏览器输入服务器ip即可访问。

一个不错的解决方案

YouTube上找到的一个视频,解决了我的疑问.

后续会把这个东西总结出来的。
已经做出来了,指北

部署的困难

先挖个坑,以后回来填。

小总结

关于文件权限问题

因为是自己的小项目,希望用的人都很友善,所以在做的时候ChatGPT也好,网上的各种文档也好,大多都让我设置007和666权限,但是wcloud.sock文件总是权限出问题,解决方案是直接使用777权限,但这样会存在安全隐患。

1
2
# 假设你在项目的目录下
sudo chmod 777 wcloud.sock

要睡好觉

该说不说,有一个好的睡眠才能做好白天的工作。这点我现在深信不疑,但是总是遭不住熬夜。

最开始,这个项目只是wCloud的时候只用了不到三个小时就写好了,但是优化项目的那段时间没睡好用了好几天的时间来写。然后在做wCloud-WebApp的时候,我花了一周的时间来写这个项目,其中大部分时间是在写前端,因为当时没学过前端,所以很多东西都是现学现用。但是那段时间的睡眠还是蛮不错的,所以效率也是很高,但是在部署的头一天因为发现项目存在一个小bug,彻夜难眠(晚上十一点半完成的项目,测试到十二点发现的bug,最后凌晨三点还没睡着,虽然bug现在(@2024.07.14)还没改好)所以第二天部署的时候效率很低,文档都看不进去。

关于开发者社区

或许是我对这个领域不是很熟悉吧,不知道是不是幻觉————中文的社区确实不如英文的社区。一些问题在中文搜不到解决方案,但是YouTube上的解决方案随便一个都有思路的扩展,至少让我想到了直接修改app.py文件中app.run(host='0.0.0.0', port=80)的host和port参数。

最后的最后

还是多读读书吧,找点书看或许比看视频、问AI来的更有效。