Skip to content

后台搭建

本章详细讲述如何从零部署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连接工具(如XftpTermius等),登录到服务器上,进入到:

/root/SciMusic_server/

对比本地文件和服务器上的文件,将certxrhythm.zipscimusic.sql三个文件复制到本地:

wxapp-develop-pull_files

然后解压xrhythm.zip,与服务器上的一致。

4. 初始化数据库

使用任意一种MySQL可视化软件(如Navicat),新建数据库,起名为scimusic。进入scimusic中,导入刚刚拉取的数据库文件scimusic.sql,初始化表结构。

wxapp-develop-import_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提交代码,commitmessage内容必须清晰地表明所做的功能改动/添加/删除。使用git push将本地代码推送至远程仓库前,记得先用git pull拉取远程仓库代码,以防代码有更新。

8. 服务上线

本项目采用:本地开发而非远程开发的模式,故本地测试无误的后台服务功能需要同步到服务器上。若本地数据库有修改,还应修改服务器上的数据库。

使用任意一款SSH连接工具(如XshellTermius等)和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