# 构建部署

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

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

## 矩阵依赖

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

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

## 前期准备

### 私有云

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

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

![（图片仅供参考）](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-MboIFTm5Wa6u7pRWs78%2F-MbozEtuDpv7C2sQVBJI%2Fimage.png?alt=media\&token=0bdb20ac-6273-4826-ad42-2cd8d991bf26)

* 机箱：静音防尘机箱，若盘位不够可考虑另购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）：

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbz60W2xuRUk0zRCA11%2F-Mbz7BwX32y5OnvDBOI7%2Fimage.png?alt=media\&token=a2dae5fe-bf3c-4c3d-8933-6485507842f3)

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

#### Q\&A

（等待补充）

### 云服务

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

#### 飞书提醒

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbw8yN8PE2g6R41bQII%2F-MbylBMQDkpxKeDqtCdm%2Fimage.png?alt=media\&token=923e82b5-9dbd-48ec-899a-19dc69acf056)

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbw8yN8PE2g6R41bQII%2F-Mbyl_PFw1NE3uFBy0cb%2Fimage.png?alt=media\&token=4ee94789-a68f-4ca7-b805-aef4daf2bbb6)

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbw8yN8PE2g6R41bQII%2F-Mbyo9jtEl1vvvwV28U0%2Fimage.png?alt=media\&token=bace56d5-72b5-4c3d-aa62-379657e0ea44)

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbw8yN8PE2g6R41bQII%2F-MbyoF71mkerlbBp9c7G%2Fimage.png?alt=media\&token=03756a18-be90-464e-9131-7c750fc84000)

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbw8yN8PE2g6R41bQII%2F-MbyoP_8MrcZOUYXomAm%2Fimage.png?alt=media\&token=8afaa844-c7af-48cd-acbb-7f429cd06783)

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

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

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

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

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbq8iNSfz8_MR4qmeR-%2F-MbqL03GndfveAMzM62_%2Fimage.png?alt=media\&token=944f123f-01e9-4fed-a66a-8a17f127f13a)

选择开通服务：

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbq8iNSfz8_MR4qmeR-%2F-MbqLK6z1G2ZEJq1JtD9%2Fimage.png?alt=media\&token=40141ed6-3b23-4374-a4bc-2d0f07b8e475)

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-MbqMZ7V8kW5zrLiYlCp%2F-MbqN-hrk96gG3qrDfY_%2Fimage.png?alt=media\&token=2e08ea12-6fca-42ec-a671-3baa57e8d59f)

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-MbqMZ7V8kW5zrLiYlCp%2F-MbqNL7xjT1ehIVpwihZ%2Fimage.png?alt=media\&token=f3c5e7cc-8169-46ec-8c85-3671459959f2)

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbw8yN8PE2g6R41bQII%2F-MbyWygwBT1rvqQ_ASyx%2Fimage.png?alt=media\&token=4f91f4e5-a9f9-4048-a572-19a6885a2e0d)

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

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

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

![火山引擎还在不断地推出新的功能……](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-MbviUa5_a_KjoZFDdVz%2F-Mbw6Ak864_UOy8kw6fn%2Fimage.png?alt=media\&token=fc17d011-e426-4310-866a-3ee27217f358)

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

![这马赛克打了个寂寞.jpg](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-MbviUa5_a_KjoZFDdVz%2F-Mbvu5KLzFC9ohycqkUM%2Fimage.png?alt=media\&token=a99e51c2-d709-4bb3-ba9e-c1d1f7b1c880)

![阿里万网可以来这里获得免费证书](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-MbviUa5_a_KjoZFDdVz%2F-MbvtsgFWZSU7LZyaZaI%2Fimage.png?alt=media\&token=fc4da859-1073-4ef8-b060-7e6fe23aa7ec)

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-MbviUa5_a_KjoZFDdVz%2F-MbvtKLMcqgA9Im1e6V0%2Fimage.png?alt=media\&token=f0a1229a-0398-4f7e-afd5-28c0150193e8)

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-MbviUa5_a_KjoZFDdVz%2F-Mbw3nUxwHCRlFF2zqT_%2Fimage.png?alt=media\&token=5538be23-788b-4981-a2db-cecf0f7dde3b)

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-MbviUa5_a_KjoZFDdVz%2F-Mbw4h0sax8kJ5uqFjc_%2Fimage.png?alt=media\&token=10659dfa-2c02-479e-b353-72271681fada)

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-MbviUa5_a_KjoZFDdVz%2F-Mbw5IhutaBqDdrMvq3C%2Fimage.png?alt=media\&token=87ed3cda-e049-46a4-a11f-c1bdb4c216b6)

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-MbviUa5_a_KjoZFDdVz%2F-Mbw8A3lLM-SDBvnybno%2Fimage.png?alt=media\&token=6ec43e39-28fa-439e-a8f2-84d38b553ba0)

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-MbviUa5_a_KjoZFDdVz%2F-Mbw7P5IfAz2cAQLVssm%2Fimage.png?alt=media\&token=615c553d-5455-4bd5-9019-78578ee44aed)

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-MbviUa5_a_KjoZFDdVz%2F-Mbw8ZlGwWvbPuPUc58J%2Fimage.png?alt=media\&token=698e997a-747f-4658-9f7d-172c3965719e)

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

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

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mb_yp1lY_IP5LQlhmu8%2Fuploads%2Fv30RigOuYeGicTqcAh0n%2Fimage.png?alt=media\&token=4fac1c80-b35e-4f10-af2d-e526936cdce6)

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

