文章介绍
是时候写一个自己的项目了, 本篇文章记录项目忙鱼-一条不如闲鱼的鱼
的练手开发过程
知识点以
这种形式给出
对于美工和效果, 考虑的比较少, 有时间会做进一步的美化, 以后端开发为主
引出思考与学习的我会粘贴相应链接
目录
正文
系统背景
开发机操作系统:
Linux 3andman 5.18.18-200.fc36.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Aug 17 16:02:04 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
服务器:
腾讯云轻量应用服务器, 2核2GB, 部署mySQL
Linux VM-8-7-centos 4.18.0-348.7.1.el8_5.x86_64 #1 SMP Wed Dec 22 13:25:12 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
华为云 云耀云服务器, 4核8GB, 部署其他组件
Linux VM-8-7-centos 4.18.0-348.7.1.el8_5.x86_64 #1 SMP Wed Dec 22 13:25:12 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
准备仓库
仓库与文件维护
首先, 为项目建立一个Gitee仓库
BusyFish忙鱼
建立gitee仓库
检查.gitignore
设计
设计原型
设计原型参考【智慧社区系列产品】智慧社区二手交易平台高保真原型模板
Axure的下载与安装
Chrome的Axure插件安装
Axure导出Html
产品信息
- Title与Slogan
忙鱼 - 一条不如闲鱼的鱼 - icon
自己画了一个
icon大小规范与设计: 百度文章
Linux下的画图工具
用户角色梳理
- 客户端
角色 | 描述 | 操作 |
---|---|---|
customer用户(仅客户端) | 客户端使用者 | 发布商品, 评论商品, 购买商品, 浏览商品 联系卖家, 举报商品, 举报用户, 评价卖家, 关注用户 |
passenger游客(仅客户端) | 通过注册变成用户 | 浏览商品 |
- 管理后台
角色 | 描述 | 操作 |
---|---|---|
admin管理员 | 系统管理员, 可以执行所有操作 | 所有其他操作, 设置分区信息, |
boss老板 | 系统老板, 管理所有员工 | 发布活动, 管理员工 |
manager雇员管理员 | 比雇员高级, 管理雇员, 可以分派任务 | 管理雇员, 设置审核指标 |
employee公司雇员/审核员 | 公司的普通员工 | 审核条目, 处理举报消息 |
功能模块梳理
注: <表示为待定功能>
客户端
- 主页面
功能 | 说明 | 角色差异 | 完成情况 |
---|---|---|---|
商品广场 | 显示当前城市的二手商品 | 所有人 | |
动态 | 显示关注的人的动态 | 如果是游客, 引导登陆 | |
关注商品 | 关注商品动态 | 如果是游客, 引导登陆 |
- 搜索界面
功能 | 说明 | 角色差异 | 完成情况 |
---|---|---|---|
热搜榜 | 近期热搜内容, 根据人气值排序 | 所有人 | |
历史搜索 | 历史搜索内容 | 仅限用户 | |
搜索词联想 | 搜索栏自动联想 | 所有人 |
- 用户相关
功能 | 说明 | 角色差异 | 完成情况 |
---|---|---|---|
地理位置模块 | 用户的简单定位, 方便筛选同城商品, 也用到用户的收货地址选择上 | 所有人 | |
关注用户 | 一个用户关注另一个用户 | 如果是游客, 引导登陆 | |
浏览历史 | 记录用户的浏览记录, 需要带有商品状态 | 所有人 | |
时间显示 | 聊天中, 评论中, 商品发布时, 需要显示时间 | 所有人 | |
用户评价 | 买卖双方互相评分, 分别计算分数 | 仅限交易后双方 | |
<消息聊天> | 买家卖家能聊天暂时不考虑 | ||
<附近的人> | 通过物理定位搜索附近的用户列表 | 仅限用户 | |
累计收入 | 用户通过出售二手物品得到的收入 | 仅限用户 |
- 商品路线
功能 | 说明 | 角色差异 | 完成情况 |
---|---|---|---|
商品发布 | 发布一个商品 | 仅限用户 | |
商品收藏 | 收藏一个商品 | 仅限用户 | |
下单 | 用户下单操作 | 仅限用户 | |
商品搜索 | 搜索商品 | 所有人 | |
商品评论 | 评价一个商品 | 仅限用户 | |
历史售出 | 商品成交后保留一部分商品信息做展示用 | 所有人 | |
<商品分享> | 分享外链到其他平台 | 仅限用户 | |
<求购模块> | 求购商品, 暂时先不考虑 | ||
支付模块 | 完成支付 | 仅限用户 | |
<售后> | 订单售后设置 |
- 公共服务
功能 | 说明 | 角色差异 | 完成情况 |
---|---|---|---|
敏感词识别与过滤 | 过滤敏感词为****, 当文章含有敏感词时不允许发布 | 所有 |
管理后台
功能 | 说明 | 角色差异 | 完成情况 |
---|---|---|---|
热搜榜 | 近期热搜内容, 根据人气值排序 | 所有人 | |
历史搜索 | 历史搜索内容 | 仅限用户 | |
搜索词联想 | 搜索栏自动联想 | 所有人 |
技术选型
下划线表示选用
功能 | 选型 | 说明 | 相关文档 |
---|---|---|---|
项目管理工具 | Maven:3.8.1 | 管理项目依赖 | Maven官网 |
数据库访问与处理 | MyBatisPlus | 简化单表CRUD操作 用内置分页插件完成分页查询 <开发:>开启性能分析插件, 优化SQL | MyBatisPlus官网 |
开发框架 | SpringBoot | SpringBoot在Spring IoC与AOP的基础之上引入了约定大于配置的思想, 通过起步依赖与自动配置简化了Spring的使用 | |
日志记录 | Log4j | Log4j在线文档 | |
Logback | 生成程序日志 Logback与Log4j同源, 而且功能性能更强, 选用Logback | Logback/Gitee文档 | |
第三方登录 | JustAuth | JustAuth是一个开箱即用的第三方登录开源组件包, 可以很方便地实现多平台的账号接入 | JustAuth官网 |
OAuth2.0 | OAuth是目前被广泛使用的开放网络协议, 可以用来从第三方获取用户信息, 进行登录 | ||
登录验证 | JWT | 使用带过期时间的JWT完成 异地登录提醒 退出登录 用户身份确认 | |
静态资源部署 | Nginx | Nginx是俄罗斯开发的优秀的轻量级HTTP与反向代理Web服务器 主要使用了静态资源部署的功能 | |
服务注册与发现/分布式配置 | Nacos | Nacos是阿里开源的微服务引擎, 集成在SpringCloudAlibaba 中, 可以很方便地管理数据中心的所有服务以及元数据 | nacos官网 |
Eureka | Eureka是网飞的SpringCloud项目, 同样完成的是服务发现功能, 但是没有配置中心 | ||
数据库 | MySQL5.7 | 免费稳定的开源数据库 | |
计数器 数据缓存 用户消息时间线 热点排行榜 消息队列 | Redis | Redis是高性能键值对内存数据库, 有很好的分布式事物支持, 可以保证数据安全 | |
搜索功能 | ElasticSearch | 使用更易用的搜索引擎ElasticSearch完成搜索操作 | |
部分页面静态化 | FreeMarker | FreeMarker是一个模版引擎, 可以加快页面的响应速度, 适用于大规模但变化不频繁的数据. 如搜索界面的展示 | |
Seata是SpringCloudAlibaba 项目中的一部分, 主要用于解决分布式服务中的事务一致性问题 | |||
服务熔断与降级 | |||
文件托管 | minIO | 使用minIO完成用户商品的图片托管 | |
服务器组件部署 | docker:20.10 |
数据库
数据库表设计
运维
docker的安装
使用docker-compose
+docker
完成服务器上各种组件的部署
#安装部分依赖
dnf install -y dnf-utils device-mapper-persistent-data lvm2
#添加源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#docker安装
sudo yum install -y docker-ce
#开机自启动docker
systemctl enable docker
#设置docker国内镜像源
/下:
mkdir /etc/docker
#新增文件
vim /etc/docker/daemon.jsom
#插入内容
{
"registry-mirrors": ["https://7oc12mqc.mirror.aliyuncs.com"]
}
#重启服务
systemctl restart docker
docker-compose的安装
@菜鸟教程-docker-compose入门
这里使用docker-compose只是文件化了docker的配置语句
#国内源
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
#赋予权限
chmod +x /usr/local/bin/docker-compose
#验证结果
docker-compose -version
mysql的安装
这部分的docker-compose.yml
version: '3'
services:
mysql:
container_name: mysql
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: "我的密码"
image: "mysql:5.7"
restart: always
volumes:
- "./conf/my.cnf:/etc/my.cnf"
- "./data:/var/lib/mysql"
ports:
- "3306:3306"
redis的安装
这部分的docker-compose.yml
version: '3'
services:
redis:
container_name: redis
image: redis:5.0.7
restart: always
ports:
- 6379:6379
volumes:
- ./conf/redis.conf:/etc/redis/redis.conf:rw
- ./data:/data:rw
command:
redis-server /etc/redis/redis.conf --appendonly yes
environment:
- TZ=Asia/Shanghai
minio的安装
这部分的docker-compose.yml
version: '3'
services:
minio:
image: minio/minio:RELEASE.2021-04-18T19-26-29Z
container_name: myminio
ports:
- 9000:9000
volumes:
- /var/minio/data:/data
- /var/minio/config:/root/.minio
environment:
MINIO_ACCESS_KEY: "minio"
MINIO_SECRET_KEY: "minio123"
command: server /data
restart: always
ElasticSearch+ik分词的安装
docker有打包好的ik分词+es包, 但是这里还是分开安装
这部分的docker-compose.yml
version: '3'
services:
elasticsearch:
image: elasticsearch:7.4.0
container_name: elasticsearch
restart: always
environment:
- bootstrap.memory_lock=true
- http.cors.enabled=true
- http.cors.allow-origin=*
- "discovery.type=single-node"
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- /busyFish/es/plugins:/usr/share/elasticsearch/plugins
ports:
- 9200:9200
- 9300:9300
kibana:
image: kibana:7.4.0
container_name: kibana
environment:
- SERVER_NAME=kibana
- ELASTICSEARCH_URL=http://192.168.200.130:9200
- XPACK_MONITORING_ENABLED=true
ports:
- 5601:5601
depends_on:
- elasticsearch
external_links:
- elasticsearch
安装文件上传工具lrzsz
dnf install lrzsz -y
#在es/plugins/上传ik分词器/解压
rz
mkdir analysis-ik
tar -xvf ik-7.4.0 ./analysis-ik/
#重启es
docker restart es
nacos的安装
cd /busyFish/nacos/init.d/
touch custom.properties
这部分的docker-compose.yml
version: "2"
services:
nacos:
image: nacos/nacos-server:1.4.1
container_name: nacos
environment:
- MODE=standalone
- JVM_XMS=256m
- JVM_XMX=256m
- JVM_XMN=256m
volumes:
- /busyFish/nacos/logs:/home/nacos/logs
- /busyFish/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties
ports:
- "8848:8848"
restart: always