一、选题简介
(1)项目名:家庭相册
(2)选题原因及项目描述
随着现代多媒体技术的飞速发展,摄像不仅仅局限于专业相机,而相片也就自然而然地成为了记录生活美好瞬间的重要方式。虽然生活中不乏发现美的眼睛,但是如果能够记录并分享美的话,不仅能够让自己感到愉悦,还能够给他人带来快乐。所以这次期末大作业我们三人团队计划开发一个家庭相册系统,家庭成员可以通过共享账号的方式上传相片到云相册中。
家庭相册项目计划以“微服务”的方式进行轻量级部署,并最终实现账户的创建管理、相册的管理以及相片的上传预览等系列功能。
二、系统部署所使用的容器
nginx+mysql+python
将web服务器、数据库、flask框架部署到不同的容器中,并使用dockers-compose进行多容器部署
前端使用boostrap框架
后端使用flask框架,前端中与网络请求相关的视图由flask渲染
代码已上传至github
(1)项目结构及容器情况如下
(2)docker-compose.yml
(3)nginx
nginx作为Web服务器,接受网络请求,代理两个flask,并实现nginx+flask负载均衡
1.文档如下
-
Dockerfile
-
default.conf
2.负载均衡测试
负载均衡采用默认的轮询策略
-
使用8080端口访问
-
使用8081端口访问
可以看到8080和8081端口都能够访问
(4)mysql
mysql数据库存储数据,并由Python的pymysql调用
文档如下
-
Dockerfile
-
schema.sql
-
setup.sh
(5)Python
Python使用flask框架,处理网络请求,进行数据库操作,并对部分视图进行渲染
两个site文件夹结构如下
代码过多就不放到博客里了,可以在github中查看
三、运行结果
(1)使用如下命令启动容器
docker-compose up --build
(2)通过浏览器访问家庭相册
1.登录注册
-
登录
-
注册
输入账号密码后进入主页
2.信息管理
用户能够在这个界面进行密码的修改
3.相册功能展示
- 用户能够新建相册并设置类型
- 用户能够通过浏览器同时上传多张图片
- 在相册中能够对图片进行放大预览
四、分工说明
第25组
学号 | 姓名 | 分工 | 贡献比 |
---|---|---|---|
021700201 | 蔡峰 | 主要负责前端工作和框架设计及部署 | 1 |
171709030 | 吴珂雨 | 主要负责前端工作、功能设计及博客撰写 | 1 |
111700233 | 郑木平 | 主要负责后端工作和框架设计及部署 | 1 |
五、总结
-
蔡峰:
这次是最后一次大作业了,所以就总结一下整个课程吧。虽然说这个课程总体来说工作量还是比较实在的,但是我感觉我对微服务和docker等系列知识更加熟悉了,并且也学到了许多有趣的实践。在这几次的实践作业里,我深深地感受到了运用各类资源解决“刁蛮”问题的过程,明显提升了连续专注工作的能力,充分地体验到了实验结果成功那刻给我带来的快乐。
最后是团队作业,其实我十分享受团队合作的快乐,因为其实只要团队工作配合默契并且团队成员互相欣赏的话是可以实现更加轻松的高效工作的。我们先是参与了“OpenCV中的人脸识别”的小实践,经历了建立典型人物模型,并在图片以及视频流中对人脸对象进行精准抓取,最终实现根据其人物特征智能识别的一个过程。之后在大作业里,通过我们合理的团队分工,我们的项目部署和系统搭建得以同时进行并实时更新,最终实现了账户的创建管理、相册的管理以及相片的上传预览等预期功能。总体来说,收获颇丰。 -
吴珂雨:
期末大作业终于在六月的尾巴结束啦,这几次的组队合作都非常的融洽和顺利。通过这次大作业进一步熟悉了容器的使用,也巩固了前几次实践课程学到的东西。相比于开学刚接触这门课的时候,对微服务,容器和树莓派也有了进一步的认识和掌握,同时也能够用所学来实现一些功能。而且经过前几次实践,现在遇到一些问题已经能够根据之前的经验自己分析原因并解决了,整个实践课程下来,除了所学课程之外,最大的收获就是分析与解决问题的能力得到了提升叭。回想之前爬坑爬到凌晨五点,一大早抱着电脑去找队友一起进行实际操作,一起讨论的日子,虽然挺累的,但是很充实,做出成果之后也是成就感满满。
虽然实践结束了,还是希望在有时间的时候能够增添更多功能,使这个项目更加完善。 -
郑木平:
这次实践虽然实践比较短,但也完整的完成了一个项目的部署运行。通过这次实验,我熟悉了一个web服务完整的部署过程,从后端中间控制层,到数据库的调用,再到前后端的交互和视图渲染,我熟悉了MVC开发模式的整个流程。同时我也了解了微服务架构和docker容器部署的方式,学会了用nginx进行负载均衡。再前几次的实验中,通过资料查阅和队友协作,对树莓派有了一个基本的认识,学会了一些基本的操作和基本功能的使用。