转到资源组：

创建资源：

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

![](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密码）：

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbw8yN8PE2g6R41bQII%2F-Mbyttq7upuDQES4KlZI%2Fimage.png?alt=media\&token=6f79d1a0-ff42-4b44-a669-5918a6b70b7b)

#### 配置远程连接

```
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」：

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbsnv9A_NvTiEsaFojc%2F-Mbt6wRZNujIWFTsT819%2Fimage.png?alt=media\&token=9422c1d9-b715-4df6-a67f-82b1add7b0c8)

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbsnv9A_NvTiEsaFojc%2F-Mbt7qOmXIMqDxkdhUR1%2Fimage.png?alt=media\&token=8bea66ec-1426-4530-a613-4556e154b46c)

仅部署基础后台，执行到这一步就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
```

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbsnv9A_NvTiEsaFojc%2F-Mbt8zliU0p889hSeiIa%2Fimage.png?alt=media\&token=baa18611-e309-4a32-a0c6-6e31a9054c49)

![别忘了把这个改成自己的路径名](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbsnv9A_NvTiEsaFojc%2F-MbtDGJtx0LvJMmGyQJl%2Fimage.png?alt=media\&token=43421705-1ed7-4f51-8428-e968beecd42b)

按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的形式列出，这取决于服务器实际硬盘的情况

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-MbqogWPS1zPgB-Am_IW%2F-MbqoojOhB2DtkfBjFCF%2Fimage.png?alt=media\&token=8d67e77a-853d-4896-a9a0-629647c455e6)

选择合适的磁盘，执行下列命令挂载（记得把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标签页：

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbw8yN8PE2g6R41bQII%2F-MbyFan4n_QtLh9gRvDo%2Fimage.png?alt=media\&token=3249e624-3226-4ef3-ba38-d24a4ba97877)

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbw8yN8PE2g6R41bQII%2F-MbyMZ9IrVKjA-yHwqZh%2Fimage.png?alt=media\&token=280bc20f-7801-4865-b373-11822f988c62)

接着配置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数据库的账号和密码：

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbw8yN8PE2g6R41bQII%2F-MbyZZrCdBBdV9Z7J8ac%2Fimage.png?alt=media\&token=a8f4c8d3-a2de-4739-b982-532e0d31a3c9)

然后配置队列和云服务：

```
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路径下，就像这样：

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mc2TaEfGJncnZ8nWDW0%2F-Mc2aLR5gk6j0HJTMW01%2Fimage.png?alt=media\&token=6b92f01b-50c4-460f-9102-b7a4c6143860)

（其实仅命令也可以操作，由于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添加网络位置为例：

![最终效果↑](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbw8yN8PE2g6R41bQII%2F-Mbz3V3Awf9IIsGBVQU8%2Fimage.png?alt=media\&token=b8451fe9-45de-443e-b4c8-7014a7ea36c6)

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

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

打开编写配置文件：

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbw8yN8PE2g6R41bQII%2F-Mbz46LqPqugj0Ne2m1I%2Fimage.png?alt=media\&token=e7678148-0723-4ebb-8e85-2ea654848c90)

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbw8yN8PE2g6R41bQII%2F-Mbz4JwYHOO55tf_ZCMq%2Fimage.png?alt=media\&token=4f060941-3b26-4186-98a2-b74e8bfd69ca)

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

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

最后重启服务：

```
sudo service smbd restart
```

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbw8yN8PE2g6R41bQII%2F-Mbz5aO7ofoLbZNBE8gF%2Fimage.png?alt=media\&token=b1dc400d-dc38-4c93-b155-9ca1b0474984)

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbz60W2xuRUk0zRCA11%2F-MbzAS2v-IgNbMxIdh6D%2Fimage.png?alt=media\&token=47ed2db0-bd8d-4bf6-b6d2-5ee7b30f77a1)

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbz60W2xuRUk0zRCA11%2F-MbzVaHas90kZJ_umc3p%2Fimage.png?alt=media\&token=e7dd7278-b703-46fb-9777-595b24a2a9f2)

### 配置前端

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

```
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，是非常长的一串代码，把它复制到配置文件中对应位置。

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbz_gPOPM1isDaOoHyd%2F-Mc-H3JTCSp9gRH3gVHC%2Fimage.png?alt=media\&token=e99859a3-21f6-430a-9d8e-25c83df1a66b)

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbz_gPOPM1isDaOoHyd%2F-Mc-VmUaq6di1n4UIuEp%2Fimage.png?alt=media\&token=21a0da51-785b-48b3-8f00-1888eb6f4ebb)

配置好后就启动吧：

```
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：

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbz_gPOPM1isDaOoHyd%2F-Mc-d0VRcawGzHX3FdZL%2Fimage.png?alt=media\&token=5bb100e1-859b-4278-b8a2-e4f5635b5b1f)

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mc-lKYFFssLD2s_bSI7%2F-Mc04N-dEDpwY7mntVX0%2Fimage.png?alt=media\&token=69f618fe-ba7a-4ba2-98c3-974130268737)

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbz_gPOPM1isDaOoHyd%2F-Mc-j-fV6OODvrcVJ4tB%2Fimage.png?alt=media\&token=63d1a18b-a899-40bf-93e1-099412835560)

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbz_gPOPM1isDaOoHyd%2F-Mc-j9Avqeu8qCBaDPNH%2Fimage.png?alt=media\&token=178e635d-2bdb-4117-9921-5e349002c5dd)

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbz_gPOPM1isDaOoHyd%2F-Mc-jCdDKHoS7UPow6TK%2Fimage.png?alt=media\&token=f2a2c0a1-b742-4c52-b4e1-74c0614b8456)

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbz_gPOPM1isDaOoHyd%2F-Mc-jafMbiubVonFMzLp%2Fimage.png?alt=media\&token=baf2cf8d-a652-4a50-ac8d-7c00060d3782)

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbz_gPOPM1isDaOoHyd%2F-Mc-jdfduhhdGbdQJHzw%2Fimage.png?alt=media\&token=ca5cf215-303f-465f-957e-87a082b6fd66)

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbz_gPOPM1isDaOoHyd%2F-Mc-jreerABReFM026j6%2Fimage.png?alt=media\&token=bcf3bf01-ad20-4223-ac87-341d25f33183)

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbz_gPOPM1isDaOoHyd%2F-Mc-kK5gfYQzHaegzZSz%2Fimage.png?alt=media\&token=79137df1-36e5-435a-9f9d-71553a4ff4e9)

用刚刚的账号密码登陆：

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mbz_gPOPM1isDaOoHyd%2F-Mc-kTNwmVWJF63ifvcl%2Fimage.png?alt=media\&token=d0bb3522-d609-4124-8458-2527db63accb)

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mc-lKYFFssLD2s_bSI7%2F-Mc02MNE2VdeQxBxt2c0%2Fimage.png?alt=media\&token=300a0446-2002-459e-badb-c7e03334217b)

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mc-lKYFFssLD2s_bSI7%2F-Mc02hI1XHhycL1fJcWb%2Fimage.png?alt=media\&token=b6d4e1ac-7b85-46a0-8167-6b8cfe0e6eaa)

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mc-lKYFFssLD2s_bSI7%2F-Mc04xCq-QtyChcVTGH-%2Fimage.png?alt=media\&token=87e9c245-fd70-447a-aaa9-10a855e3bc02)

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mc05W_I4pwCah5xP422%2F-Mc06MCgKRkoT1CsAftd%2Fimage.png?alt=media\&token=95ad0545-509e-40b3-a7e1-918541b06184)

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

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mc05W_I4pwCah5xP422%2F-Mc07-HIILHM6_fjboNZ%2Fimage.png?alt=media\&token=90912c8b-ecbf-405d-b69b-3fc69d012230)

## 部署创作矩阵

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

## 部署分发矩阵

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

## 部署对外服务

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mc0AgFiI82iByeTdOj5%2F-Mc20MB3HFiWz7wLtkaG%2Fimage.png?alt=media\&token=61e2870e-61ce-4e51-b425-c492bf847a15)

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

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

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mc0AgFiI82iByeTdOj5%2F-Mc21o3-3H9jTu5l3R1O%2Fimage.png?alt=media\&token=d6a27ba9-6436-4d49-b413-e730fe63097f)

其中，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 = 相当于一个验证用的密码，只有两个服务器配置相同的密码才能通讯，防止第三方恶意利用你的云服务器。
```

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mc0AgFiI82iByeTdOj5%2F-Mc22TAxCENlVZlsw_YM%2Fimage.png?alt=media\&token=af690273-2155-4b7d-9a2a-e21c027e76e6)

客户端配置示例：

```
[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:端口号」的方式来验证；接着在宝塔上配置反向代理，用域名也能访问网页：

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mc0AgFiI82iByeTdOj5%2F-Mc262DkG_GIz3bsj2ix%2Fimage.png?alt=media\&token=7b048e41-8bbb-4470-ae54-806456442ab6)

推荐整一个SSL：

![](https://2640593600-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mb_yp1lY_IP5LQlhmu8%2F-Mc0AgFiI82iByeTdOj5%2F-Mc28wWSJ96S_tkHmn5f%2Fimage.png?alt=media\&token=f9fe0293-ca04-4875-af65-e25b81b5ee31)

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

## 系统更新

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

```
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/

```

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hocassian.gitbook.io/matrix/gou-jian-bu-shu.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
