后台搭建
本章详细讲述如何从零部署SciMusic_server
(后台代码)。
1. 从GitHub Repo上拉取代码
后台代码的名称为SciMusic_server
,代码仓库地址:https://github.com/2horse9sun/SciMusic_server
该仓库为私有仓库,访问仓库前,先请负责的同学把你添加到仓库成员中。
使用命令行进入合适的文件夹中,运行以下命令,clone
整个项目:
git clone https://github.com/2horse9sun/SciMusic_server.git
然后,进入到项目中:
cd SciMusic_server
2. 安装依赖
进入到项目中后,使用npm
安装项目依赖文件(需提前安装npm
):
npm install
安装完毕后,项目文件中应当多了一个名为node_modules
的文件夹。
3. 拉取文件
观察项目中的.gitignore
文件,发现有几种文件并不在git仓库中。由于项目已经运行在项目组的服务器上,我们只需要从服务器上拉取文件即可。访问服务器前,请先向负责的同学询问服务器账号与密码并牢记。
使用任意一款FTP连接工具(如Xftp,Termius等),登录到服务器上,进入到:
/root/SciMusic_server/
对比本地文件和服务器上的文件,将cert
、xrhythm.zip
和scimusic.sql
三个文件复制到本地:
然后解压xrhythm.zip
,与服务器上的一致。
4. 初始化数据库
使用任意一种MySQL可视化软件(如Navicat),新建数据库,起名为scimusic
。进入scimusic
中,导入刚刚拉取的数据库文件scimusic.sql
,初始化表结构。
在music
表中随意增加一条记录,便于后面的测试。
回到项目文件中,打开conf/db.js
,注释掉服务器的数据库账号密码,改成你自己的:
if (env === 'dev') {
// mysql
MYSQL_CONF = {
host: 'localhost',
user: 'root',
password: 'your pw of MySQL',
port: '3306',
database: 'scimusic'
}
// redis
REDIS_CONF = {
port: 6379,
host: '127.0.0.1'
}
}
5. 本地部署测试
在项目根目录中,运行以下命令:
npm run dev
这是本地测试环境的运行命令,若在服务器上测试,应使用:npm run prd
。此时,后台服务正在运行。
使用接口测试软件PostMan,创建新的request:
https://127.0.0.1:8000/api/music/get?musicId=1
musicId
的值设置为之前随意添加的music记录的id。
发送请求后,会显示需要SSL验证。选择cancel SSL verification之后再次发送请求,若结果为:
{
"data": [
{
"id": 1,
"name": "test",
"url": "test",
"user_id": "test",
"create_time": "2022-02-18T13:35:09.000Z",
"update_time": "2022-02-18T13:35:12.000Z"
}
],
"errno": 0
}
则本地环境部署成功。
6. 本地开发与测试
在本地使用VsCode等IDE软件编写后台代码,使用命令行运行服务,使用PostMan测试接口。
7. 使用Git
每次成功开发并测试好一个功能,先使用git commit
提交代码,commit
的message
内容必须清晰地表明所做的功能改动/添加/删除。使用git push
将本地代码推送至远程仓库前,记得先用git pull
拉取远程仓库代码,以防代码有更新。
8. 服务上线
本项目采用:本地开发而非远程开发的模式,故本地测试无误的后台服务功能需要同步到服务器上。若本地数据库有修改,还应修改服务器上的数据库。
使用任意一款SSH连接工具(如Xshell,Termius等)和FTP连接工具,登录项目组的服务器。
进入到/root/SciMusic_server/
中,利用FTP传输功能,同步本地修改过的文件和服务器上的对应文件。
后台服务使用pm2
工具(已经在服务器上安装好)进行管理,首先查看正在运行的服务列表,找到本服务的id:
pm2 list
假设id为0,则现在重启服务:
pm2 restart 0
IMPORTANT NOTES: 这里的服务上线流程其实是极其不规范的。正常的上线流程应当保证尽量不停服,且服务出现bug时应当能够回退。故比较适合的做法是:使用脚本上线新服务,灰度上线,且能够支持回退。考虑到此项目规模很小,用户极少,因此直接简单粗暴的上线。
9. 现网测试
上线成功后,应当使用PostMan测试改动后的接口。此时,https://127.0.0.1:8000
应当被替换为项目组购买的域名,如:
https://ai-music.xyz:8000/api/music/get?musicId=140
返回值为:
{
"data": [
{
"id": 140,
"name": "羿风作的曲子",
"url": "202202180819546711208_0.mp3",
"user_id": "oNm-a5RQW3cTIzqyih1jUJ835f90",
"create_time": "2022-02-18T08:19:56.000Z",
"update_time": "2022-02-18T08:19:56.000Z"
}
],
"errno": 0
}
说明改动的接口上线成功。
附录-文件结构说明
|-- app.js # 后台应用的配置
|-- bin
| |-- www # 项目启动文件,创建app.js中定义的应用实例,监听端口
|-- cert # SSL证书文件
| |-- 1_ai-music.xyz_bundle.crt
| |-- 2_ai-music.xyz.key
|-- conf
| |-- db.js # 数据库配置,服务器的MySQL账号密码请看这里
|-- controller # 数据访问层,通过其中的函数访问数据库
| |-- admin.js # 忽略
| |-- article.js # 忽略
| |-- music.js # 访问music表
| |-- user.js # 访问user表
|-- db
| -- mysql.js # 创建数据库的connection
|-- logs # 日志文件,忽略
| |-- access.log
|-- middleware # 中间件,忽略
| -- check.js
|-- model # 统一接口返回的格式,应当坚持使用
| |-- errorCode.js
| |-- resModel.js
|-- node_modules # 依赖包
|-- package.json # 项目配置文件
|-- package-lock.json # 项目配置文件
|-- public # 存放静态资源(图片、视频、音乐等)
| |-- images
| |-- javascripts
| |-- miniapp
| | |-- image
| | | |-- bg1.png
| | | |-- bg2.jpg
| | | |-- bg2.png
| | | `-- wave.gif
| | |-- music # 生成的音乐都存放在这里
| | | |-- 202101291308246419330_0.mp3
| | | |-- 202101300115028164685_0.mp3
| | |-- swiper
| | |-- 1.jpg
| | |-- 2.jpg
| | |-- 3.jpg
| |-- stylesheets
| |-- style.css
|-- routes # 路由文件,定义接口(/api/xxx)
| |-- admin.js # 忽略
| |-- article.js # 忽略
| |-- index.js # 忽略
| |-- music.js
| |-- user.js
|-- upload # 忽略
| |-- audio
| |-- images
| |-- video
|-- utils # 工具类函数
| |-- cryp.js
|-- views # 忽略
|-- 404.handlebars
|-- chart.handlebars
|-- error.handlebars
|-- error.jade
|-- error.pug
|-- index.handlebars
|-- index.jade
|-- index.pug
|-- layout.jade
|-- layout.pug
|-- layouts
|-- loginsercret.handlebars
|-- my.handlebars
|-- myspace.handlebars
|-- nicenews.handlebars
|-- partials
|-- qrcode.handlebars
`-- reault.handlebars
|-- xrhythm # 深度学习模型文件夹
Author: 冯旭
Create Time: 2022-02-18
Update Time: 2022-02-18