基于 Ray 的阿里云部署 Flask + WSGI + Nginx 详解 对我所做的选课模拟系统进行了服务器端的部署。
环境:flask uwsgi Ubuntu Nginx

Q1

端口被占用

查看所有的服务端口(ESTABLISHED

netstat -a

查看所有的服务端口,显示 pid 号(LISTEN,ESTABLISHED)

netstat -ap

查看某一(**)端口,则可以结合 grep 命令:

netstat -ap | grep **

如查看**端口,也可以在终端中输入:

lsof -i:**

若要停止使用这个端口的程序,使用 kill +对应的 pid

kill pid

还有一个比较好用的命令,查看**端口:

sudo netstat -lnp | grep **

查看端口号和运行程序:

netstat -atunp | more

查看进程所用端口:

netstat -tlnp|grep **

以上的命令对排查该类问题有很好的帮助。
同时,如果安装了宝塔 Linux 的 LMNP 群的话,就不用再另行

sudo apt-get install nginx

了,不然宝塔的 Nginx 会占用 80 端口而导致失败。

Q2

uwsgi 的配置问题

uwsgi 的配置文件需要在 ray 所提供的样例之上进行适应性调整。
另,评论中指出的

config.ini 文件
chdir = /home/www/ 要改成 chdir = /home/www/my_flask

供参考

Q3

502 提示

部署完成之后遇到了 502 提示,在网上查找了许多的解决方案都没有用,后来才发现,uwsgi 所占用的 8001 端口并没有处于运行状态,手动运行 uwsgi后网站恢复运行,进而考虑到是Supervisor出现问题,使用

sudo service supervisor start

查找出错误并解决之(似乎是配置文件中指定的 log 文件夹要自己创建,它并不会自动创建这样子)。

Q4

个人的调试办法

在网站第一次全部部署完成之后,出现了很多的小问题,这里我将项目拆解开来进行一步一步的测试

S1 检测文件本身是否有问题

方法是直接运行 manage.py

这里注意,要用过外网访问 localhost:5000 的话,要使用 python manage.py runserver –host 0.0.0.0

记得要给 5000 端口放行

S2 检测 uwsgi 有无问题

uwsgi 成功运行之后了,网站再次变为可访问状态,使用 Ctrl+C 之后,网站再次不可访问,然后配置使用Supervisor 将 uwsgi 变为保持开启状态。
操作完成之后,网站变为可访问(依旧是 5000 端口)

S3 检测 Nginx

不出意外的话,这就是最后一步了,表面上是 Nginx 一直在报错,然而实际上 Nginx 配置并没有什么问题,完成了上述两步的调试之后,Nginx 也就不报错了,这时可以直接使用域名访问网站。

关于 flask 制作网站的后续

后面准备给网站加上域名(应该不是这个模拟网站,而是工作室的网站吧)
掌握对网站维护的技巧
以上。