这是一个基于Python Flask框架编写的Web应用,用于收集课程的班级作业。
本App使用Nginx配合uWSGI作为Web服务器,同时使用Supervisor对uWSGI进行管理。Nginx只响应从指定端口进入的请求,因此服务可以比较安全地挂在公网上。国内很多云服务提供商都有云服务器免费体验的活动,虽然配置不高,但运行该应用(收集一个班的作业)完全足够。
项目的Nginx配置中采取了限流措施,当Nginx服务器触发限流时,网页会返回503错误,此时可以刷新网页重试。此外,脚本和uWSGI的配置文件中设置了服务的进程数和线程数,可以自行修改。
同学们通过网站上传文件后,项目根目录下会多出uploads/
和database/
目录。其中uploads/x
目录存放了第x
次提交作业的所有提交文件,而database/x
目录存放着第x
次提交作业的所有提交记录。
整体结构如下图所示:
网页运行图(PC端/移动端):
(也可以不使用虚拟环境,但建议在虚拟环境中操作)
pip3 install virtualenv
virtualenv ~/app_env # 虚拟环境的路径和名称也可以自己指定
cd ~/app_env
source bin/activate # 激活该虚拟环境,激活成功后命令行会出现 (app_env) 字样
若之后想要取消激活,直接在命令行输入deactivate
命令即可。
sudo apt update
sudo apt install nginx
pip3 install uwsgi uwsgitop supervisor
python3-devel
和libintl-devel
包。下一步安装过程中,编译whl文件时需要用到。pip3 install uwsgi uwsgitop supervisor
git clone https://github.com/NewComer00/NJUST_HomeworkCollector.git ./app
cd app
pip3 install -r requirements.txt
chmod +x app_manager.sh
⚠️⚠️⚠️若使用了虚拟环境,请先确保虚拟环境已经激活⚠️⚠️⚠️
觉得麻烦的话,可以将激活环境命令加入app_manager脚本export APP_ROOT=...
这行之后:
source ${APP_ROOT}/../bin/activate
app_manager.sh
脚本用到了envsubst
命令,Cygwin需要安装gettext
包来获取这个命令。./app_manager.sh [options] start
启动命令示例,请不要使用sudo
。第一次运行时大概率会报错,不用惊慌,请查看下文“可能出现的问题”:
./app_manager.sh -n 0 -b "测试提交页面" -p 8080 start
⚠️注:
[options]
必须放在start
等命令之前才会生效。[options]
代表可选参数,具体如下:-n <数字>
<数字>表示这是<第几次>交作业,如1表示第一次。该参数的默认值为1
。-b <字符串>
<字符串>作为网页的<一级标题>。该参数的默认值为"2021 云数据管理课程"
。-p <数字>
<数字>表示网页服务所在的<端口号>。该参数的默认值为8080
。启动后可以在浏览器中访问网站:
http://<机器的ip地址>:<端口号>/
./app_manager.sh
请一样通过普通用户执行,不需要使用sudo ./app_manager.sh
。使用sudo
会找不到之前安装的Python包。如执行./app_manager.sh start
命令后提示文件无法打开、Permission denied
等问题,请参考下一条解决。[alert]
开头,这只是一个警告,Nginx正常启动,可以不用管它。如果提示以[emerg]
开头,代表这是一个紧急情况,Nginx启动失败,需要根据错误提示操作,比如手动创建那些未找到的文件或目录(如确有需要,可以放宽新建文件的访问权限)。uploads/
和database/
目录。uploads/x
目录存放了第x次提交作业的文件,database/x
目录存放着第x次提交作业的提交记录,x为启动时用-n
指定的数字。CSRF token invalid
报错横幅,表示当前页面的CSRF令牌已经过期,刷新一下页面,重新提交即可。./app_manager.sh stop
执行后,关闭所有相关进程。
在应用已经启动的情况下,若应用的源码或者配置被修改,可以执行重启操作来使改动生效:
./app_manager.sh [options] restart
⚠️注:重启操作必须在应用已经启动的情况下才能正确执行。可以通过top -U <用户名>
的方式查看用户当前运行进程。
应用启动后,Nginx, uWSGI和Supervisor的运行日志位于logs/
目录下,在应用无法正常运行时可供参考。
Python程序本身的输出和报错不在命令行显示,被重定向并保存至uWSGI相关的日志中。在Nginx和uWSGI的日志中可以查看服务器收到的请求信息。
使用uwsgitop可以查看当前网站服务的负载情况,监控端口在uWSGI的配置文件中默认为5001:
uwsgitop http://localhost:5001/
以管理员身份运行Cygwin。
使用apt-cyg或者原生的包管理器安装cygrunsrv
和nginx
包。
执行cygserver-config
命令,在交互时输入yes
。
安装Nginx的后台程序:
/etc/rc.d/init.d/nginx install
可能会提示一些路径不存在,但只要最后输出“done”,即表示成功。
/usr/sbin/nginx
。/usr/sbin
添加至Cygwin的环境变量:export PATH="$PATH:/usr/sbin"
# 这是临时方法,为避免麻烦可以考虑将这句加入app_manager脚本开头
nginx -h
若正常输出版本信息和帮助信息,即安装成功。
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )