构建部署

本教程基于Ubuntu20.04构建,其他系统可能会有细微的差别

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

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

矩阵依赖

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

私有云

公有云

云服务

是否付费

素材矩阵

(必需)

(非必需,若无此模块外网无法访问,且部分依赖独立域名的云服务无法使用)

(非必需,若无此模块无法AI打标签)

云服务需要付费,普通个人主体使用,平均一年十多块钱

文学矩阵

(非必需)

(必需)

(非必需)

由参与机构提供的服务,同步文章功能需要付费,一次购买永久使用,价格为300元

视频矩阵

(必需)

(非必需,若无此模块只能手动上传视频)

(非必需)

硬件费用+vps费用+域名费用

创作矩阵

(必需)

(非必需)

(非必需)

硬件费用

分发矩阵(开发中)

(必需,且需要额外配置安卓手机)

(非必需)

(非必需)

暂无

前期准备

私有云

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

低配(适合个人主体)

  • 机箱:静音防尘机箱,若盘位不够可考虑另购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

购买域名

宝塔管理面板

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

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

装好宝塔之后选择LNMP(Nginx+MySQL+PHP):

(注意,私有云请勿安装宝塔管理面板)

Q&A

(等待补充)

云服务

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

飞书提醒

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

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

腾讯云(图像识别)

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

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

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

选择开通服务:

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

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

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

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

火山引擎(图像转漫画)

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

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

前往火山引擎官网,注册账号,接着前往ImageX图片服务,理论也有个像腾讯云一样的开通步骤;目前使用服务会收费,需要先去这里充值个几块钱,但约等于免费,笔者至今为止处理了上万张图像,也只收了我几毛钱……进行完之后前往域名配置

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

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

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

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

微软Azure服务(图像识别)

微软识图最牛逼的一点在于,它能够将图片转为文字描述(参考此处),虽然准确率有待提高,但至少功能十分新颖,方便后期素材整理:

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

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

转到资源组:

创建资源:

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

创建资源找到概述页面:

管理秘钥:

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"
},

蓝宝石(音乐识别)

(正在和供应商积极沟通,暂未开通)

部署基础后台

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

本教程基于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密码):

配置远程连接

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」:

可以选择直接用guest用户操作,也可以新建用户;然后前往virtual hosts标签页,创建新的virtual-host(/media):

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

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

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

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

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

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

然后配置队列和云服务:

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路径下,就像这样:

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

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

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

打开编写配置文件:

把红框内配置改为以下(记得替换为自己的路径):

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

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

最后重启服务:

sudo service smbd restart

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

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

配置前端

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

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全局替换,将全局中两个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全局替换,将全局中两个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,是非常长的一串代码,把它复制到配置文件中对应位置。

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

配置好后就启动吧:

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:

改为刚刚设置好的域名,点击提交:

点击链接,一路跟着配置:

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

根据主体信息来配置(下边仅为示例):

用刚刚的账号密码登陆:

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

接下来就是重头戏了,需要配置「QQ World收藏家」来同步主体在各种平台发布的文章,进入官网下载插件包,我们先安装插件:

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

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

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

这个是他们的官网,之后与文学矩阵文章同步相关的服务全权交由他们负责,关于购买和采集讨论可以直接和他们的开发团队沟通~

部署创作矩阵

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

部署分发矩阵

(还在开发中,敬请期待)

部署对外服务

此处以公有云+宝塔面板为例演示快捷配置;先在本地和vps上分别放上frp,在这里挑一个和自己系统适配的编译版本,一会我们要用它来建立内网穿透:

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

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

客户端配置示例:

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

推荐整一个SSL:

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

系统更新

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

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/

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

最后更新于