提示:本文主要是对生产实习的个人理解和总结,本文还总结了云服务器配置的具体方式和错误总结
目录
前言
随着两周的生产测试,我们组选择了“网上论坛系统”主要功能也就是以代码为主的网上悬赏系统。
作为本次项目的“技术总监”,碰到了种种难题,但是每一个难题也就代表了我又学会了一门技术Q特此记录保存。
提示:以下是本篇文章正文内容,下面案例可供参考
一、项目的主要功能
对于一个项目,有着丰富多彩和高效的功能永远是最重要的,本项目的主要内容如下:
1. 悬赏问题解答:用户可以发布IT知识相关的悬赏问题,指定悬赏奖励。其他用户接受悬赏后提供答案,被采纳后可以获得奖励。
2. 实时交流:解答成功后,用户可以在平台上进行文字或语音交流,沟通解答的过程和细节。
3. 社区讨论:社区模块存放免费知识内容和问题讨论,用户可以参与社区讨论或搜索查找相关信息。
4. 标签体系:用户发布悬赏问题或社区帖子需要选择相关标签,提高搜索效率和匹配效果。
5. 内容排版:用户发布内容支持基本的文本排版功能,如代码高亮等。
6. 后台管理:管理员登录后台管理界面, 审核用户发布的内容和标签,查看数据库日志等。
主要特点:- 解决IT技术问答需求
- 积分奖励激励解答
- 社区知识分享
- 标签匹配挖掘用户需求
- 管理后台控制信息质量如此总结可以梳理清楚主要功能及其特点,更加专业系统。
二、项目的特色功能
一个项目光有普通的增删改查等等是没有用处的,无法做到吸引用户,想要真正在市场上又立足之地就要有各种先进和特色的技术或者功能。
1.MD5加密技术
MD5算法是一种hash算法,它通过一个消息产生一个128bit的hash值,用于确保信息传输完整性。
大致分为4个步骤
1.分组:将待处理字符串分成512bit长度的分组
2.初始化:初始化4个32bit寄存器(a,b,c,d)为常数
3.变换循环:
- 选择:从分组取出4个32bit字,按照算法选择函数确定要用哪4个
- 计算:计算a,b,c,d四个寄存器的新值
- 更新:用新的值更新a,b,c,d四个寄存器
4.结束处理:依次将a,b,c,d四个寄存器的值与最终导出的128位消息指纹拼接
这种加密方式相较于普通的凯撒加密,密文更加难以破解,对于存储用户数据相当适合。
2.私信功能(异步通信)
由于我们接受过华为云部署的培训,我们组就选择使用华为的智能基座即时交流平台技术
大致流程是:
1. 服务器端使用WebSocket服务器,建立WebSocket连接。
2. 客户端使用WebSocket客户端,与服务器建立连接。
3. 当用户发送私信时,客户端发送WebSocket消息到服务器。
4. 服务器接收到消息后,找到对应用户的WebSocket连接,将消息转发给该用户。
5. 接收用户通过对应的WebSocket连接读取消息。
类似于API接口
js
websocket.send(message); // 发送消息
websocket.onmessage = function(event) {
console.log(event.data); // 接收消息
};
可以实现异步通信,让服务器主动推送信息,而不是客户端持续监听获取,这样可以大大减少,服务器的访问数量,增加了性能,并且由于服务器主动推送,就可以大大增强时效性,几乎可以做到“即时推送”。
3.支付宝支付功能
由于涉及到资金流动,难免会影响安全性,在这里我们就使用支付宝的沙箱支付,沙箱支付的特点有:
1. 沙箱环境独立于支付宝正式环境,拥有完全独立的账号体系。
2. 沙箱环境内的账号仅在沙箱环境内有效,不会影响到正式环境。
3. 沙箱内使用虚拟帐户和虚拟资金进行模拟交易,不涉及真实资金。
4. 沙箱内开发者可以模拟客户端和服务端,测试各种支付和接口功能。
5. 沙箱内账号可以无限制申请,方便开发和测试。
6. 沙箱内完全复制正式环境的业务流程和接口,模拟真实环境。
可以大大增加人员测试时资金的安全性
处理沙箱支付示例(不包含本项目网址)
// 支付宝沙箱网关地址
String url = "https://openapi.alipaydev.com/gateway.do";
// 创建支付对象
AlipayTradeService tradeService = new AlipayTradeServiceImpl.builder()
.gatewayUrl(url)
.appId("appId")
.privateKey("privateKey")
.format("json")
.charset("UTF-8")
.build();
// 调用统一收单接口
String result = tradeService.pay(params);
使用PHP进行沙箱环境的回调确保安全性和稳定性
// 支付宝公钥,用于验证签名
$alipay_config['alipay_public_key'] = "公钥";
// 沙箱网关地址
$alipay_config['gatewayUrl'] = "https://openapi.alipaydev.com/gateway.do";
// 实例化消息验证对象
$alipayNotify = new AlipayNotify($alipay_config);
// 验证消息是否来自支付宝
$verify_result = $alipayNotify->verifyReturn($_GET);
if($verify_result) {
// 验证成功
// ...
} else {
// 验证失败
}
发起退款功能如下
constrefund = {
out_trade_no: 'xxx', // 订单号
refund_amount: '0.01', // 退款金额
refund_reason: '用户申请退款' // 退款原因
}
await alipay.tradeRefund(sandbox, refund);
总结:沙箱配置要求如下(看似要求很少,但是的确很难配)
1. 沙箱网关地址沙箱环境和正式环境有不同的接口网关,需要指定对应的沙箱网关地址。
2. 应用ID在支付宝开放平台申请应用后获得的应用ID。在沙箱环境需要使用对应的沙箱应用ID。
3. 私钥和公钥支付宝申请应用后生成的应用私钥和公钥。与应用ID类似,沙箱需要使用对应的沙箱私钥和公钥。
4. 支付完成和退款后的回调地址应用的回调服务器地址。沙箱环境和正式环境需要分别设置。
二、Springboot项目如何使用宝塔面板部署到华为云
1.购买华为云服务器
由于我们项目并不大,在此选择“通用计算增强型 | c7.large.2 ”型号,也就是2核心cpu和4G内存,操作系统选择centos,按需计费。如下
2.安装宝塔面板
在浏览器搜索宝塔面板,选择Linux在线安装,输入IP和管理员密码直接登录全自动安装。
之后进入宝塔面板
3.配置环境
在宝塔面板上配置环境,相当简单,打开左侧软件商店,分别下载如下软件
之后在数据库界面,导入数据库,选择全部人可访问即可。
4.打包Java+Springboot项目
首先确保项目在本地可以正常运行(在此不再赘述)
之后修改代码,把数据库的地址指向云端的ip,默认mysql端口是3306,即@IP:3306
接下来就可以开始打包了(在此以jar包和idea进行举例)
打开idea右侧的maven项目
pom.xml里需要加入插件
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 本地JAR打包配置参数一 -->
<includeSystemScope>true</includeSystemScope>
<mainClass>cms.Application</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
用来选择打包为jar包
这样就等待build success!
输出的jar包在 “target/xxxxx.jar”路径内。这样我们就成功一半了。
5.部署到云服务器
1.上传至服务器
为了方式混乱,我们新建一个文件夹并进入
cd ..
mkdir /var/app
cd /var/app
jar包的名字以cms-pro.jar为例(我的项目)
接着使用宝塔把刚刚生成的宝塔上传上去。
2.创建tomcat用户,并且赋予访问权限
getent group tomcat || groupadd -r tomcat
getent passwd tomcat || useradd -r -d /opt -s /bin/nologin -g tomcat tomcat
3.更改文件访问权限
chown -R tomcat:tomcat /var/app
确保项目在运行时可以被访问,否则即使配置再好不能访问也是white page。
4.配置脚本(本脚本宝塔可自动配置)
vim /usr/lib/systemd/system/bbs.service
在/usr/lib/systemd/system目录下增加bbs.service文件,作为运行脚本
脚本内容为
[Unit]
Description=bbs
After=syslog.target
[Service]
User=tomcat
Group=tomcat
ExecStart=/usr/local/btjdk/jdk8/bin/java -Xms512M -Xmx512M -jar /var/app/cms-pro.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
其中“/usr/local/btjdk/jdk8/bin/java”是你的openjdk8的路径
“/var/app/cms-pro.jar”就是我们刚刚上传的jar包路径
-Xms 设置虚拟机可用内存堆的初始大小。-Xms512M表示虚拟机启动时分配的内存大小为512M
-Xmx 设置虚拟机的最大可用大小。-Xmx512M表示虚拟机能使用最大内存为512M
默认端口8080
输入:wq进行保存。
执行代码刷新配置文件
systemctl daemon-reload
5.启动!
之后使用如下代码进行启动
systemctl enable bbs # 配置开机自启动
systemctl start bbs # 启动!
systemctl status bbs # 查看启动状态,如果启动失败则可以根据报错进行修改
6.番外
之后你需要输入 IP:8080 进行访问自己的页面
但是由于项目结构的不同,有时需要在8080后面加上/(你的项目名)/index
等等,需要视情况而定。
如果你完成了上述步骤,那么大概你的云服务器就已经配置好了,这时你只需要大喝一声:项目,启动!