> For the complete documentation index, see [llms.txt](https://hocassian.gitbook.io/matrix/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hocassian.gitbook.io/matrix/gou-jian-bu-shu.md).

# 构建部署

由于GitBook性能问题，此文档过长，故该页停止更新，请前往飞书文档查看最新教程\~

完整文档：<https://hocassian.feishu.cn/docs/doccnmkWI0ndhoSn1xDI8R7rKEf#kQL3xF>

## 矩阵依赖

前期我们可以根据主体需要的功能来准备云服务，比如我只需要在本地建立素材矩阵帮忙处理视频素材，且不需要外网访问和多余的云服务，那么只用准备私有云和部分云服务即可；当然，为了服务的完整性和可扩展性，我们推荐全部准备和安装。

|           | 私有云              | 公有云                                 | 云服务                | 是否付费                                   |
| --------- | ---------------- | ----------------------------------- | ------------------ | -------------------------------------- |
| 素材矩阵      | （必需）             | （非必需，若无此模块外网无法访问，且部分依赖独立域名的云服务无法使用） | （非必需，若无此模块无法AI打标签） | 云服务需要付费，普通个人主体使用，平均一年十多块钱              |
| 文学矩阵      | （非必需）            | （必需）                                | （非必需）              | 由参与机构提供的服务，同步文章功能需要付费，一次购买永久使用，价格为300元 |
| 视频矩阵      | （必需）             | （非必需，若无此模块只能手动上传视频）                 | （非必需）              | 硬件费用+vps费用+域名费用                        |
| 创作矩阵      | （必需）             | （非必需）                               | （非必需）              | 硬件费用                                   |
| 分发矩阵（开发中） | （必需，且需要额外配置安卓手机） | （非必需）                               | （非必需）              | 暂无                                     |

## 前期准备

### 私有云

私有云实际上就是一台（或两台，主机+NAS，根据实际需要存储空间来决定）能够在本地7\*24运行的服务器，我们推荐你购买以下配置的服务器，同时如果你是硬件供应商，欢迎和我们合作。

#### 低配（适合个人主体）

![（图片仅供参考）](/files/-MbozEtuDpv7C2sQVBJI)

* 机箱：静音防尘机箱，若盘位不够可考虑另购NAS扩充（图片仅供参考）
* 特点：占地相对小，噪音低
* 主板：华南X79
* CPU：e3 1230 v2（或其他主频高于3.0Ghz的e3 v2）
* 内存：4\*8G
* 电源：600w（金牌）
* 固态：128G
* 机械：（根据自己实际使用来定，建议raid1防止数据损失，有条件建议上NAS）
* 散热：静音风扇（要求噪音最小）

#### 高配（适合工作室主体）

* 机箱：2U、8盘位以上（R720、R730等）
* 机柜：1.2\~1.6米高、1米以上深度（附加一块挡板托盘）
* 导轨：合适服务器的就行（请勿忘记购买）
* 主板：华南X79
* CPU：e5 2680 v2（或其他主频高于3.0Ghz的e5 v2）
* 内存：4\*8G\~8\*8G
* 电源：600w（金牌，尽可能双电源）
* 固态：128G
* 机械：（根据自己实际使用来定，建议raid1防止数据损失）
* 散热：机箱自带风扇即可，对音量无要求

#### Q\&A

Q：对于服务器的存放有什么要求？

A：建议放在通风散热好的地方，如果放在密闭空间推荐安装空调降温，有条件的还可以购买烟雾报警器，安全第一！

Q：为什么不能使用个人电脑作为服务器？

A：理论上来说，在普通PC中安装虚拟机、构建镜像后确实可以跑服务，但是我们没试过（扶额），而且普通电脑没有ECC纠错内存，且I系CPU不如E系稳定，个人仅推荐用于素材矩阵中的slave渲染节点（下文会提到），可以尝试但是得做好踩坑的心理准备。

Q：由于挖矿风潮最近服务器价格攀升，在哪里可以买到价格相对优惠的硬件呢？

A：这个确实是个难题，而且正是因为这件事导致整个矩阵的发布延期了一个月……个人和团队还在持续寻找供应商，暂时的建议是去淘宝看看，或者去闲鱼捡垃圾。

### 公有云

公有云一般指提供公网IP的VPS供应商，百度云、腾讯云、阿里云都有提供这方面的服务；但是由于我们是要从YouTube上同步视频，而且未来可能会安装一些「附加」服务以供更好的网上冲浪服务（懂的都懂），所以更推荐香港的IP和VPS。

#### 购买VPS

* 现金付款：<https://www.lowendtalk.com>
* 虚拟货币付款：<https://bitcoin-vps.com>
* 推荐商家：[https://www.dmit.io](https://www.dmit.io/)

#### 购买域名

* 阿里万网（常用域名）：[https://wanwang.aliyun.com/domain](https://wanwang.aliyun.com/domain/)
* porkbun（冷门域名）：[https://porkbun.com](https://porkbun.com/)

#### 宝塔管理面板

为了方便管理，推荐在公有云上安装宝塔管理面板，本教程很多内容也会依赖此管理框架：

```
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh
```

装好宝塔之后选择LNMP（Nginx+MySQL+PHP）：

![](/files/-Mbz7BwX32y5OnvDBOI7)

**（注意，私有云请勿安装宝塔管理面板）**

#### Q\&A

（等待补充）

### 云服务

目前仅**素材矩阵**需要云服务，仅配置其他矩阵不需要进行如下配置；不过未来可能更多业务也会需要，所以就特别加了一栏；若需要配置素材矩阵，可以按照下文来准备下各云服务平台的账号。

#### 飞书提醒

每当素材处理完成之后，飞书机器人将发送一条消息通知；首先注册和下载飞书客户端，接着建立群组：

![](/files/-MbylBMQDkpxKeDqtCdm)

![](/files/-Mbyl_PFw1NE3uFBy0cb)

![](/files/-Mbyo9jtEl1vvvwV28U0)

![](/files/-MbyoF71mkerlbBp9c7G)

![](/files/-MbyoP_8MrcZOUYXomAm)

记录下这串webhook地址，后边会用到

#### 腾讯云（图像识别）

识别率相对较高的AI图像识别服务提供方，注册与开通服务流程如下：

首先访问腾讯云官网，并注册账号：<https://cloud.tencent.com>

接着前往图像分析页面：<https://console.cloud.tencent.com/tiia/detectlabel>

![](/files/-MbqL03GndfveAMzM62_)

选择开通服务：

![](/files/-MbqLK6z1G2ZEJq1JtD9)

然后去到控制台秘钥管理：<https://console.cloud.tencent.com/cam/capi>

![](/files/-MbqN-hrk96gG3qrDfY_)

如果不放心可以另开一个子账号，简单来说直接用主账号就行，注意保密（尤其不要往仓库上push）

![](/files/-MbqNL7xjT1ehIVpwihZ)

接着从以下三个地点里挑一个离自己家最近的，记下地域代码：

![](/files/-MbyWygwBT1rvqQ_ASyx)

在本地记下上述三个值，后边会用得上。

#### 火山引擎（图像转漫画）

本功能依赖独立域名和公有云，具体功能为将输入的图像转换为动漫风格，未来可能会加入更多的AI功能助力图片编辑，故特此添加；

![火山引擎还在不断地推出新的功能……](/files/-Mbw6Ak864_UOy8kw6fn)

当然这也是可选功能，不要也行；首先需要准备一个独立的二级域名，比如image.你的域名.你的域名后缀，接着通过宝塔面板建站的方式或者在域名提供方申请SSL证书，获得证书和私钥，接下来会用到：

![这马赛克打了个寂寞.jpg](/files/-Mbvu5KLzFC9ohycqkUM)

![阿里万网可以来这里获得免费证书](/files/-MbvtsgFWZSU7LZyaZaI)

前往火山引擎[官网](https://www.volcengine.com)，注册账号，接着前往[ImageX图片服务](https://console.volcengine.com/imagex/overview/)，理论也有个像腾讯云一样的开通步骤；目前使用服务会收费，需要先去[这里](https://console.volcengine.com/finance/accountOverview/recharge/)充值个几块钱，但约等于免费，笔者至今为止处理了上万张图像，也只收了我几毛钱……进行完之后前往[域名配置](https://console.volcengine.com/imagex/certificate/)：

![](/files/-MbvtKLMcqgA9Im1e6V0)

填写完后前往图片服务管理新建服务：

![](/files/-Mbw3nUxwHCRlFF2zqT_)

之后会显示已绑定域名和CNAME值，这时需要把两者在域名解析后台那边关联起来：

![](/files/-Mbw4h0sax8kJ5uqFjc_)

![](/files/-Mbw5IhutaBqDdrMvq3C)

接着前往图片处理配置，按下列配置进行设置，并记录红框中的内容（正常格式为\~aaaa-bbbbbbbb-color-v1）：

![](/files/-Mbw8A3lLM-SDBvnybno)

然后去获取秘钥，记录到本地保存备用：

![](/files/-Mbw7P5IfAz2cAQLVssm)

![](/files/-Mbw8ZlGwWvbPuPUc58J)

#### 微软Azure服务（图像识别）

微软识图最牛逼的一点在于，它能够将图片转为文字描述（参考[此处](https://bytedance.feishu.cn/docs/doccnOUdAuHPfUeY3DMtK9HxGEf)），虽然准确率有待提高，但至少功能十分新颖，方便后期素材整理：

微软账户注册与登录略去不表，首先开启一个到用即付资源池：

![](/files/y84zNrtnuAdImFjJyIT8)

在订阅中新建一个资源组：

转到资源组：

创建资源：

创建认知服务：如图设置：

![](https://bytedancecampus1.feishu.cn/space/api/box/stream/download/asynccode/?code=YjYxYjAzODE1MjExNjU4ZWRhYjFlNzE0Y2VhNDM2MWJfemhHVGtGR0ZrZk1jRmNnaXdNcXA1YXdJdXVsa2M1UG1fVG9rZW46Ym94Y255SUtOejljUlFNcmJmaUV2Q3FpRTZmXzE2MjQ2OTI4NTY6MTYyNDY5NjQ1Nl9WNA)

![](https://bytedancecampus1.feishu.cn/space/api/box/stream/download/asynccode/?code=MTMzYzAxZDI4NTE3Yjc0NTg4OTdhMGNjOWFjNTIzMGVfeVplYVM3dHZJak1jZWxQY1hRT21LcjY0Y0hQQ1o0R1VfVG9rZW46Ym94Y25zWGJDT2cwZklWbldYZWFXY0ZlSEpnXzE2MjQ2OTI4NTY6MTYyNDY5NjQ1Nl9WNA)

![](https://bytedancecampus1.feishu.cn/space/api/box/stream/download/asynccode/?code=YmQzZjczY2YxNzFiZTkyNWY3OWY5NzgyMDlhZWNhZDdfUnFMTWIwb3Z0N1VzSzBRd1pYemVQd3NYalBERHI4VDhfVG9rZW46Ym94Y25Ed0VQUk1jbVpmS0dBZEx4cTR4aUdoXzE2MjQ2OTI4NTY6MTYyNDY5NjQ1Nl9WNA)

创建资源找到概述页面：

![](https://bytedancecampus1.feishu.cn/space/api/box/stream/download/asynccode/?code=OTA3YTgyMTc0ZTBhNjRmNWE3NGRmNzhjYzZmN2YzMzNfNGl5dGNJM0FoRmlnRjJvOFJWT2liQklONHFHUWZxZzZfVG9rZW46Ym94Y242SDdJZHVkalNMQmlRcmUyVllmSXdiXzE2MjQ2OTI4NTY6MTYyNDY5NjQ1Nl9WNA)

管理秘钥：

api使用得到json格式的数据：

```
"azure": {
  "url": "https://cognitiveservices-test002.cognitiveservices.azure.com/vision/v2.0/describe?language=zh&maxCandidates=10",
  "image_url": "https://xxx.com/prod-api/profile/image/",
  "clip_pic_url": "https://xxx.com/prod-api/profile/video_clip/clip_slot/",
  "auth": "xxx"
},
```

url为统一资源定位器[Analyze Image - Analyze Image - REST API (Azure Cognitive Services - Computer Vision) | Microsoft Docs](https://docs.microsoft.com/zh-cn/rest/api/computervision/3.1/analyze-image/analyze-image#code-try-0)打开微软文档，使用自己的api完成服务：![](https://bytedancecampus1.feishu.cn/space/api/box/stream/download/asynccode/?code=ZDJjMjk1YmMwMTA3MTk3NTMzYjVmNWZlM2Q3YWY3ZDhfQ1lQTnNQOE5CQ2pGcDNZSEFFUTBLRGV2MjV1TjhBYUtfVG9rZW46Ym94Y253R243V0hyVWgzYTBnNFJHWDFYZGpjXzE2MjQ2OTI4NTY6MTYyNDY5NjQ1Nl9WNA)![](https://bytedancecampus1.feishu.cn/space/api/box/stream/download/asynccode/?code=MmMzMDQ2YmI5NWRkOTk5ZDM0ZGYwYzZmMjczZmI3ZDRfMTRRczZySVJzcjl2RFRsUFJaM010eEJ1czFXbGkwcXhfVG9rZW46Ym94Y25CSWtrWUJBSmY1MUd3MzdwanYxZk01XzE2MjQ2OTI4NTY6MTYyNDY5NjQ1Nl9WNA)

#### 蓝宝石（音乐识别）

（正在和供应商积极沟通，暂未开通）

## 部署基础后台

（本后台将部署到私有云上，如果你只需要部署文学矩阵，可跳过此步骤）

> 本教程基于Ubuntu20.04构建，其他系统可能会有细微的差别；**默认用户名称为ubuntu，请各位大佬们在实际部署的时候换成自己的路径名！无论是执行命令还是修改文件配置，都必须检查好这一点！**

### 安装基础组件

首先记得换源：

```
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo nano /etc/apt/sources.list 
```

> 注：在nano中，用ctrl+k批量删除，ctrl+o保存，ctrl+x退出

```
deb https://mirror.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
deb https://mirror.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
deb https://mirror.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
deb https://mirror.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
deb https://mirror.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-proposed main restricted universe multiverse
```

然后刷新下：

```
sudo apt-get update
sudo apt-get upgrade
```

建议更改设置使得每次sudo命令时不需要输入密码（在此之前请先用「sudo passwd」更改root密码）：

![](/files/-Mbyttq7upuDQES4KlZI)

#### 配置远程连接

```
sudo apt-get install openssh-server
sudo ufw allow ssh
```

接着用终端管理工具就能登入了\~

#### 基础设施

需要安装的组件：MySQL、java8、Nginx、Docker、redis、RabbitMQ（基于docker）、Python、Neo4j

具体安装教程：<https://hocassian.cn/archives/tech/8164/>

> 如果遇到无法访问的情况，记得通过「sudo ufw allow 端口号」的方式开端口！

**RabbitMQ比较复杂，这里详细说下——**

首先下载并启动镜像：

```
sudo docker pull rabbitmq:management
sudo docker run -d -p 5672:5672 -p 15672:15672 --name hch_rabbitmq rabbitmq:management
```

接着开启15672端口，进入「ip:15672」：

![](/files/-Mbt6wRZNujIWFTsT819)

可以选择直接用guest用户操作，也可以新建用户；然后前往virtual hosts标签页，创建新的virtual-host（/media）：

![](/files/-Mbt7qOmXIMqDxkdhUR1)

仅部署基础后台，执行到这一步就OK了

### 拉代码&编译前后端

首先拉代码到本地：

```
cd ~/.
sudo mkdir build
sudo apt install git
sudo apt install screen
git clone git@github.com:hokaso/hocassian-media-matrix.git
```

先改后端配置，把示例文件去掉.bak后缀：

```
cd /home/ubuntu/build/hocassian-media-matrix/matrix-control-back-end/ruoyi-admin/src/main/resources/
sudo cp application.yml.bak application.yml
sudo cp application-linux.yml.bak application-linux.yml
```

接着修改配置：

```
sudo nano application-linux.yml
```

将之前配置好的数据填写进来：

![](/files/-Mbt8zliU0p889hSeiIa)

![别忘了把这个改成自己的路径名](/files/-MbtDGJtx0LvJMmGyQJl)

按Ctrl+O保存，Ctrl+X退出；接着配置第二个后端：

```
cd /home/ubuntu/build/hocassian-media-matrix/matrix-people-back-end/src/main/resources/
sudo cp application.yml.bak application.yml
```

同上，记得修改profile为自己的路径名，除此之外没别的需要更改的了；接着配置前端：

```
cd /home/ubuntu/build/hocassian-media-matrix/matrix-management-front-end
sudo cp vue.config.js.bak vue.config.js
```

主要还是以配置Nginx为主，打开Nginx配置文件：

```
sudo nano /etc/nginx/nginx.conf
```

存入以下配置（记得把ubuntu改为自己的路径名），其中prod这个路径我们后期会创建，专门用于存放生产环境的文件：

```
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    client_max_body_size 2048m;

    server {
        listen       14201;
        server_name  localhost;

        location / {
            root   /home/ubuntu/prod/matrix-management-front-end;
            try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }

        location /prod-api/ {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://localhost:8080/;
        }

        location /prod-nosql/ {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://localhost:8081/;
        }

        location ~ ^/prod-api/profile/video_clip/raw/.*\.(mp4)$ {
            deny all;
        }

        error_page 500 502 503 504 /50x.html;

        location = /50x.html {
            root   html;
        }
    }
}

```

重启Nginx：

```
sudo systemctl restart nginx
```

编译前后端，准备运行（还需要挂载硬盘才能运行，当然如果你对自己的本地存储空间有自信，比如不配置素材矩阵，可以不挂载……）

```
sudo apt-get install maven
cd /home/ubuntu/build/hocassian-media-matrix/matrix-control-back-end/
mvn clean package -Dmaven.test.skip=true
cd /home/ubuntu/build/hocassian-media-matrix/matrix-people-back-end/
mvn clean package -Dmaven.test.skip=true
cd /home/ubuntu/build/hocassian-media-matrix/matrix-management-front-end/
sudo apt-get install nodejs
sudo apt-get install npm
npm install --registry=https://registry.npm.taobao.org
npm run build:prod

# 移动包到指定位置
sudo mkdir /home/ubuntu/prod/
sudo mkdir /home/ubuntu/prod/matrix-control-back-end/
sudo mkdir /home/ubuntu/prod/matrix-people-back-end/
sudo mkdir /home/ubuntu/prod/matrix-management-front-end/
sudo cp /home/ubuntu/build/hocassian-media-matrix/matrix-control-back-end/ruoyi-admin/target/ruoyi-admin.jar /home/ubuntu/prod/matrix-control-back-end/
sudo cp /home/ubuntu/build/hocassian-media-matrix/matrix-people-back-end/target/matrix-people-1.1.0.jar /home/ubuntu/prod/matrix-people-back-end/
sudo cp -r /home/ubuntu/build/hocassian-media-matrix/matrix-management-front-end/dist/* /home/ubuntu/prod/matrix-management-front-end/
```

### 挂载硬盘&存储空间

#### 挂载本地硬盘

输入df -h，可以看到本地硬盘会以类似下图中/dev/sda1的形式列出，这取决于服务器实际硬盘的情况

![](/files/-MbqoojOhB2DtkfBjFCF)

选择合适的磁盘，执行下列命令挂载（记得把sdb1替换成自己查出的磁盘路径）

```
sudo mount /dev/sdb1 /home/ubuntu/matrix
```

#### 挂载网络硬盘

如果你选用的是主机+NAS的搭配方案，那么需要将NAS网络硬盘挂载到本地，首先需要安装nfs驱动：

```
sudo apt install -y cifs-utils
sudo apt-get install nfs-common
```

接着将特定文件目录挂载到本地（记得替换为自己的ip和文件路径）：

```
sudo mount -t nfs 192.168.x.x:/volume1/hks-matrix /home/ubuntu/matrix -o proto=tcp -o nolock
```

### 配置各项资源路径

首先在/home/ubuntu/matrix路径下建立如下几个文件夹（相当于在硬盘里建立）：

```
cd /home/ubuntu/matrix
sudo mkdir /video_matrix

# 将系统初始文件装载到文件夹
sudo cp -r /home/ubuntu/build/hocassian-media-matrix/matrix-management-front-end/bin/origin_pic/* /home/ubuntu/matrix/video_matrix/

# 如果需要配置素材矩阵
sudo mkdir material
sudo mkdir material/audio_music
sudo mkdir material/audio_music/audio_off_vocal
sudo mkdir material/audio_music_temp
sudo mkdir material/image
sudo mkdir material/image_temp
sudo mkdir material/video_clip
sudo mkdir material/video_clip/clip_slot
sudo mkdir material/video_clip/meta_info
sudo mkdir material/video_clip/preview
sudo mkdir material/video_clip/raw
sudo mkdir material/video_clip_temp

sudo cp /home/ubuntu/build/hocassian-media-matrix/matrix-management-front-end/bin/banner.mp4 /home/ubuntu/matrix/material/video_clip/preview/
```

配置软路由（为何不直接将硬盘挂载的路径设置为后台文件夹？这是非常危险的行为！如果不在Nginx里明确设置，黑客将有机会暴力扫描你的硬盘文件）：

```
# 建立后台直接访问的文件夹
sudo mkdir /home/ubuntu/store

# 将上边建立的文件夹软链到此文件夹
sudo ln -s /home/ubuntu/matrix/material/audio_music /home/ubuntu/store/
sudo ln -s /home/ubuntu/matrix/material/image /home/ubuntu/store/
sudo ln -s /home/ubuntu/matrix/material/video_clip /home/ubuntu/store/
sudo ln -s /home/ubuntu/matrix/video_matrix /home/ubuntu/store/

# 开放本地操作权限
sudo chmod -R 777 /home/ubuntu/
```

### 配置基础数据库

将sql文件导入本地数据库：

```
# 登入数据库
mysql -u root -p

# 建库
CREATE DATABASE media_matrix;

# 切库
use media_matrix;

# 导入
source /home/ubuntu/build/hocassian-media-matrix/matrix-people-back-end/sql/media_matrix.sql
```

### 配置开机启动

```
# 编辑自启逻辑脚本
sudo nano /etc/systemd/system/rc-local.service
```

写入以下文段：

```
[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

[Install] 
WantedBy=multi-user.target 
Alias=rc-local.service
```

接着写入具体脚本：

```
# 编写具体的自启动作
sudo nano /etc/rc.local
```

写入以下文段：

```
#!/bin/bash -e

# 初始化基础组件
sudo systemctl start nginx
sudo systemctl start mysql
sudo systemctl start redis-server
sudo systemctl start docker
sudo docker container start hch_rabbitmq
sudo sleep 60


# 本地挂载和网络挂载二选一，此处为网络挂载
sudo mount -t nfs 192.168.x.x:/你的路径 /home/ubuntu/matrix -o proto=tcp -o nolock

# 此处为本地硬盘挂载（记得把参数改为自己的）
sudo mount /dev/sdb1 /home/ubuntu/store

# 启动后端
screen_name="control"
sudo screen -dmS $screen_name
sudo screen -x -S $screen_name -p 0 -X stuff $'cd /home/hocassian/prod/matrix-control-back-end\nsudo java -jar ruoyi-admin.jar\n'
screen_name="person"
sudo screen -dmS $screen_name
sudo screen -x -S $screen_name -p 0 -X stuff $'cd /home/hocassian/prod/matrix-people-back-end\nsudo java -jar matrix-people-1.1.0.jar\n'

exit 0
```

配置完成后重启机器（sudo reboot），等待3-5分钟，访问「ip:14201」即可，初始账号&密码为：

```
账号：admin
密码：admin123
```

## 部署素材矩阵

### 配置运行环境

这是我们自认为做得最好的一个矩阵，在安装此矩阵前请确保基础后台已经安装完毕并能够正常打开；首先配置队列与队列交换机，素材矩阵中的一部分操作涉及队列，所以需要配置；打开「ip:15672」，点开Queues标签页：

![](/files/-MbyFan4n_QtLh9gRvDo)

依次添加「audioOptionalQueue」、「clipOptionalQueue」、「imageOptionalQueue」三个队列；然后点开Exchanges标签页，依次添加「audioOptionalExchange」、「clipOptionalExchange」、「imageOptionalExchange」三个交换机：

![](/files/-MbyMZ9IrVKjA-yHwqZh)

接着配置python批处理脚本中的各项参数；首先打开数据库配置：

```
sudo cp -r /home/ubuntu/build/hocassian-media-matrix/matrix-python-project/* /home/ubuntu/prod/matrix-python-project/
sudo cp /home/ubuntu/prod/matrix-python-project/db/config.json.bak /home/ubuntu/prod/matrix-python-project/db/config.json
sudo nano /home/ubuntu/prod/matrix-python-project/db/config.json
```

在红框中填写之前mysql数据库的账号和密码：

![](/files/-MbyZZrCdBBdV9Z7J8ac)

然后配置队列和云服务：

```
sudo cp /home/ubuntu/prod/matrix-python-project/material_process/config.json.bak /home/ubuntu/prod/matrix-python-project/material_process/config.json
sudo nano /home/ubuntu/prod/matrix-python-project/material_process/config.json
```

按照下列提示来配置就行了（没提示的地方不写也行，对于开发者来说应该知道这些是干啥用的）：

```
{
  "local_dev": {
    "ip": "",
    "port": 5672,
    "account": "",
    "password": "",
    "virtual_host": ""
  },
  "local_prod": {
    "ip": "127.0.0.1",
    "port": 5672,
    "account": "RabbitMQ账号",
    "password": "RabbitMQ密码",
    "virtual_host": "/media"
  },
  "remote_prod": {
    "ip": "",
    "port": 5672,
    "account": "",
    "password": "",
    "virtual_host": ""
  },
  "send_url": "飞书提醒机器人的webhook链接地址",
  "azure": {
    "url": "从Azure获取的地址",
    "image_url": "https://你的域名前缀（如果有，没有的话记得把.去掉）.你的域名.你的域名后缀/prod-api/profile/image/",
    "clip_pic_url": "https://你的域名前缀（如果有，没有的话记得把.去掉）.你的域名.你的域名后缀/prod-api/profile/video_clip/clip_slot/",
    "auth": "从Azure获取的鉴权token"
  },
  "tencent": {
    "app_id": "腾讯云secretID",
    "app_secret": "腾讯云secretKey",
    "area": "腾讯云地域代码"
  },
  "hifi": {
    "emo_url": "https://hi.hifiveai.com/hifive_ai/api/ai_music_classification_hai/",
    "hifi_url": "https://agm-api.hifiveai.com/home/uploadSearch",
    "hifi_url_token": "https://agm.hifiveai.com",
    "obtain_url": "https://agm-api.hifiveai.com/home/callback?id="
  },
  "imagex": {
    "app_id": "imageX的accessKeyId",
    "app_secret": "imageX的accessKeySecret",
    "service_id": "还记得之前配置时记录的格式为「~aaaa-bbbbbbbb-color-v1」的那一串代码嘛，把「bbbbbbbb」代表的填写过来",
    "prefix": "https://你在火山引擎里配置的域名前缀（和azure中配置的域名是不一样的）.你的域名.你的域名后缀/",
    "suffix": "（加上.jpeg后缀）~aaaa-bbbbbbbb-color-v1.jpeg"
  },
  "threads": {
    // 这里表示需不需要设置忙时和闲时（需要请改为true），因为服务器风扇有噪音，可以设置仅仅在晚上全功率运行
    "op": false,
    // ffmpeg的档位一共有5级，夜间忙时（peak）可设置为5，白天闲时（idle）为避免噪音可设置为1
    "peak": "5",
    "idle": "1",
    // 这个列表表示忙时的具体时间，此处设置为次日23点-早上7点
    "time": [23, 0, 1, 2, 3, 4, 5, 6, 7]
  },
  // 如果需要配置渲染子节点（下边会讲到），请填写你本机的ip
  "master_ip": ""
}
```

pip安装python基础库：

```
sudo pip3 install -r /home/ubuntu/prod/matrix-python-project/requirements.txt
```

还需要把ffmpeg下载到本地：

```
cd /home/ubuntu/prod/matrix-python-project/material_process
wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz
xz -d ffmpeg-git-amd64-static.tar.xz
tar -xvf ffmpeg-git-amd64-static.tar
```

把ffmpeg和ffprobe移动到material\_process路径下，就像这样：

![](/files/-Mc2aLR5gk6j0HJTMW01)

（其实仅命令也可以操作，由于ffmpeg版本不同命令也不同，所以不写具体命令了）给予运行权限：

```
sudo chmod 777 ffmpeg
sudo chmod 777 ffprobe
```

我们的speeter服务比较特殊，它本身也依赖ffmpeg，所以还得用apt来装一个……本来只用装一个的，但是只有最新的2021版本才有对bt2020的HDR做了适配，所以在apt源不更新的情况下，还是只能装两次，设置两个不同的运行环境。

```
sudo apt-get install ffmpeg
```

之后下载spleeter训练好的神经网络，用来歌曲转伴奏：

```
cd /home/ubuntu/prod/matrix-python-project/material_process
wget https://hocassian.cn/download/pretrained_models.zip
unzip pretrained_models.zip
```

一系列配置完成后就可以开启素材矩阵相关的服务了：

```
screen -S python
cd /home/ubuntu/prod/matrix-python-project
python3 material_process/starter.py
```

按下Ctrl+A、Ctrl+D退出screen，如果需要进入可以使用「screen -r python」，接着配置开机自启，这样就算断电也能恢复：

```
sudo nano /etc/rc.local
```

还是打开这个脚本，

### 配置内网访问

接着还需要内网中的其他设备也能访问，此处拿windows添加网络位置为例：

![最终效果↑](/files/-Mbz3V3Awf9IIsGBVQU8)

首先安装Samba文件共享协议：

```
sudo apt -y install samba
sudo nano /etc/samba/smb.conf
```

打开编写配置文件：

![](/files/-Mbz46LqPqugj0Ne2m1I)

把红框内配置改为以下（记得替换为自己的路径）：

![](/files/-Mbz4JwYHOO55tf_ZCMq)

设置自己的用户名和密码：

```
sudo useradd 自定义姓名
sudo smbpasswd -a 自定义姓名
```

最后重启服务：

```
sudo service smbd restart
```

在windows上添加下网络位置就行了：

![](/files/-Mbz5aO7ofoLbZNBE8gF)

此时我们可以将素材按种类拖入这三个临时文件夹，之后回到面板点击「素材导入」就能正式开始使用这套系统了，具体的使用教程可以看隔壁教程栏：

![](/files/-MbzAS2v-IgNbMxIdh6D)

![](/files/-MbzVaHas90kZJ_umc3p)

### 配置前端

如果希望展示自己的素材，可以选择配置前端；和之前的配置类似，先对前端代码进行编译，之后再把编译好的文件转移到生产环境：

```
cd /home/ubuntu/build/hocassian-media-matrix/material-front-end/
sudo cp vue.config.js.bak vue.config.js
npm run build:prod
sudo mkdir /home/ubuntu/prod/material-front-end
sudo cp -r /home/ubuntu/build/hocassian-media-matrix/material-front-end/dist/* /home/ubuntu/prod/material-front-end/
```

记得配置Nginx（加多一个server对象）：

```
server {
        listen       14203;
        server_name  localhost;

        location / {
            root /home/ubuntu/prod/material-front-end;
            try_files $uri $uri/ /index.html;
            index index.html index.htm;
        }

        location /prod-api/ {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://localhost:8080/;
        }

        location ~ ^/prod-api/profile/video_clip/raw/.*\.(mp4)$ {
            deny all;
        }

        error_page 500 502 503 504 /50x.html;

        location = /50x.html {
            root   html;
        }
    }

```

重启Nginx服务后，打开「ip:14203」即可访问：

```
sudo systemctl restart nginx
```

### 配置开机启动

注意：这里存在一个问题，spleeter只能以普通用户的身份安装和运行，切到root身份之后无论是安装还是运行都会报错，但是目前我们教程里的开机自启都是默认以root用户身份启用的，我们试了很多方法，要么开机自启时使用普通用户，要么想尽方法把spleeter装到root那一侧，但都失败了……**所以现在求大神解决……目前由于以上问题，只能手动启用脚本，非常遗憾……**

### **配置渲染节点**

如果你在本地还有其他计算单元，可以协助分担一些渲染工作；和主要节点配置方案类似，运行时请在对应机器上运行slave\_starter.py

```
git clone git@github.com:hokaso/hocassian-media-matrix.git
sudo cp /home/ubuntu/hocassian-media-matrix /home/ubuntu/prod
cd /home/ubuntu/prod

# 记得创建各项配置文件config.json、配置ffmpeg、配置spleeter训练集

python3 material_process/slave_starter.py
```

## 部署视频矩阵

### 前端配置

视频矩阵可以展示主体视频作品，打造私域流量，且某种意义上规避「信息霸权」式审查；本地编译→部署→启用：

```
cd /home/ubuntu/build/hocassian-media-matrix/video-front-end/
sudo cp vue.config.js.bak vue.config.js
npm run build
sudo mkdir /home/ubuntu/prod/video-front-end
sudo cp -r /home/ubuntu/build/hocassian-media-matrix/video-front-end/dist/* /home/ubuntu/prod/video-front-end/
```

Nginx更新配置文件（加多一个server对象）：

```
server {
        listen       14202;
        server_name  localhost;

        location / {
            root /home/ubuntu/prod/video-front-end;
            try_files $uri $uri/ /index.html;
            index index.html index.htm;
        }

        location /prod-api/ {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://localhost:8080/;
        }

        location ~ ^/prod-api/profile/video_clip/raw/.*\.(mp4)$ {
            deny all;
        }

        error_page 500 502 503 504 /50x.html;

        location = /50x.html {
            root   html;
        }
    }
```

重启Nginx服务后，打开「ip:14202」即可访问：

```
sudo systemctl restart nginx
```

### 自动同步

如果不打算从YouTube上同步视频的话，就得手动往矩阵上传视频了……对于在油管有投稿或者打算投稿的小伙伴，你们可以选择配置以下自动同步脚本；首先配置代理，需要在公有云和私有云分别配置服务端和客户端；先配置服务端，进入公有云后台，装shadowsocks软件包：

```
sudo pip3 install shadowsocks
```

之后是加速必备的BBR：

```
sudo wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh
```

验证方法：

```
$ uname -r
# 查看内核版本，显示为最新版就表示 OK 了
# ————————————
$ sysctl net.ipv4.tcp_available_congestion_control
# 返回值一般为：
# net.ipv4.tcp_available_congestion_control = bbr cubic reno
# ————————————
$ sysctl net.ipv4.tcp_congestion_control
# 返回值一般为：
# net.ipv4.tcp_congestion_control = bbr
# ————————————
$ sysctl net.core.default_qdisc
# 返回值一般为：
# net.core.default_qdisc = fq
# ————————————
$ lsmod | grep bbr
# 返回值有 tcp_bbr 模块即说明bbr已启动。
```

由于2020年发布的openssl 1.1.0版本中，因为安全问题废弃了 `EVP_CIPHER_CTX_cleanup()` 函数而引入了 `EVE_CIPHER_CTX_reset()` 函数，但shadowsocks项目在18年就停止维护了，所以需要手动更改软件包中的部分代码（否则启动失败）：

```
sudo nano /usr/local/lib/python3.8/dist-packages/shadowsocks/crypto/openssl.py
```

[使用nano全局替换](https://www.cnblogs.com/yaos/p/6950890.html)，将全局中两个cleanup关键字换为reset，Ctrl+O保存Ctrl+X退出；接着编辑配置文件：

```
sudo nano /etc/ss-conf.json
```

自定义各项参数：

```
{ 
        "server": "0.0.0.0", 
        "server_port": 8080, // 改为自己的
        "local_address": "127.0.0.1", 
        "local_port": 1080, 
        "password": "password", // 改为自己的
        "timeout": 600, 
        "method": "aes-256-cfb" // 推荐这个
} 
```

编辑完后，Ctrl+O保存Ctrl+X退出；最后运行下列命令启动：

```
sudo ssserver -c /etc/ss-conf.json -d start 
```

有的vps网络管理比较严格，需要手动开一下端口允许入口流量：

```
sudo ufw allow 8080 // 端口改为自己的
```

服务端配置完并开启之后，转到本地配置客户端，同样安装ss：

```
sudo pip3 install shadowsocks
```

还是更改openssl相关代码（客户端就不用装BBR了）：

```
sudo nano /usr/local/lib/python3.8/dist-packages/shadowsocks/crypto/openssl.py
```

[使用nano全局替换](https://www.cnblogs.com/yaos/p/6950890.html)，将全局中两个cleanup关键字换为reset，Ctrl+O保存Ctrl+X退出；接着编辑配置文件：

```
sudo nano /etc/ss-conf.json
```

自定义各项参数：

```
{ 
        "server": "100.100.100.100", // 改为自己的服务端ip
        "server_port": 8080, // 改为自己的服务端port
        "local_address": "127.0.0.1", 
        "local_port": 1080, 
        "password": "password", // 改为自己的服务端密码
        "timeout": 600, 
        "method": "aes-256-cfb" // 改为自己的服务端加密方式
} 
```

编辑完后，Ctrl+O保存Ctrl+X退出，开启本地客户端服务：

```
sudo sslocal -c /etc/ss-conf.json -d start
```

这样代理就打通了，接着配置python同步脚本；打开此脚本的配置：

```
sudo cp /home/ubuntu/prod/matrix-python-project/sync_ytb_video/config.json.bak /home/ubuntu/prod/matrix-python-project/sync_ytb_video/config.json
sudo nano /home/ubuntu/prod/matrix-python-project/sync_ytb_video/config.json
```

注意，配置了cookies可以有效防止油管的反爬，尤其是爬自己的视频，带上cookie油管就不管了。那么如何获取油管的cookie呢？先登录油管账号，接着按f12，切到Network，切到XHR，随便选一个点进去，切到header，找到cookie，是非常长的一串代码，把它复制到配置文件中对应位置。

![](/files/-Mc-H3JTCSp9gRH3gVHC)

之后去后台配置需要同步的账号：

![](/files/-Mc-VmUaq6di1n4UIuEp)

配置好后就启动吧：

```
screen -S ytb
cd /home/ubuntu/prod/matrix-python-project/sync_ytb_video
python3 ytdl.py
```

等待程序运行完毕即可，以及最好设置一下开机启动，系统会自动扫描（周期为每周一次）：

```
screen_name="ytb"
screen -dmS $screen_name
screen -x -S $screen_name -p 0 -X stuff $'cd /home/ubuntu/prod/matrix-python-project\npython3 sync_ytb_video/ytb_update_clock.py\n'
```

## 部署文学矩阵

首先给网站准备好一个域名（或二级域名），做好解析；进入宝塔面板，安装WordPress：

![](/files/-Mc-d0VRcawGzHX3FdZL)

改为刚刚设置好的域名，点击提交：

![](/files/-Mc04N-dEDpwY7mntVX0)

![](/files/-Mc-j-fV6OODvrcVJ4tB)

点击链接，一路跟着配置：

![](/files/-Mc-j9Avqeu8qCBaDPNH)

![](/files/-Mc-jCdDKHoS7UPow6TK)

把刚刚获取的信息复制过来：

![](/files/-Mc-jafMbiubVonFMzLp)

![](/files/-Mc-jdfduhhdGbdQJHzw)

根据主体信息来配置（下边仅为示例）：

![](/files/-Mc-jreerABReFM026j6)

![](/files/-Mc-kK5gfYQzHaegzZSz)

用刚刚的账号密码登陆：

![](/files/-Mc-kTNwmVWJF63ifvcl)

关于主题，你可以点击外观选项来进行配置，就个人而言，目前我感觉最棒的wp主题应该是这个：<https://2heng.xin/theme-sakura/>，比较适合个人为主体的创作者，具体配置教程可以去他们网站看看\~

![](/files/-Mc02MNE2VdeQxBxt2c0)

接下来就是重头戏了，需要配置「QQ World收藏家」来同步主体在各种平台发布的文章，进入[官网](https://www.qqworld.org/product/qqworld-collector)下载插件包，我们先安装插件：

![](/files/-Mc02hI1XHhycL1fJcWb)

等待自动安装完成后（可能会比较久），进入标签页，选择激活试用站长版（正常来说这个够用了）：

![](/files/-Mc04xCq-QtyChcVTGH-)

但是由于某些不可抗力的因素，目前该插件的合作方暂时停止了试用的部分功能，需要开通的话得联系管理员：

![](/files/-Mc06MCgKRkoT1CsAftd)

其他的介绍可以去看看这个视频：<https://www.bilibili.com/video/av28517524>

这个是他们的[官网](https://www.qqworld.org)，之后与文学矩阵文章同步相关的服务全权交由他们负责，关于购买和采集讨论可以直接和他们的开发团队沟通\~

![](/files/-Mc07-HIILHM6_fjboNZ)

## 部署创作矩阵

（目前有的功能即后台登陆后第一个界面，其他功能还在开发中，故无需额外配置）

## 部署分发矩阵

（还在开发中，敬请期待）

## 部署对外服务

此处以公有云+宝塔面板为例演示快捷配置；先在本地和vps上分别放上frp，在[这里](https://github.com/fatedier/frp/releases/tag/v0.37.0)挑一个和自己系统适配的编译版本，一会我们要用它来建立内网穿透：

![](/files/-Mc20MB3HFiWz7wLtkaG)

解释一下frp的运行机制，部署在本地的叫做frp客户端，负责接收frp服务端传来的信息，和发送数据给frp服务端（vps），而这个服务端是安装在vps上的，专门接收访问用户传来的信息，并将这个信息转发给frp客户端，客户端处理好之后又把这个信息转回去，由服务端推送给用户。这个处理机制有点像代理，如果你了解过相关的知识，相信不难理解的。

下载完之后，我建议大家在本地解压并编辑各项参数，然后再通过FTP或者SFTP的形式上传到服务器，这样的话好处有两个，其一是如果你云服务器要换了，直接关闭frp服务然后重新找另一个服务器把相同的配置文件和运行文件一传，直接执行就能短时间内完成变更。![](https://i0.hdslb.com/bfs/article/c44fe72d39dad4de85e4c246898bb6e0116cafa1.png@437w_151h_progressive.webp)

![](/files/-Mc21o3-3H9jTu5l3R1O)

其中，frpc是客户端（client），frps是服务端（server），千万要厘清，不要弄混了。服务端配置示例：

```
[common]
server_addr = 0.0.0.0 # frp服务所使用的端口（TCP），建议保持不变
bind_port = 7000 # 和刚刚那个server_port相对应，建议填写7000
dashboard_port = 6443 # 这是一个frp的控制面板，访问「云服务器公网ip:端口6443」就能访问了，下边会详细说明
authentication_timeout = 9000 # 没有的话加一个，设置为9000，时间长一点没关系，不然以后出什么time_out错误还是得回来改这里。
dashboard_user = 上述控制面板的登录名，自定义
dashboard_pwd = 上述控制面板的登陆密码，自定义
token = 相当于一个验证用的密码，只有两个服务器配置相同的密码才能通讯，防止第三方恶意利用你的云服务器。
```

![](/files/-Mc22TAxCENlVZlsw_YM)

客户端配置示例：

```
[common]
server_addr = 你云服务器的ip地址
server_port = 7000 # frp控制信号于两个服务器间通讯的端口（建议填写7000）
token = 刚刚说的那个验证密码，记得保持一致。

[op-front-end]
type = tcp
local_ip = 127.0.0.1
local_port = 14201
remote_port = 4201

[video-front-end]
type = tcp
local_ip = 127.0.0.1
local_port = 14202
remote_port = 4202

[material-front-end]
type = tcp
local_ip = 127.0.0.1
local_port = 14203
remote_port = 4203

```

这里以4201\~4203端口举例，可以自行改为其他端口；此时可以通过「公网ip:端口号」的方式来验证；接着在宝塔上配置反向代理，用域名也能访问网页：

![](/files/-Mc262DkG_GIz3bsj2ix)

推荐整一个SSL：

![](/files/-Mc28wWSJ96S_tkHmn5f)

最后就能通过域名访问位于本地的各项服务了\~

## 系统更新

暂时还没有找到合适的自动更新方案，手动更新可以通过「拉代码→重新编译→重启服务」的方式实现：

```
cd /home/ubuntu/build/hocassian-media-matrix
git pull
cd /home/ubuntu/build/hocassian-media-matrix/matrix-control-back-end/
mvn clean package -Dmaven.test.skip=true
cd /home/ubuntu/build/hocassian-media-matrix/matrix-people-back-end/
mvn clean package -Dmaven.test.skip=true
cd /home/ubuntu/build/hocassian-media-matrix/matrix-management-front-end/
npm install --registry=https://registry.npm.taobao.org
npm run build:prod
cd /home/ubuntu/build/hocassian-media-matrix/matrix-management-front-end/
npm install --registry=https://registry.npm.taobao.org
npm run build:prod
cd /home/ubuntu/build/hocassian-media-matrix/video-front-end/
npm run build
cd /home/ubuntu/build/hocassian-media-matrix/material-front-end/
npm run build:prod


# 移动包到指定位置
sudo cp /home/ubuntu/build/hocassian-media-matrix/matrix-control-back-end/ruoyi-admin/target/ruoyi-admin.jar /home/ubuntu/prod/matrix-control-back-end/
sudo cp /home/ubuntu/build/hocassian-media-matrix/matrix-people-back-end/target/matrix-people-1.1.0.jar /home/ubuntu/prod/matrix-people-back-end/
sudo cp -r /home/ubuntu/build/hocassian-media-matrix/matrix-management-front-end/dist/* /home/ubuntu/prod/matrix-management-front-end/
sudo cp -r /home/ubuntu/build/hocassian-media-matrix/video-front-end/dist/* /home/ubuntu/prod/video-front-end/
sudo cp -r /home/ubuntu/build/hocassian-media-matrix/material-front-end/dist/* /home/ubuntu/prod/material-front-end/
sudo cp -r /home/ubuntu/build/hocassian-media-matrix/matrix-python-project/* /home/ubuntu/prod/matrix-python-project/

```

之后重启系统即可完成更新\~
