Browse Source

更新 tnb 项目构建脚本

reghao 3 months ago
parent
commit
763389f2dc

+ 44 - 57
README.md

@@ -1,45 +1,50 @@
 ## 系统简介
 tnb 是一个 bilibili-like 的 VOD 系统, 使用前后端分离模式开发, 后端采用微服务, 整个系统包括下述项目:
-- [tnb](https://git.reghao.cn/reghao/tnb)  
-> tnb 后端系统  
-- [bnt](https://git.reghao.cn/reghao/bnt)  
-> tnb 后台管理系统
-- [oss-store](https://git.reghao.cn/reghao/oss)  
-> tnb 文件存储系统  
-- [tnbapp](https://git.reghao.cn/reghao/tnbapp)  
-> tnb 前台应用  
+- [tnb](https://git.reghao.cn/reghao/tnb)
+> tnb 后端系统
+- [tnbapp](https://git.reghao.cn/reghao/tnbapp)
+> tnb 前台应用
 
-## 构建依赖
-- os:Linux  
-> Windows 尚未实践
-- jdk:11
-- maven:3.9
+## 依赖版本
+### 构建依赖
+- os:Linux
+- jdk:17
+- maven:3.9.6
 - node:v16.19.0
 - npm:8.19.3
 
-## 第三方服务依赖
+### 第三方服务依赖
 - mysql:5.7
-- redis
-- rabbitmq
+- redis:6.0.16
+- rabbitmq:3.8.9
 - zookeeper:3.8.4
 - mongodb:4.4
+- nacos-server:v2.4.1
 - elasticsearch:7.17.18
 
 ## 构建部署
-构建部署流程如下:
-- 1.修改 tnb0/db/init_db.sh 脚本中 MySQL 的地址和帐号密码, 然后在 tnb0/db 目录下执行 init_db.sh 脚本初始化数据库
-- 2.修改 config/application.yml 文件中第三方服务依赖的地址和帐号密码等配置
-- 3.在 tnb0 目录下执行 build.sh 脚本构建应用
-- 4.构建成功后, 在 tnb0 目录下执行 start.sh 脚本启动所有应用
-> > bntweb 应用默认会创建 /opt/data/bntdata 目录用于存放数据  
-- 5.在 tnb0 目录下执行 shutdown.sh 脚本可停止所有应用
+```
+cd tnb0/srv
+
+# 启动第三方服务依赖
+bash start_thirdparty.sh
+
+# 初始化 MySQL 数据库
+bash init_db.sh
+
+# 编译构建后端和前端应用, 并且会构建 docker 镜像
+bash build.sh
+
+# 启动后端服务和前端应用的 docker 镜像
+bash docker_app.sh
+```
 
 ### oss-store 应用
 鉴于 oss-store 应用需要在本地磁盘上存储文件, 为了便于文件存储目录的更改, 故采用外部配置. 其配置文件(tmp/bin/oss-store/oss.yml) 的内容如下:
 ```
 spring:
   datasource:
-    url: jdbc:mysql://127.0.0.1:3306/reghao_oss_tdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
+    url: jdbc:mysql://127.0.0.1/reghao_oss_tdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
     username: test
     password: Test@123456
 server:
@@ -53,52 +58,34 @@ oss:
 
 ```
 > 第一步, 修改 basedir, store-host, store-dirs, console-host 等配置
-> - basedir  
+> - basedir
 > > 上传文件时 tomcat 存放的临时目录
-> - store-host  
+> - store-host
 > > oss-store 应用所在机器的地址
-> - store-dirs  
+> - store-dirs
 > > 实际存放文件的目录, 可配置为多个目录, 但必须保证每个目录挂载到不同的磁盘
-> - console-host  
-> > bntweb 应用所在机器的地址
+> - console-host
+> > tnb/file-service 应用所在机器的地址
 > 
-> 若 oss-store 和 bntweb 部署在同一台机器上, 那么只需要修改 basedir 和 store-dirs
+> 若 oss-store 和 tnb/file-service 部署在同一台机器上, 那么只需要修改 basedir 和 store-dirs
 > 
 > 第二步, 然后切换到 tmp/bin/oss-store 目录下后执行 start.sh 脚本启动应用
-> > oss-store 启动时会调用 bntweb 的 RPC 接口, 所以需要 bntweb 应用运行后再启动 oss-store
+> > oss-store 启动时会调用 tnb/file-service 的 RPC 接口, 所以需要 tnb/file-service 应用运行后再启动 oss-store
 > 
-> > 当然如果采用 aliyun-oss 存储文件, 那么就不需要使用 oss-store 应用
+> > 如果采用 aliyun-oss 存储文件, 那么就不需要使用 oss-store 应用
 
-## nginx 配置
-首先配置 hosts 文件, 在hosts 文件中添加下述映射:
+## hosts 文件配置
+在 /etc/hosts 文件中添加下述映射:
 ```
 # 指向 oss-store
 127.0.0.1 oss.reghao.cn
-# 指向 tnb
+# 指向 tnb 和 tnbapp
 127.0.0.1 api.reghao.cn
-# 指向 tnbapp
-127.0.0.1 tnb.reghao.cn
-# 指向 bntweb
-127.0.0.1 bnt.reghao.cn
 ```
 
-然后配置 nginx, 详见 nginx/nginx.conf 和 nginx/conf.d/tnb.conf 文件
-> 需要修改的是 nginx/conf.d/tnb.conf 文件中 tnb.reghao.cn 域名所在的 block
-> > 将 root 修改为 tmp/bin/tnbapp 目录的实际路径
-> 
-> 由于项目中用到了 websocket, 因此需要留意 nginx 对 websocket 的转发
-
 ## 使用系统
-后台系统地址(即 bntweb 应用)
-> http://bnt.reghao.cn
-> 
-> 默认提供三个帐号:
-> - 超级管理员帐号 admin   
-> > 帐号密码 admin12345678
-> - tnb 系统管理员帐号 gjstnb  
-> > 帐号密码 gjstnb12345678
-> - oss 系统管理员帐号 gjsoss  
-> > 帐号密码 gjsoss12345678
-
 前台系统地址(即 tnbapp 应用)
-> http://tnb.reghao.cn
+> http://reghao.cn
+
+## 其他
+本项目模块太多, 构建部署都太过繁琐, 推荐使用 [bnt](https://git.reghao.cn/reghao/bnt) 项目提供的 devops 系统来自动构建部署应用.

+ 54 - 62
build.sh

@@ -4,7 +4,6 @@ set -e
 
 env='test'
 base_dir=`pwd`
-config_dir="${base_dir}/config"
 proj_dir="${base_dir}/tmp/proj"
 bin_dir="${base_dir}/tmp/bin"
 
@@ -26,8 +25,6 @@ create_dirs() {
 clone_proj() {
     cd ${proj_dir}
     git clone --depth=1 https://git.reghao.cn/reghao/jutil
-    git clone --depth=1 https://git.reghao.cn/reghao/oss
-    git clone --depth=1 https://git.reghao.cn/reghao/bnt
     git clone --depth=1 https://git.reghao.cn/reghao/tnb
     git clone --depth=1 https://git.reghao.cn/reghao/tnbapp
 }
@@ -38,63 +35,12 @@ clone_proj() {
 build_dependencies() {
     cd ${proj_dir}/jutil
     mvn clean install -Dmaven.test.skip
-
-    cd ${proj_dir}/oss
-    mvn clean install -Dmaven.test.skip -pl oss-api
-    mvn clean install -Dmaven.test.skip -pl oss-sdk
-
-    ###############################################################################
-    # 安装 tnb 项目提供的依赖
-    ###############################################################################
-    cd ${proj_dir}/tnb
-    mvn clean install -am -Dmaven.test.skip -pl common
-    mvn clean install -am -Dmaven.test.skip -pl log
-    mvn clean install -am -Dmaven.test.skip -pl eureka/eureka-api/
-    mvn clean install -am -Dmaven.test.skip -pl account/account-api/
-    mvn clean install -am -Dmaven.test.skip -pl user/user-api/
-    mvn clean install -am -Dmaven.test.skip -pl message/message-api/
-    mvn clean install -am -Dmaven.test.skip -pl content/content-api/
-    mvn clean install -am -Dmaven.test.skip -pl file/file-api/
-    mvn clean install -am -Dmaven.test.skip -pl data/data-api/
-    mvn clean install -am -Dmaven.test.skip -pl search/search-api/
-
-    ###############################################################################
-    # 安装 bnt 项目提供的依赖
-    ###############################################################################
-    cd ${proj_dir}/bnt
-    mvn clean install -Dmaven.test.skip -pl admin-api
-}
-
-###############################################################################
-# 修改第三方服务依赖配置
-###############################################################################
-replace_server_config() {
-    cd ${config_dir}
-    java -jar deployer.jar application.yml ${proj_dir}
 }
 
 ###############################################################################
 # 构建后端应用
 ###############################################################################
 build_backend() {
-    ###############################################################################
-    # 构建 oss 项目 jar 包
-    ###############################################################################
-    cd ${proj_dir}/oss
-    mvn clean package -Dmaven.test.skip -pl oss-store -P${env}
-    
-    if [ ! -d ${bin_dir}/oss-store ]; then
-        mkdir ${bin_dir}/oss-store
-    fi
-    cp oss-store/bin/* ${bin_dir}/oss-store
-
-    ###############################################################################
-    # 构建 bnt 项目 jar 包
-    ###############################################################################
-    cd ${proj_dir}/bnt
-    mvn clean package -Dmaven.test.skip -pl web -P${env}
-    cp web/bin/bntweb.jar ${bin_dir}
-
     ###############################################################################
     # 构建 tnb 项目 jar 包
     ###############################################################################
@@ -109,6 +55,14 @@ build_backend() {
     cp content/content-service/target/tnb-content.jar ${bin_dir}
     cp data/data-service/target/tnb-data.jar ${bin_dir}
     cp search/search-service/target/tnb-search.jar ${bin_dir}
+
+    ###############################################################################
+    # oss-store jar 包
+    ###############################################################################
+    if [ ! -d ${bin_dir}/oss-store ]; then
+      mkdir ${bin_dir}/oss-store
+    fi
+    cp oss/oss-store/bin/* ${bin_dir}/oss-store
 }
 
 ###############################################################################
@@ -128,20 +82,58 @@ build_front() {
     cp -r dist/* ${bin_dir}/tnbapp
 }
 
+###############################################################################
+# 构建 tnb 应用 docker 镜像
+###############################################################################
+build_image() {
+  cd ${proj_dir}/tnb
+  commit_id=`git rev-parse HEAD | cut -c 1-8`
+  docker_prefix='tnb'
+
+  cd ${proj_dir}/tnb/eureka/eureka-server
+  docker build -t ${docker_prefix}/eureka:${commit_id} .
+
+  cd ${proj_dir}/tnb/gateway/
+  docker build -t ${docker_prefix}/gateway:${commit_id} .
+  
+  cd ${proj_dir}/tnb/account/account-service/
+  docker build -t ${docker_prefix}/account:${commit_id} .
+
+  cd ${proj_dir}/tnb/message/message-service/
+  docker build -t ${docker_prefix}/message:${commit_id} .
+
+  cd ${proj_dir}/tnb/file/file-service
+  docker build -t ${docker_prefix}/file:${commit_id} .
+
+  cd ${proj_dir}/tnb/user/user-service/
+  docker build -t ${docker_prefix}/user:${commit_id} .
+  
+  cd ${proj_dir}/tnb/content/content-service/
+  docker build -t ${docker_prefix}/content:${commit_id} .
+  
+  cd ${proj_dir}/tnb/search/search-service/
+  docker build -t ${docker_prefix}/search:${commit_id} .
+
+  cd ${proj_dir}/tnbapp
+  commit_id=`git rev-parse HEAD | cut -c 1-8`
+  docker_prefix='tnb'
+  docker build -t ${docker_prefix}/tnbapp:${commit_id} .
+}
+
 echo "创建 proj 目录和 bin 目录..."
-create_dirs
+#create_dirs
 
 echo "clone 项目..."
-clone_proj
+#clone_proj
 
 echo "构建依赖..."
-build_dependencies
-
-echo "修改第三方服务依赖配置..."
-replace_server_config
+#build_dependencies
 
 echo "构建后端应用..."
-build_backend
+# build_backend
 
 echo "构建前端应用..."
-build_front
+# build_front
+
+echo "构建 docker 镜像..."
+build_image

+ 0 - 34
config/application.yml

@@ -1,34 +0,0 @@
-log:
-  enabled: false
-  ws-url: ws://localhost:4030/ws/log/push
-  token: 012345678
-zookeeper:
-  host: 127.0.0.1
-  port: 2181
-mongodb:
-  host: 127.0.0.1
-  port: 27017
-  authentication-database: admin
-  username: dev
-  password: Dev@123456
-redis:
-  host: 127.0.0.1
-  port: 6379
-  password: Dev@123456
-rabbitmq:
-  host: 127.0.0.1
-  port: 5672
-  username: dev
-  password: Dev@123456
-mysql:
-  host: 127.0.0.1
-  port: 3306
-  username: dev
-  password: Dev@123456
-es:
-  host: 127.0.0.1
-  port: 9200
-  username: elastic
-  password: Eastic@123456
-eureka:
-  default-zone: http://localhost:6060/eureka/

BIN
config/deployer.jar


+ 0 - 38
db/init_db.sh

@@ -1,38 +0,0 @@
-#!/bin/bash
-
-###############################################################################
-# shell 脚本中执行 sql 语句
-###############################################################################
-
-host='127.0.0.1'
-username='dev'
-password='Dev@123456'
-
-db1='tnb_account_tdb'
-db2='tnb_content_tdb'
-db3='reghao_bnt_tdb'
-db4='reghao_oss_tdb'
-
-sql1="CREATE DATABASE IF NOT EXISTS ${db1} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;"
-sql2="CREATE DATABASE IF NOT EXISTS ${db2} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;"
-sql3="CREATE DATABASE IF NOT EXISTS ${db3} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;"
-sql4="CREATE DATABASE IF NOT EXISTS ${db4} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;"
-
-mysql -h${host} -u${username} -p${password} << EOF
-${sql1}
-${sql2}
-${sql3}
-${sql4}
-EOF
-
-cd schema
-db11='tnb_account_tdb'
-db21='tnb_content_tdb'
-db31='reghao_bnt_tdb'
-db41='reghao_oss_tdb'
-
-# 还原数据库结构和数据
-mysql -h${host} -u${username} -p${password} ${db11} < ${db1}.sql
-mysql -h${host} -u${username} -p${password} ${db21} < ${db2}.sql
-mysql -h${host} -u${username} -p${password} ${db31} < ${db3}.sql
-mysql -h${host} -u${username} -p${password} ${db41} < ${db4}.sql

+ 33 - 0
docker_app.sh

@@ -0,0 +1,33 @@
+#!/bin/bash
+
+###############################################################################
+# 运行 docker 镜像
+###############################################################################
+
+set -e
+
+function start() {
+  commit_id=`git rev-parse HEAD | cut -c 1-8`
+  docker run -d --name=tnbeureka --network=host -v /opt/log:/app/logs tnb/eureka:${commit_id}
+  docker run -d --name=tnbgateway --network=host -v /opt/log:/app/logs tnb/gateway:${commit_id}
+  docker run -d --name=tnbaccount --network=host -v /opt/log:/app/logs tnb/account:${commit_id}
+  docker run -d --name=tnbmessage --network=host -v /opt/log:/app/logs tnb/message:${commit_id}
+  docker run -d --name=tnbfile --network=host -v /opt/log:/app/logs tnb/file:${commit_id}
+  docker run -d --name=tnbuser --network=host -v /opt/log:/app/logs tnb/user:${commit_id}
+  docker run -d --name=tnbcontent --network=host -v /opt/log:/app/logs tnb/content:${commit_id}
+  docker run -d --name=tnbsearch --network=host -v /opt/log:/app/logs tnb/search:${commit_id}
+}
+
+function shutdown() {
+  docker stop tnbeureka && docker rm tnbeureka
+  docker stop tnbgateway && docker rm tnbgateway
+  docker stop tnbaccount && docker rm tnbaccount
+  docker stop tnbmessage && docker rm tnbmessage
+  docker stop tnbfile && docker rm tnbfile
+  docker stop tnbuser && docker rm tnbuser
+  docker stop tnbcontent && docker rm tnbcontent
+  docker stop tnbsearch && docker rm tnbsearch
+}
+
+start
+#shutdown

+ 0 - 123
nginx/conf.d/tnb.conf

@@ -1,123 +0,0 @@
-################################################################################
-# bnt.reghao.cn
-################################################################################
-server {
-   listen 80;
-   server_name bnt.reghao.cn;
-   access_log off;
-
-   location / {
-      proxy_set_header HOST $host;
-      proxy_set_header X-Real-IP $remote_addr;
-      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-      proxy_set_header X-Forwarded-Proto $scheme;
-
-      proxy_pass http://127.0.0.1:4030;
-   }
-   location /ws {
-      proxy_set_header Upgrade $http_upgrade;
-      proxy_set_header Connection $connection_upgrade;
-      proxy_cache off;
-      proxy_http_version 1.1;
-      proxy_buffering off;
-      proxy_read_timeout 100s;
-      proxy_set_header Host $host;
-      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-      proxy_set_header X-Forwarded-Proto $scheme;
-
-      proxy_pass http://127.0.0.1:4030;
-   }
-}
-
-################################################################################
-# oss.reghao.cn
-################################################################################
-server {
-   listen 80;
-   server_name oss.reghao.cn;
-   access_log off;
-
-   location / {
-      proxy_set_header HOST $host;
-      proxy_set_header X-Real-IP $remote_addr;
-      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-      proxy_set_header X-Forwarded-Proto $scheme;
-
-      proxy_pass http://127.0.0.1:4010;
-   }
-}
-
-################################################################################
-# api.reghao.cn
-################################################################################
-server {
-   listen 80;
-   server_name api.reghao.cn;
-   access_log off;
-
-   location / {
-      proxy_set_header HOST $host;
-      proxy_set_header X-Real-IP $remote_addr;
-      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-      proxy_set_header X-Forwarded-Proto $scheme;
-      proxy_send_timeout 600;
-      proxy_read_timeout 600;
-      proxy_connect_timeout 600;
-
-      proxy_pass http://127.0.0.1:6000;
-   }
-   location /api/data/video/hot {
-      proxy_http_version 1.1;
-      proxy_set_header Connection "";
-      proxy_set_header X-Real-IP $remote_addr;
-      proxy_set_header Host $host;
-      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-      proxy_read_timeout 86400s;
-      proxy_buffering off;
-      proxy_cache off;
-
-      proxy_pass http://127.0.0.1:6000;
-   }
-   location /ws {
-      proxy_set_header Upgrade $http_upgrade;
-      proxy_set_header Connection $connection_upgrade;
-      proxy_cache off;
-      proxy_http_version 1.1;
-      proxy_buffering off;
-      proxy_read_timeout 100s;
-      proxy_set_header Host $host;
-      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-      proxy_set_header X-Forwarded-Proto $scheme;
-
-      proxy_pass http://127.0.0.1:6000;
-   }
-}
-
-################################################################################
-# tnb.reghao.cn
-################################################################################
-server {
-   listen 80;
-   server_name tnb.reghao.cn;
-   access_log off;
-
-   root tnbapp/dist;
-   location / {
-      try_files $uri $uri/ /index.html;
-   }
-}
-
-# server {
-#    listen 80;
-#    server_name tnb1.reghao.cn;
-#    access_log off;
-
-#    location / {
-#       proxy_set_header HOST $host;
-#       proxy_set_header X-Real-IP $remote_addr;
-#       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-#       proxy_set_header X-Forwarded-Proto $scheme;
-
-#       proxy_pass http://127.0.0.1:8000;
-#    }
-# }

+ 6 - 3
shutdown.sh

@@ -1,5 +1,9 @@
 #!/bin/bash
 
+###############################################################################
+# 结束应用进程
+###############################################################################
+
 app_name0='tnb-eureka'
 app_name1='tnb-gateway'
 app_name2='tnb-account'
@@ -9,9 +13,8 @@ app_name5='tnb-file'
 app_name6='tnb-content'
 app_name7='tnb-data'
 app_name8='oss-store'
-app_name9='bntweb'
 
-for((i=0; i<=9; i++));
+for((i=0; i<=8; i++));
 do
     app_name=$(eval echo \${app_name$i})
 	pid=`ps aux | grep ${app_name} | grep -v 'grep' | tr -s ' '| cut -d ' ' -f 2`
@@ -22,4 +25,4 @@ do
         echo "kill "${app_name}" with pid "${pid}
         kill -15 ${pid}
     fi
-done
+done

+ 50 - 0
srv/init_db.sh

@@ -0,0 +1,50 @@
+#!/bin/bash
+
+set -e
+
+###############################################################################
+# 初始化数据库, 包括创建数据库和初始化数据库表
+###############################################################################
+
+base_dir=`pwd`
+cd ${base_dir}/schema
+
+host='127.0.0.1'
+username='dev'
+password='Dev@123456'
+
+db1='tnb_account_tdb'
+db2='tnb_content_tdb'
+db3='tnb_oss_tdb'
+
+db11='tnb_account_tdb'
+db21='tnb_content_tdb'
+db31='tnb_oss_tdb'
+
+create_db() {
+sql1="CREATE DATABASE ${db1} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;"
+sql2="CREATE DATABASE ${db2} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;"
+sql3="CREATE DATABASE ${db3} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;"
+
+mysql -h${host} -u${username} -p${password} << EOF
+ ${sql1}
+ ${sql2}
+ ${sql3}
+EOF
+}
+
+init_db() {
+  # 还原整个数据库结构(不包含数据)
+  mysql -h${host} -u${username} -p${password} ${db11} < ${db1}.sql
+  mysql -h${host} -u${username} -p${password} ${db21} < ${db2}.sql
+  mysql -h${host} -u${username} -p${password} ${db31} < ${db3}.sql
+
+  # 还原表数据到数据库
+#  mysql -h${host} -u${username} -p${password} ${db11} < msg_email_account.sql
+}
+
+echo "create db..."
+create_db
+
+echo "init db..."
+init_db

+ 17 - 0
srv/nginx/conf.d/oss.reghao.cn.conf

@@ -0,0 +1,17 @@
+################################################################################
+# oss.reghao.cn
+################################################################################
+server {
+   listen 80;
+   server_name oss.reghao.cn;
+   access_log /var/log/nginx/oss.reghao.cn.access.log main;
+
+   location / {
+      proxy_set_header HOST $host;
+      proxy_set_header X-Real-IP $remote_addr;
+      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+      proxy_set_header X-Forwarded-Proto $scheme;
+
+      proxy_pass http://127.0.0.1:4010;
+   }
+}

+ 61 - 0
srv/nginx/conf.d/reghao.cn.conf

@@ -0,0 +1,61 @@
+server {
+   listen 80;
+   server_name reghao.cn;
+   access_log /var/log/nginx/reghao.cn.access.log main;
+
+   location /api {
+      proxy_set_header HOST $host;
+      proxy_set_header X-Real-IP $remote_addr;
+      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+      proxy_set_header X-Forwarded-Proto $scheme;
+      proxy_send_timeout 600;
+      proxy_read_timeout 600;
+      proxy_connect_timeout 600;
+
+      proxy_pass http://tnb_be;
+   }
+   location /file {
+      proxy_set_header HOST $host;
+      proxy_set_header X-Real-IP $remote_addr;
+      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+      proxy_set_header X-Forwarded-Proto $scheme;
+      proxy_send_timeout 600;
+      proxy_read_timeout 600;
+      proxy_connect_timeout 600;
+
+      proxy_pass http://tnb_file;
+   }
+
+   # websocket
+   location /ws {
+      proxy_set_header Upgrade $http_upgrade;
+      proxy_set_header Connection $connection_upgrade;
+      proxy_cache off;
+      proxy_http_version 1.1;
+      proxy_buffering off;
+      proxy_read_timeout 100s;
+      proxy_set_header Host $host;
+      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+      proxy_set_header X-Forwarded-Proto $scheme;
+
+      proxy_pass http://tnb_be;
+   }
+   location / {
+      proxy_set_header HOST $host;
+      proxy_set_header X-Real-IP $remote_addr;
+      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+      proxy_set_header X-Forwarded-Proto $scheme;
+
+      proxy_pass http://tnb_fe;
+   }
+}
+
+upstream tnb_be {
+    server 127.0.0.1:6000 weight=1;
+}
+upstream tnb_file {
+    server 127.0.0.1:6000 weight=1;
+}
+upstream tnb_fe {
+    server 127.0.0.1:4040 weight=1;
+}

+ 26 - 0
srv/nginx/fastcgi.conf

@@ -0,0 +1,26 @@
+
+fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
+fastcgi_param  QUERY_STRING       $query_string;
+fastcgi_param  REQUEST_METHOD     $request_method;
+fastcgi_param  CONTENT_TYPE       $content_type;
+fastcgi_param  CONTENT_LENGTH     $content_length;
+
+fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
+fastcgi_param  REQUEST_URI        $request_uri;
+fastcgi_param  DOCUMENT_URI       $document_uri;
+fastcgi_param  DOCUMENT_ROOT      $document_root;
+fastcgi_param  SERVER_PROTOCOL    $server_protocol;
+fastcgi_param  REQUEST_SCHEME     $scheme;
+fastcgi_param  HTTPS              $https if_not_empty;
+
+fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
+fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
+
+fastcgi_param  REMOTE_ADDR        $remote_addr;
+fastcgi_param  REMOTE_PORT        $remote_port;
+fastcgi_param  SERVER_ADDR        $server_addr;
+fastcgi_param  SERVER_PORT        $server_port;
+fastcgi_param  SERVER_NAME        $server_name;
+
+# PHP only, required if PHP was built with --enable-force-cgi-redirect
+fastcgi_param  REDIRECT_STATUS    200;

+ 25 - 0
srv/nginx/fastcgi_params

@@ -0,0 +1,25 @@
+
+fastcgi_param  QUERY_STRING       $query_string;
+fastcgi_param  REQUEST_METHOD     $request_method;
+fastcgi_param  CONTENT_TYPE       $content_type;
+fastcgi_param  CONTENT_LENGTH     $content_length;
+
+fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
+fastcgi_param  REQUEST_URI        $request_uri;
+fastcgi_param  DOCUMENT_URI       $document_uri;
+fastcgi_param  DOCUMENT_ROOT      $document_root;
+fastcgi_param  SERVER_PROTOCOL    $server_protocol;
+fastcgi_param  REQUEST_SCHEME     $scheme;
+fastcgi_param  HTTPS              $https if_not_empty;
+
+fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
+fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
+
+fastcgi_param  REMOTE_ADDR        $remote_addr;
+fastcgi_param  REMOTE_PORT        $remote_port;
+fastcgi_param  SERVER_ADDR        $server_addr;
+fastcgi_param  SERVER_PORT        $server_port;
+fastcgi_param  SERVER_NAME        $server_name;
+
+# PHP only, required if PHP was built with --enable-force-cgi-redirect
+fastcgi_param  REDIRECT_STATUS    200;

+ 109 - 0
srv/nginx/koi-utf

@@ -0,0 +1,109 @@
+
+# This map is not a full koi8-r <> utf8 map: it does not contain
+# box-drawing and some other characters.  Besides this map contains
+# several koi8-u and Byelorussian letters which are not in koi8-r.
+# If you need a full and standard map, use contrib/unicode2nginx/koi-utf
+# map instead.
+
+charset_map  koi8-r  utf-8 {
+
+    80  E282AC ; # euro
+
+    95  E280A2 ; # bullet
+
+    9A  C2A0 ;   # &nbsp;
+
+    9E  C2B7 ;   # &middot;
+
+    A3  D191 ;   # small yo
+    A4  D194 ;   # small Ukrainian ye
+
+    A6  D196 ;   # small Ukrainian i
+    A7  D197 ;   # small Ukrainian yi
+
+    AD  D291 ;   # small Ukrainian soft g
+    AE  D19E ;   # small Byelorussian short u
+
+    B0  C2B0 ;   # &deg;
+
+    B3  D081 ;   # capital YO
+    B4  D084 ;   # capital Ukrainian YE
+
+    B6  D086 ;   # capital Ukrainian I
+    B7  D087 ;   # capital Ukrainian YI
+
+    B9  E28496 ; # numero sign
+
+    BD  D290 ;   # capital Ukrainian soft G
+    BE  D18E ;   # capital Byelorussian short U
+
+    BF  C2A9 ;   # (C)
+
+    C0  D18E ;   # small yu
+    C1  D0B0 ;   # small a
+    C2  D0B1 ;   # small b
+    C3  D186 ;   # small ts
+    C4  D0B4 ;   # small d
+    C5  D0B5 ;   # small ye
+    C6  D184 ;   # small f
+    C7  D0B3 ;   # small g
+    C8  D185 ;   # small kh
+    C9  D0B8 ;   # small i
+    CA  D0B9 ;   # small j
+    CB  D0BA ;   # small k
+    CC  D0BB ;   # small l
+    CD  D0BC ;   # small m
+    CE  D0BD ;   # small n
+    CF  D0BE ;   # small o
+
+    D0  D0BF ;   # small p
+    D1  D18F ;   # small ya
+    D2  D180 ;   # small r
+    D3  D181 ;   # small s
+    D4  D182 ;   # small t
+    D5  D183 ;   # small u
+    D6  D0B6 ;   # small zh
+    D7  D0B2 ;   # small v
+    D8  D18C ;   # small soft sign
+    D9  D18B ;   # small y
+    DA  D0B7 ;   # small z
+    DB  D188 ;   # small sh
+    DC  D18D ;   # small e
+    DD  D189 ;   # small shch
+    DE  D187 ;   # small ch
+    DF  D18A ;   # small hard sign
+
+    E0  D0AE ;   # capital YU
+    E1  D090 ;   # capital A
+    E2  D091 ;   # capital B
+    E3  D0A6 ;   # capital TS
+    E4  D094 ;   # capital D
+    E5  D095 ;   # capital YE
+    E6  D0A4 ;   # capital F
+    E7  D093 ;   # capital G
+    E8  D0A5 ;   # capital KH
+    E9  D098 ;   # capital I
+    EA  D099 ;   # capital J
+    EB  D09A ;   # capital K
+    EC  D09B ;   # capital L
+    ED  D09C ;   # capital M
+    EE  D09D ;   # capital N
+    EF  D09E ;   # capital O
+
+    F0  D09F ;   # capital P
+    F1  D0AF ;   # capital YA
+    F2  D0A0 ;   # capital R
+    F3  D0A1 ;   # capital S
+    F4  D0A2 ;   # capital T
+    F5  D0A3 ;   # capital U
+    F6  D096 ;   # capital ZH
+    F7  D092 ;   # capital V
+    F8  D0AC ;   # capital soft sign
+    F9  D0AB ;   # capital Y
+    FA  D097 ;   # capital Z
+    FB  D0A8 ;   # capital SH
+    FC  D0AD ;   # capital E
+    FD  D0A9 ;   # capital SHCH
+    FE  D0A7 ;   # capital CH
+    FF  D0AA ;   # capital hard sign
+}

+ 103 - 0
srv/nginx/koi-win

@@ -0,0 +1,103 @@
+
+charset_map  koi8-r  windows-1251 {
+
+    80  88 ; # euro
+
+    95  95 ; # bullet
+
+    9A  A0 ; # &nbsp;
+
+    9E  B7 ; # &middot;
+
+    A3  B8 ; # small yo
+    A4  BA ; # small Ukrainian ye
+
+    A6  B3 ; # small Ukrainian i
+    A7  BF ; # small Ukrainian yi
+
+    AD  B4 ; # small Ukrainian soft g
+    AE  A2 ; # small Byelorussian short u
+
+    B0  B0 ; # &deg;
+
+    B3  A8 ; # capital YO
+    B4  AA ; # capital Ukrainian YE
+
+    B6  B2 ; # capital Ukrainian I
+    B7  AF ; # capital Ukrainian YI
+
+    B9  B9 ; # numero sign
+
+    BD  A5 ; # capital Ukrainian soft G
+    BE  A1 ; # capital Byelorussian short U
+
+    BF  A9 ; # (C)
+
+    C0  FE ; # small yu
+    C1  E0 ; # small a
+    C2  E1 ; # small b
+    C3  F6 ; # small ts
+    C4  E4 ; # small d
+    C5  E5 ; # small ye
+    C6  F4 ; # small f
+    C7  E3 ; # small g
+    C8  F5 ; # small kh
+    C9  E8 ; # small i
+    CA  E9 ; # small j
+    CB  EA ; # small k
+    CC  EB ; # small l
+    CD  EC ; # small m
+    CE  ED ; # small n
+    CF  EE ; # small o
+
+    D0  EF ; # small p
+    D1  FF ; # small ya
+    D2  F0 ; # small r
+    D3  F1 ; # small s
+    D4  F2 ; # small t
+    D5  F3 ; # small u
+    D6  E6 ; # small zh
+    D7  E2 ; # small v
+    D8  FC ; # small soft sign
+    D9  FB ; # small y
+    DA  E7 ; # small z
+    DB  F8 ; # small sh
+    DC  FD ; # small e
+    DD  F9 ; # small shch
+    DE  F7 ; # small ch
+    DF  FA ; # small hard sign
+
+    E0  DE ; # capital YU
+    E1  C0 ; # capital A
+    E2  C1 ; # capital B
+    E3  D6 ; # capital TS
+    E4  C4 ; # capital D
+    E5  C5 ; # capital YE
+    E6  D4 ; # capital F
+    E7  C3 ; # capital G
+    E8  D5 ; # capital KH
+    E9  C8 ; # capital I
+    EA  C9 ; # capital J
+    EB  CA ; # capital K
+    EC  CB ; # capital L
+    ED  CC ; # capital M
+    EE  CD ; # capital N
+    EF  CE ; # capital O
+
+    F0  CF ; # capital P
+    F1  DF ; # capital YA
+    F2  D0 ; # capital R
+    F3  D1 ; # capital S
+    F4  D2 ; # capital T
+    F5  D3 ; # capital U
+    F6  C6 ; # capital ZH
+    F7  C2 ; # capital V
+    F8  DC ; # capital soft sign
+    F9  DB ; # capital Y
+    FA  C7 ; # capital Z
+    FB  D8 ; # capital SH
+    FC  DD ; # capital E
+    FD  D9 ; # capital SHCH
+    FE  D7 ; # capital CH
+    FF  DA ; # capital hard sign
+}

+ 1080 - 0
srv/nginx/mime.types

@@ -0,0 +1,1080 @@
+types {
+application/A2L					a2l;
+application/AML					aml;
+application/andrew-inset			ez;
+application/ATF					atf;
+application/ATFX				atfx;
+application/ATXML				atxml;
+application/atom+xml				atom;
+application/atomcat+xml				atomcat;
+application/atomdeleted+xml			atomdeleted;
+application/atomsvc+xml				atomsvc;
+application/atsc-dwd+xml			dwd;
+application/atsc-held+xml			held;
+application/atsc-rsat+xml			rsat;
+application/auth-policy+xml			apxml;
+application/automationml-amlx+zip   amlx;
+application/bacnet-xdd+zip			xdd;
+application/calendar+xml			xcs;
+application/cbor				cbor;
+application/cccex				c3ex;
+application/ccmp+xml				ccmp;
+application/ccxml+xml				ccxml;
+application/CDFX+XML				cdfx;
+application/cdmi-capability			cdmia;
+application/cdmi-container			cdmic;
+application/cdmi-domain				cdmid;
+application/cdmi-object				cdmio;
+application/cdmi-queue				cdmiq;
+application/CEA					cea;
+application/cellml+xml				cellml cml;
+application/clr                     1clr;
+application/clue_info+xml			clue;
+application/cms					cmsc;
+application/cpl+xml				cpl;
+application/csrattrs				csrattrs;
+application/cwl                     cwl;
+application/cwl+json                cwl.json;
+application/dash+xml				mpd;
+application/dashdelta				mpdd;
+application/davmount+xml			davmount;
+application/DCD					dcd;
+application/dicom				dcm;
+application/DII					dii;
+application/DIT					dit;
+application/dskpp+xml				xmls;
+application/dssc+der				dssc;
+application/dssc+xml				xdssc;
+application/dvcs				dvc;
+application/ecmascript				es;
+application/efi					efi;
+application/emma+xml				emma;
+application/emotionml+xml			emotionml;
+application/epub+zip				epub;
+application/exi					exi;
+application/express             exp;
+application/fastinfoset				finf;
+application/fdt+xml				fdt;
+application/font-tdpfr				pfr;
+application/geo+json				geojson;
+application/geopackage+sqlite3			gpkg;
+application/gltf-buffer				glbin glbuf;
+application/gml+xml				gml;
+application/gzip				gz tgz;
+application/hyperstudio				stk;
+application/inkml+xml				ink inkml;
+application/ipfix				ipfix;
+application/its+xml				its;
+application/java-archive        jar;
+application/jrd+json				jrd;
+application/json				json;
+application/json-patch+json			json-patch;
+application/ld+json				jsonld;
+application/lgr+xml				lgr;
+application/link-format				wlnk;
+application/lost+xml				lostxml;
+application/lostsync+xml			lostsyncxml;
+application/lpf+zip				lpf;
+application/LXF					lxf;
+application/mac-binhex40			hqx;
+application/mads+xml				mads;
+application/manifest+json       webmanifest;
+application/marc				mrc;
+application/marcxml+xml				mrcx;
+application/mathematica				nb ma mb;
+application/mathml+xml				mml;
+application/mbox				mbox;
+application/metalink4+xml			meta4;
+application/mets+xml				mets;
+application/MF4					mf4;
+application/mipc                h5;
+application/mmt-aei+xml				maei;
+application/mmt-usd+xml				musd;
+application/mods+xml				mods;
+application/mp21				m21 mp21;
+application/msword				doc;
+application/mxf					mxf;
+application/n-quads				nq;
+application/n-triples				nt;
+application/ocsp-request			orq;
+application/ocsp-response			ors;
+application/octet-stream		bin lha lzh exe class so dll img iso;
+application/ODA					oda;
+application/ODX					odx;
+application/oebps-package+xml			opf;
+application/ogg					ogx;
+application/opc-nodeset+xml     ;
+application/oxps				oxps;
+application/p21                 p21 stp step stpnc 210 ifc;
+application/p21+zip             stpz;
+application/p2p-overlay+xml			relo;
+application/pdf					pdf;
+application/PDX					pdx;
+application/pem-certificate-chain		pem;
+application/pgp-encrypted			pgp;
+application/pgp-signature			sig;
+application/pkcs10				p10;
+application/pkcs12				p12 pfx;
+application/pkcs7-mime				p7m p7c;
+application/pkcs7-signature			p7s;
+application/pkcs8				p8;
+application/pkcs8-encrypted			p8e;
+application/pkix-cert				cer;
+application/pkix-crl				crl;
+application/pkix-pkipath			pkipath;
+application/pkixcmp				pki;
+application/pls+xml				pls;
+application/postscript				ps eps ai;
+application/provenance+xml			provx;
+application/prs.cww				cw cww;
+application/prs.hpub+zip			hpub;
+application/prs.nprend				rnd rct;
+application/prs.rdf-xml-crypt			rdf-crypt;
+application/prs.xsf+xml				xsf;
+application/pskc+xml				pskcxml;
+application/rdf+xml				rdf;
+application/route-apd+xml			rapd;
+application/route-s-tsid+xml			sls;
+application/route-usd+xml			rusd;
+application/reginfo+xml				rif;
+application/relax-ng-compact-syntax		rnc;
+application/resource-lists-diff+xml		rld;
+application/resource-lists+xml			rl;
+application/rfc+xml				rfcxml;
+application/rls-services+xml			rs;
+application/rpki-ghostbusters			gbr;
+application/rpki-manifest			mft;
+application/rpki-roa				roa;
+application/rtf					rtf;
+application/sarif-external-properties+json sarif-external-properties sarif-external-properties.json;
+application/sarif+json          sarif sarif.json;
+application/scim+json				scim;
+application/scvp-cv-request			scq;
+application/scvp-cv-response			scs;
+application/scvp-vp-request			spq;
+application/scvp-vp-response			spp;
+application/sdp					sdp;
+application/senml-etch+cbor			senml-etchc;
+application/senml-etch+json			senml-etchj;
+application/senml+cbor				senmlc;
+application/senml+json				senml;
+application/senml+xml				senmlx;
+application/senml-exi				senmle;
+application/sensml+cbor				sensmlc;
+application/sensml+json				sensml;
+application/sensml+xml				sensmlx;
+application/sensml-exi				sensmle;
+application/sgml-open-catalog			soc;
+application/shf+xml				shf;
+application/sieve				siv sieve;
+application/simple-filter+xml			cl;
+application/smil+xml				smil smi sml;
+application/sparql-query			rq;
+application/spdx+json                   spdx.json;
+application/sparql-results+xml			srx;
+application/sql					sql;
+application/srgs				gram;
+application/srgs+xml				grxml;
+application/sru+xml				sru;
+application/ssml+xml				ssml;
+application/stix+json				stix;
+application/swid+cbor               coswid;
+application/swid+xml				swidtag;
+application/tamp-apex-update			tau;
+application/tamp-apex-update-confirm		auc;
+application/tamp-community-update		tcu;
+application/tamp-community-update-confirm	cuc;
+application/td+json				jsontd;
+application/tamp-error				ter;
+application/tamp-sequence-adjust		tsa;
+application/tamp-sequence-adjust-confirm	sac;
+application/tamp-update				tur;
+application/tamp-update-confirm			tuc;
+application/tei+xml				tei teiCorpus odd;
+application/thraud+xml				tfi;
+application/timestamp-query			tsq;
+application/timestamp-reply			tsr;
+application/timestamped-data			tsd;
+application/tm+json                 jsontm tm.json tm.jsonld;
+application/trig				trig;
+application/ttml+xml				ttml;
+application/urc-grpsheet+xml			gsheet;
+application/urc-ressheet+xml			rsheet;
+application/urc-targetdesc+xml			td;
+application/urc-uisocketdesc+xml		uis;
+application/vnd.1000minds.decision-model+xml	1km;
+application/vnd.1ob                                 ob;
+application/vnd.3gpp.5gnas              ;
+application/vnd.3gpp.pic-bw-large		plb;
+application/vnd.3gpp.pic-bw-small		psb;
+application/vnd.3gpp.pic-bw-var			pvb;
+application/vnd.3gpp2.sms			sms;
+application/vnd.3gpp2.tcap			tcap;
+application/vnd.3lightssoftware.imagescal	imgcal;
+application/vnd.3M.Post-it-Notes		pwn;
+application/vnd.accpac.simply.aso		aso;
+application/vnd.accpac.simply.imp		imp;
+application/vnd.acucobol			acu;
+application/vnd.acucorp				atc acutc;
+application/vnd.adobe.flash.movie		swf;
+application/vnd.adobe.formscentral.fcdt		fcdt;
+application/vnd.adobe.fxp			fxp fxpl;
+application/vnd.adobe.xdp+xml			xdp;
+application/vnd.afpc.modca			list3820 listafp afp pseg3820;
+application/vnd.afpc.modca-overlay		ovl;
+application/vnd.afpc.modca-pagesegment		psg;
+application/vnd.age                 age;
+application/vnd.ahead.space			ahead;
+application/vnd.airzip.filesecure.azf		azf;
+application/vnd.airzip.filesecure.azs		azs;
+application/vnd.amazon.mobi8-ebook		azw3;
+application/vnd.americandynamics.acc		acc;
+application/vnd.amiga.ami			ami;
+application/vnd.android.ota			ota;
+application/vnd.anki				apkg;
+application/vnd.anser-web-certificate-issue-initiation	cii;
+application/vnd.anser-web-funds-transfer-initiation	fti;
+application/vnd.apache.arrow.file   arrow;
+application/vnd.apache.arrow.stream     arrows;
+application/vnd.apexlang        apexland apex axdl;
+application/vnd.apple.installer+xml		dist distz pkg mpkg;
+application/vnd.apple.keynote			keynote;
+application/vnd.apple.mpegurl			m3u8;
+application/vnd.apple.numbers			numbers;
+application/vnd.apple.pages			pages;
+application/vnd.aristanetworks.swi		swi;
+application/vnd.artisan+json			artisan;
+application/vnd.astraea-software.iota		iota;
+application/vnd.audiograph			aep;
+application/vnd.autopackage			package;
+application/vnd.balsamiq.bmml+xml		bmml;
+application/vnd.banana-accounting		ac2;
+application/vnd.balsamiq.bmpr			bmpr;
+application/vnd.belightsoft.lhzd+zip    lhzd;
+application/vnd.belightsoft.lhzl+zip    lhzl;
+application/vnd.blueice.multipass		mpm;
+application/vnd.bluetooth.ep.oob		ep;
+application/vnd.bluetooth.le.oob		le;
+application/vnd.bmi				bmi;
+application/vnd.businessobjects			rep;
+application/vnd.cendio.thinlinc.clientconf	tlclient;
+application/vnd.chemdraw+xml			cdxml;
+application/vnd.chess-pgn			pgn;
+application/vnd.chipnuts.karaoke-mmd		mmd;
+application/vnd.cinderella			cdy;
+application/vnd.citationstyles.style+xml	csl;
+application/vnd.claymore			cla;
+application/vnd.cloanto.rp9			rp9;
+application/vnd.clonk.c4group			c4g c4d c4f c4p c4u;
+application/vnd.cluetrust.cartomobile-config	c11amc;
+application/vnd.cluetrust.cartomobile-config-pkg	c11amz;
+application/vnd.coffeescript			coffee;
+application/vnd.collabio.xodocuments.document	xodt;
+application/vnd.collabio.xodocuments.document-template	xott;
+application/vnd.collabio.xodocuments.presentation	xodp;
+application/vnd.collabio.xodocuments.presentation-template	xotp;
+application/vnd.collabio.xodocuments.spreadsheet	xods;
+application/vnd.collabio.xodocuments.spreadsheet-template	xots;
+application/vnd.comicbook-rar			cbr;
+application/vnd.comicbook+zip			cbz;
+application/vnd.commerce-battelle	ica icf icd ic0 ic1 ic2 ic3 ic4 ic5 ic6 ic7 ic8;
+application/vnd.commonspace			csp cst;
+application/vnd.contact.cmsg			cdbcmsg;
+application/vnd.coreos.ignition+json		ign ignition;
+application/vnd.cosmocaller			cmc;
+application/vnd.crick.clicker			clkx;
+application/vnd.crick.clicker.keyboard		clkk;
+application/vnd.crick.clicker.palette		clkp;
+application/vnd.crick.clicker.template		clkt;
+application/vnd.crick.clicker.wordbank		clkw;
+application/vnd.criticaltools.wbs+xml		wbs;
+application/vnd.crypto-shade-file		ssvc;
+application/vnd.cryptomator.encrypted   c9r c9s;
+application/vnd.cryptomator.vault       cryptomator;
+application/vnd.ctc-posml			pml;
+application/vnd.cups-ppd			ppd;
+application/vnd.curl				curl;
+application/vnd.dart				dart;
+application/vnd.data-vision.rdz			rdz;
+application/vnd.datalog                 dl;
+application/vnd.dbf				dbf;
+application/vnd.debian.binary-package		deb udeb;
+application/vnd.dece.data			uvf uvvf uvd uvvd;
+application/vnd.dece.ttml+xml			uvt uvvt;
+application/vnd.dece.unspecified		uvx uvvx;
+application/vnd.dece.zip			uvz uvvz;
+application/vnd.denovo.fcselayout-link		fe_launch;
+application/vnd.desmume.movie			dsm;
+application/vnd.dna				dna;
+application/vnd.document+json			docjson;
+application/vnd.doremir.scorecloud-binary-document	scld;
+application/vnd.dpgraph				dpg mwc dpgraph;
+application/vnd.dreamfactory			dfac;
+application/vnd.dtg.local.flash			fla;
+application/vnd.dvb.ait				ait;
+application/vnd.dvb.service			svc;
+application/vnd.dynageo				geo;
+application/vnd.dzr				dzr;
+application/vnd.ecowin.chart			mag;
+application/vnd.eln+zip             eln;
+application/vnd.enliven				nml;
+application/vnd.epson.esf			esf;
+application/vnd.epson.msf			msf;
+application/vnd.epson.quickanime		qam;
+application/vnd.epson.salt			slt;
+application/vnd.epson.ssf			ssf;
+application/vnd.ericsson.quickcall		qcall qca;
+application/vnd.espass-espass+zip		espass;
+application/vnd.eszigno3+xml			es3 et3;
+application/vnd.etsi.asic-e+zip			asice sce;
+application/vnd.etsi.asic-s+zip			asics;
+application/vnd.etsi.timestamp-token		tst;
+application/vnd.eu.kasparian.car+json       carjson;
+application/vnd.exstream-empower+zip		mpw;
+application/vnd.exstream-package		pub;
+application/vnd.evolv.ecig.profile		ecigprofile;
+application/vnd.evolv.ecig.settings		ecig;
+application/vnd.evolv.ecig.theme		ecigtheme;
+application/vnd.ezpix-album			ez2;
+application/vnd.ezpix-package			ez3;
+application/vnd.fastcopy-disk-image		dim;
+application/vnd.familysearch.gedcom+zip     gdz;
+application/vnd.fdf				fdf;
+application/vnd.fdsn.mseed			msd mseed;
+application/vnd.fdsn.seed			seed dataless;
+application/vnd.ficlab.flb+zip			flb;
+application/vnd.filmit.zfc			zfc;
+application/vnd.FloGraphIt			gph;
+application/vnd.fluxtime.clip			ftc;
+application/vnd.font-fontforge-sfd		sfd;
+application/vnd.framemaker			fm;
+application/vnd.frogans.fnc			fnc;
+application/vnd.frogans.ltf			ltf;
+application/vnd.fsc.weblaunch			fsc;
+application/vnd.fujitsu.oasys			oas;
+application/vnd.fujitsu.oasys2			oa2;
+application/vnd.fujitsu.oasys3			oa3;
+application/vnd.fujitsu.oasysgp			fg5;
+application/vnd.fujitsu.oasysprs		bh2;
+application/vnd.fujixerox.ddd			ddd;
+application/vnd.fujixerox.docuworks     xdw;
+application/vnd.fujixerox.docuworks.binder      xbd;
+application/vnd.fujixerox.docuworks.container       xct;
+application/vnd.fuzzysheet			fzs;
+application/vnd.genomatix.tuxedo		txd;
+application/vnd.genozip                 genozip;
+application/vnd.gentoo.ebuild           ebuild;
+application/vnd.gentoo.eclass           eclass;
+application/vnd.gentoo.gpkg             gpkg.tar;
+application/vnd.gentoo.xpak             tbz2 xpak;
+application/vnd.geocube+xml			g3 g³;
+application/vnd.geogebra.file			ggb;
+application/vnd.geogebra.slides         ggs;
+application/vnd.geogebra.tool			ggt;
+application/vnd.geometry-explorer		gex gre;
+application/vnd.geonext				gxt;
+application/vnd.geoplan				g2w;
+application/vnd.geospace			g3w;
+application/vnd.gmx				gmx;
+application/vnd.google-earth.kml+xml		kml;
+application/vnd.google-earth.kmz		kmz;
+application/vnd.grafeq				gqf gqs;
+application/vnd.groove-account			gac;
+application/vnd.groove-help			ghf;
+application/vnd.groove-identity-message		gim;
+application/vnd.groove-injector			grv;
+application/vnd.groove-tool-message		gtm;
+application/vnd.groove-tool-template		tpl;
+application/vnd.groove-vcard			vcg;
+application/vnd.hal+xml				hal;
+application/vnd.HandHeld-Entertainment+xml	zmm;
+application/vnd.hbci				hbci hbc kom upa pkd bpd;
+application/vnd.hdt				hdt;
+application/vnd.hhe.lesson-player		les;
+application/vnd.hp-HPGL				hpgl;
+application/vnd.hp-hpid				hpi hpid;
+application/vnd.hp-hps				hps;
+application/vnd.hp-jlyt				jlt;
+application/vnd.hp-PCL				pcl;
+application/vnd.hsl                 hsl;
+application/vnd.hydrostatix.sof-data		sfd-hdstx;
+application/vnd.hzn-3d-crossword		x3d;
+application/vnd.ibm.electronic-media		emm;
+application/vnd.ibm.MiniPay			mpy;
+application/vnd.ibm.rights-management		irm;
+application/vnd.ibm.secure-container		sc;
+application/vnd.iccprofile			icc icm;
+application/vnd.ieee.1905			1905.1;
+application/vnd.igloader			igl;
+application/vnd.imagemeter.folder+zip		imf;
+application/vnd.imagemeter.image+zip		imi;
+application/vnd.immervision-ivp			ivp;
+application/vnd.immervision-ivu			ivu;
+application/vnd.ims.imsccv1p1			imscc;
+application/vnd.insors.igm			igm;
+application/vnd.intercon.formnet		xpw xpx;
+application/vnd.intergeo			i2g;
+application/vnd.intu.qbo			qbo;
+application/vnd.intu.qfx			qfx;
+application/vnd.ipld.car            car;
+application/vnd.ipunplugged.rcprofile		rcprofile;
+application/vnd.irepository.package+xml		irp;
+application/vnd.is-xpr				xpr;
+application/vnd.isac.fcs			fcs;
+application/vnd.jam				jam;
+application/vnd.jcp.javame.midlet-rms		rms;
+application/vnd.jisp				jisp;
+application/vnd.joost.joda-archive		joda;
+application/vnd.kahootz				ktz ktr;
+application/vnd.kde.karbon			karbon;
+application/vnd.kde.kchart			chrt;
+application/vnd.kde.kformula			kfo;
+application/vnd.kde.kivio			flw;
+application/vnd.kde.kontour			kon;
+application/vnd.kde.kpresenter			kpr kpt;
+application/vnd.kde.kspread			ksp;
+application/vnd.kde.kword			kwd kwt;
+application/vnd.kenameaapp			htke;
+application/vnd.kidspiration			kia;
+application/vnd.Kinar				kne knp sdf;
+application/vnd.koan				skp skd skm skt;
+application/vnd.kodak-descriptor		sse;
+application/vnd.las                 las;
+application/vnd.las.las+json			lasjson;
+application/vnd.las.las+xml			lasxml;
+application/vnd.llamagraphics.life-balance.desktop	lbd;
+application/vnd.llamagraphics.life-balance.exchange+xml	lbe;
+application/vnd.logipipe.circuit+zip		lcs lca;
+application/vnd.loom				loom;
+application/vnd.lotus-1-2-3			123 wk4 wk3 wk1;
+application/vnd.lotus-approach			apr vew;
+application/vnd.lotus-freelance			prz pre;
+application/vnd.lotus-notes			nsf ntf ndl ns4 ns3 ns2 nsh nsg;
+application/vnd.lotus-organizer			or3 or2 org;
+application/vnd.lotus-screencam			scm;
+application/vnd.lotus-wordpro			lwp sam;
+application/vnd.macports.portpkg		portpkg;
+application/vnd.mapbox-vector-tile		mvt;
+application/vnd.marlin.drm.mdcf			mdc;
+application/vnd.maxar.archive.3tz+zip   3tz;
+application/vnd.maxmind.maxmind-db		mmdb;
+application/vnd.mcd				mcd;
+application/vnd.mdl             mdl;
+application/vnd.mdl-mbsdf       mbsdf;
+application/vnd.medcalcdata			mc1;
+application/vnd.mediastation.cdkey		cdkey;
+application/vnd.medicalholodeck.recordxr    rxr;
+application/vnd.MFER				mwf;
+application/vnd.mfmp				mfm;
+application/vnd.micrografx.flo			flo;
+application/vnd.micrografx.igx			igx;
+application/vnd.mif				mif;
+application/vnd.Mobius.DAF			daf;
+application/vnd.Mobius.DIS			dis;
+application/vnd.Mobius.MBK			mbk;
+application/vnd.Mobius.MQY			mqy;
+application/vnd.Mobius.MSL			msl;
+application/vnd.Mobius.PLC			plc;
+application/vnd.Mobius.TXF			txf;
+application/vnd.modl                modl;
+application/vnd.mophun.application		mpn;
+application/vnd.mophun.certificate		mpc;
+application/vnd.mozilla.xul+xml			xul;
+application/vnd.ms-3mfdocument			3mf;
+application/vnd.ms-artgalry			cil;
+application/vnd.ms-asf				asf;
+application/vnd.ms-cab-compressed		cab;
+application/vnd.ms-excel			xls xlm xla xlc xlt xlw;
+application/vnd.ms-excel.template.macroEnabled.12	xltm;
+application/vnd.ms-excel.addin.macroEnabled.12	xlam;
+application/vnd.ms-excel.sheet.binary.macroEnabled.12	xlsb;
+application/vnd.ms-excel.sheet.macroEnabled.12	xlsm;
+application/vnd.ms-fontobject			eot;
+application/vnd.ms-htmlhelp			chm;
+application/vnd.ms-ims				ims;
+application/vnd.ms-lrm				lrm;
+application/vnd.ms-officetheme			thmx;
+application/vnd.ms-powerpoint			ppt pps pot;
+application/vnd.ms-powerpoint.addin.macroEnabled.12	ppam;
+application/vnd.ms-powerpoint.presentation.macroEnabled.12	pptm;
+application/vnd.ms-powerpoint.slide.macroEnabled.12	sldm;
+application/vnd.ms-powerpoint.slideshow.macroEnabled.12	ppsm;
+application/vnd.ms-powerpoint.template.macroEnabled.12	potm;
+application/vnd.ms-project			mpp mpt;
+application/vnd.ms-tnef				tnef tnf;
+application/vnd.ms-word.document.macroEnabled.12	docm;
+application/vnd.ms-word.template.macroEnabled.12	dotm;
+application/vnd.ms-works			wcm wdb wks wps;
+application/vnd.ms-wpl				wpl;
+application/vnd.ms-xpsdocument			xps;
+application/vnd.msa-disk-image			msa;
+application/vnd.mseq				mseq;
+application/vnd.multiad.creator			crtr;
+application/vnd.multiad.creator.cif		cif;
+application/vnd.musician			mus;
+application/vnd.muvee.style			msty;
+application/vnd.mynfc				taglet;
+application/vnd.nebumind.line       nebul line;
+application/vnd.nervana				entity request bkm kcm;
+application/vnd.nimn				nimn;
+application/vnd.nitf				nitf;
+application/vnd.neurolanguage.nlu		nlu;
+application/vnd.nintendo.nitro.rom		nds;
+application/vnd.nintendo.snes.rom		sfc smc;
+application/vnd.noblenet-directory		nnd;
+application/vnd.noblenet-sealer			nns;
+application/vnd.noblenet-web			nnw;
+application/vnd.nokia.n-gage.ac+xml		ac;
+application/vnd.nokia.n-gage.data		ngdat;
+application/vnd.nokia.n-gage.symbian.install	n-gage;
+application/vnd.nokia.radio-preset		rpst;
+application/vnd.nokia.radio-presets		rpss;
+application/vnd.novadigm.EDM			edm;
+application/vnd.novadigm.EDX			edx;
+application/vnd.novadigm.EXT			ext;
+application/vnd.oasis.opendocument.base             odb;
+application/vnd.oasis.opendocument.chart			odc;
+application/vnd.oasis.opendocument.chart-template		otc;
+application/vnd.oasis.opendocument.formula			odf;
+application/vnd.oasis.opendocument.graphics			odg;
+application/vnd.oasis.opendocument.graphics-template		otg;
+application/vnd.oasis.opendocument.image			odi;
+application/vnd.oasis.opendocument.image-template		oti;
+application/vnd.oasis.opendocument.presentation			odp;
+application/vnd.oasis.opendocument.presentation-template	otp;
+application/vnd.oasis.opendocument.spreadsheet			ods;
+application/vnd.oasis.opendocument.spreadsheet-template		ots;
+application/vnd.oasis.opendocument.text				odt;
+application/vnd.oasis.opendocument.text-master			odm;
+application/vnd.oasis.opendocument.text-master-template otm;
+application/vnd.oasis.opendocument.text-template		ott;
+application/vnd.oasis.opendocument.text-web			oth;
+application/vnd.olpc-sugar			xo;
+application/vnd.oma.dd2+xml			dd2;
+application/vnd.onepager			tam;
+application/vnd.onepagertamp			tamp;
+application/vnd.onepagertamx			tamx;
+application/vnd.onepagertat			tat;
+application/vnd.onepagertatp			tatp;
+application/vnd.onepagertatx			tatx;
+application/vnd.openblox.game+xml		obgx;
+application/vnd.openblox.game-binary		obg;
+application/vnd.openeye.oeb			oeb;
+application/vnd.openofficeorg.extension		oxt;
+application/vnd.openstreetmap.data+xml		osm;
+application/vnd.openxmlformats-officedocument.presentationml.presentation pptx;
+application/vnd.openxmlformats-officedocument.presentationml.slide	sldx;
+application/vnd.openxmlformats-officedocument.presentationml.slideshow	ppsx;
+application/vnd.openxmlformats-officedocument.presentationml.template	potx;
+application/vnd.openxmlformats-officedocument.spreadsheetml.sheet	xlsx;
+application/vnd.openxmlformats-officedocument.spreadsheetml.template	xltx;
+application/vnd.openxmlformats-officedocument.wordprocessingml.document	docx;
+application/vnd.openxmlformats-officedocument.wordprocessingml.template	dotx;
+application/vnd.osa.netdeploy			ndc;
+application/vnd.osgeo.mapguide.package		mgp;
+application/vnd.osgi.dp				dp;
+application/vnd.osgi.subsystem			esa;
+application/vnd.oxli.countgraph			oxlicg;
+application/vnd.palm				prc pdb pqa oprc;
+application/vnd.panoply				plp;
+application/vnd.patentdive			dive;
+application/vnd.pawaafile			paw;
+application/vnd.pg.format		    	str;
+application/vnd.pg.osasli			ei6;
+application/vnd.piaccess.application-licence	pil;
+application/vnd.picsel				efif;
+application/vnd.pmi.widget			wg;
+application/vnd.pocketlearn			plf;
+application/vnd.powerbuilder6			pbd;
+application/vnd.preminet			preminet;
+application/vnd.previewsystems.box		box vbox;
+application/vnd.proteus.magazine		mgz;
+application/vnd.psfs				psfs;
+application/vnd.publishare-delta-tree		qps;
+application/vnd.pvi.ptid1			ptid;
+application/vnd.qualcomm.brew-app-res		bar;
+application/vnd.Quark.QuarkXPress		qxd qxt qwd qwt qxl qxb;
+application/vnd.quobject-quoxdocument		quox quiz;
+application/vnd.rainstor.data			tree;
+application/vnd.rar				rar;
+application/vnd.realvnc.bed			bed;
+application/vnd.recordare.musicxml		mxl;
+application/vnd.resilient.logic         rlm reload;
+application/vnd.rig.cryptonote			cryptonote;
+application/vnd.route66.link66+xml		link66;
+application/vnd.sailingtracker.track		st;
+application/vnd.sar				SAR;
+application/vnd.scribus				scd sla slaz;
+application/vnd.sealed.3df			s3df;
+application/vnd.sealed.csf			scsf;
+application/vnd.sealed.doc			sdoc sdo s1w;
+application/vnd.sealed.eml			seml sem;
+application/vnd.sealed.mht			smht smh;
+application/vnd.sealed.ppt			sppt s1p;
+application/vnd.sealed.tiff			stif;
+application/vnd.sealed.xls			sxls sxl s1e;
+application/vnd.sealedmedia.softseal.html	stml s1h;
+application/vnd.sealedmedia.softseal.pdf	spdf spd s1a;
+application/vnd.seemail				see;
+application/vnd.sema				sema;
+application/vnd.semd				semd;
+application/vnd.semf				semf;
+application/vnd.shade-save-file			ssv;
+application/vnd.shana.informed.formdata		ifm;
+application/vnd.shana.informed.formtemplate	itp;
+application/vnd.shana.informed.interchange	iif;
+application/vnd.shana.informed.package		ipk;
+application/vnd.shp				shp;
+application/vnd.shx				shx;
+application/vnd.sigrok.session			sr;
+application/vnd.SimTech-MindMapper		twd twds;
+application/vnd.smaf				mmf;
+application/vnd.smart.notebook			notebook;
+application/vnd.smart.teacher			teacher;
+application/vnd.smintio.portals.archive sipa;
+application/vnd.snesdev-page-table		ptrom pt;
+application/vnd.software602.filler.form+xml	fo;
+application/vnd.software602.filler.form-xml-zip	zfo;
+application/vnd.solent.sdkm+xml			sdkm sdkd;
+application/vnd.spotfire.dxp			dxp;
+application/vnd.spotfire.sfs			sfs;
+application/vnd.sqlite3				sqlite sqlite3;
+application/vnd.stepmania.package		smzip;
+application/vnd.stepmania.stepchart		sm;
+application/vnd.sun.wadl+xml			wadl;
+application/vnd.sus-calendar			sus susp;
+application/vnd.sybyl.mol2          ml2 mol2 sy2;
+application/vnd.sycle+xml           scl;
+application/vnd.syft+json           syft.json;
+application/vnd.syncml+xml			xsm;
+application/vnd.syncml.dm+wbxml			bdm;
+application/vnd.syncml.dm+xml			xdm;
+application/vnd.syncml.dmddf+xml		ddf;
+application/vnd.tao.intent-module-archive	tao;
+application/vnd.tcpdump.pcap			pcap cap dmp;
+application/vnd.theqvd				qvd;
+application/vnd.think-cell.ppttc+json		ppttc;
+application/vnd.tml				vfr viaframe;
+application/vnd.tmobile-livetv			tmo;
+application/vnd.trid.tpt			tpt;
+application/vnd.triscape.mxs			mxs;
+application/vnd.trueapp				tra;
+application/vnd.ufdl				ufdl ufd frm;
+application/vnd.uiq.theme			utz;
+application/vnd.umajin				umj;
+application/vnd.unity				unityweb;
+application/vnd.uoml+xml			uoml uo;
+application/vnd.uri-map				urim urimap;
+application/vnd.valve.source.material		vmt;
+application/vnd.vcx				vcx;
+application/vnd.vd-study			mxi study-inter model-inter;
+application/vnd.vectorworks			vwx;
+application/vnd.veritone.aion+json  aion vtnstd;
+application/vnd.veryant.thin			istc isws;
+application/vnd.ves.encrypted			VES;
+application/vnd.vidsoft.vidconference		vsc;
+application/vnd.visio				vsd vst vsw vss;
+application/vnd.visionary			vis;
+application/vnd.vsf				vsf;
+application/vnd.wap.sic				sic;
+application/vnd.wap.slc				slc;
+application/vnd.wap.wbxml			wbxml;
+application/vnd.wap.wmlc			wmlc;
+application/vnd.wap.wmlscriptc			wmlsc;
+application/vnd.wasmflow.wafl       wafl;
+application/vnd.webturbo			wtb;
+application/vnd.wfa.p2p				p2p;
+application/vnd.wfa.wsc				wsc;
+application/vnd.wmc				wmc;
+application/vnd.wolfram.mathematica.package	m;
+application/vnd.wolfram.player			nbp;
+application/vnd.wordperfect			wpd;
+application/vnd.wqd				wqd;
+application/vnd.wt.stf				stf;
+application/vnd.wv.csp+wbxml			wv;
+application/vnd.xara				xar;
+application/vnd.xfdl				xfdl xfd;
+application/vnd.xmpie.cpkg			cpkg;
+application/vnd.xmpie.dpkg			dpkg;
+application/vnd.xmpie.ppkg			ppkg;
+application/vnd.xmpie.xlim			xlim;
+application/vnd.yamaha.hv-dic			hvd;
+application/vnd.yamaha.hv-script		hvs;
+application/vnd.yamaha.hv-voice			hvp;
+application/vnd.yamaha.openscoreformat		osf;
+application/vnd.yamaha.smaf-audio		saf;
+application/vnd.yamaha.smaf-phrase		spf;
+application/vnd.yaoweme				yme;
+application/vnd.yellowriver-custom-menu		cmp;
+application/vnd.zul				zir zirz;
+application/vnd.zzazz.deck+xml			zaz;
+application/voicexml+xml			vxml;
+application/voucher-cms+json			vcj;
+application/wasm                    wasm;
+application/watcherinfo+xml			wif;
+application/widget				wgt;
+application/wsdl+xml				wsdl;
+application/wspolicy+xml			wspolicy;
+application/xcap-att+xml			xav;
+application/xcap-caps+xml			xca;
+application/xcap-diff+xml			xdf;
+application/xcap-el+xml				xel;
+application/xcap-error+xml			xer;
+application/xcap-ns+xml				xns;
+application/xfdf                    xfdf;
+application/xhtml+xml				xhtml xhtm xht;
+application/xliff+xml				xlf;
+application/xml-dtd				dtd;
+application/xop+xml				xop;
+application/xslt+xml				xsl xslt;
+application/xv+xml				mxml xhvml xvml xvm;
+application/yang				yang;
+application/yin+xml				yin;
+application/zip					zip;
+application/zstd				zst;
+audio/32kadpcm					726;
+audio/aac					adts aac ass;
+audio/ac3					ac3;
+audio/AMR					amr;
+audio/AMR-WB					awb;
+audio/asc					acn;
+audio/ATRAC-ADVANCED-LOSSLESS			aal;
+audio/ATRAC-X					atx;
+audio/ATRAC3					at3 aa3 omg;
+audio/basic					au snd;
+audio/dls					dls;
+audio/EVRC					evc;
+audio/EVRCB					evb;
+audio/EVRCNW					enw;
+audio/EVRCWB					evw;
+audio/iLBC					lbc;
+audio/L16					l16;
+audio/mhas					mhas;
+audio/mobile-xmf				mxmf;
+audio/mp4					m4a;
+audio/mpeg					mp3 mpga mp1 mp2;
+audio/ogg					oga ogg opus spx;
+audio/prs.sid					sid psid;
+audio/QCELP					qcp;
+audio/SMV					smv;
+audio/sofa                  sofa;
+audio/usac					loas xhe;
+audio/vnd.audiokoz				koz;
+audio/vnd.dece.audio				uva uvva;
+audio/vnd.digital-winds				eol;
+audio/vnd.dolby.mlp				mlp;
+audio/vnd.dts					dts;
+audio/vnd.dts.hd				dtshd;
+audio/vnd.everad.plj				plj;
+audio/vnd.lucent.voice				lvp;
+audio/vnd.ms-playready.media.pya		pya;
+audio/vnd.nortel.vbk				vbk;
+audio/vnd.nuera.ecelp4800			ecelp4800;
+audio/vnd.nuera.ecelp7470			ecelp7470;
+audio/vnd.nuera.ecelp9600			ecelp9600;
+audio/vnd.presonus.multitrack			multitrack;
+audio/vnd.rip					rip;
+audio/vnd.sealedmedia.softseal.mpeg		smp3 smp s1m;
+font/collection					ttc;
+font/otf					otf;
+font/ttf					ttf;
+font/woff					woff;
+font/woff2					woff2;
+image/aces					exr;
+image/avci					avci;
+image/avcs					avcs;
+image/avif                  avif hif;
+image/bmp					bmp dib;
+image/cgm					cgm;
+image/dicom-rle					drle;
+image/dpx                   dpx;
+image/emf					emf;
+image/fits					fits fit fts;
+image/heic					heic;
+image/heic-sequence				heics;
+image/heif					heif;
+image/heif-sequence				heifs;
+image/hej2k					hej2;
+image/hsj2					hsj2;
+image/gif					gif;
+image/ief					ief;
+image/jls					jls;
+image/jp2					jp2 jpg2;
+image/jph					jph;
+image/jphc					jhc;
+image/jpeg					jpg jpeg jpe jfif;
+image/jpm					jpm jpgm;
+image/jpx					jpx jpf;
+image/jxl                   jxl;
+image/jxr					jxr;
+image/jxrA					jxra;
+image/jxrS					jxrs;
+image/jxs					jxs;
+image/jxsc					jxsc;
+image/jxsi					jxsi;
+image/jxss					jxss;
+image/ktx					ktx;
+image/ktx2                  ktx2;
+image/png					png;
+image/prs.btif					btif btf;
+image/prs.pti					pti;
+image/svg+xml					svg svgz;
+image/t38					t38;
+image/tiff					tiff tif;
+image/tiff-fx					tfx;
+image/vnd.adobe.photoshop			psd;
+image/vnd.airzip.accelerator.azv		azv;
+image/vnd.dece.graphic				uvi uvvi uvg uvvg;
+image/vnd.djvu					djvu djv;
+image/vnd.dwg					dwg;
+image/vnd.dxf					dxf;
+image/vnd.fastbidsheet				fbs;
+image/vnd.fpx					fpx;
+image/vnd.fst					fst;
+image/vnd.fujixerox.edmics-mmr			mmr;
+image/vnd.fujixerox.edmics-rlc			rlc;
+image/vnd.globalgraphics.pgb			pgb;
+image/vnd.microsoft.icon			ico;
+image/vnd.mozilla.apng				apng;
+image/vnd.ms-modi				mdi;
+image/vnd.pco.b16               b16;
+image/vnd.radiance				hdr rgbe xyze;
+image/vnd.sealed.png				spng spn s1n;
+image/vnd.sealedmedia.softseal.gif		sgif sgi s1g;
+image/vnd.sealedmedia.softseal.jpg		sjpg sjp s1j;
+image/vnd.tencent.tap				tap;
+image/vnd.valve.source.texture			vtf;
+image/vnd.wap.wbmp				wbmp;
+image/vnd.xiff					xif;
+image/vnd.zbrush.pcx				pcx;
+image/wmf					wmf;
+message/global					u8msg;
+message/global-delivery-status			u8dsn;
+message/global-disposition-notification		u8mdn;
+message/global-headers				u8hdr;
+message/rfc822					eml mail art;
+model/gltf-binary				glb;
+model/gltf+json					gltf;
+model/JT                        jt;
+model/iges					igs iges;
+model/mesh					msh mesh silo;
+model/mtl					mtl;
+model/obj					obj;
+model/step+xml              stpx;
+model/step-xml+zip          stpxz;
+model/stl					stl;
+model/u3d                   u3d;
+model/vnd.bary              bary;
+model/vnd.cld               cld;
+model/vnd.collada+xml				dae;
+model/vnd.dwf					dwf;
+model/vnd.gdl					gdl gsm win dor lmp rsm msm ism;
+model/vnd.gtw					gtw;
+model/vnd.moml+xml				moml;
+model/vnd.mts					mts;
+model/vnd.opengex				ogex;
+model/vnd.parasolid.transmit.binary		x_b xmt_bin;
+model/vnd.parasolid.transmit.text		x_t xmt_txt;
+model/vnd.pytha.pyox            pyo pyox;
+model/vnd.sap.vds               vds;
+model/vnd.usda                  usda;
+model/vnd.usdz+zip				usdz;
+model/vnd.valve.source.compiled-map		bsp;
+model/vnd.vtu					vtu;
+model/vrml					wrl vrml;
+model/x3d+xml					x3db;
+model/x3d-vrml					x3dv x3dvz;
+multipart/vnd.bint.med-plus			bmed;
+multipart/voice-message				vpm;
+text/cache-manifest				appcache manifest;
+text/calendar					ics ifb;
+text/cql                    CQL;
+text/css					css;
+text/csv					csv;
+text/csv-schema					csvs;
+text/dns					soa zone;
+text/gff3                   gff3;
+text/html					html htm;
+text/javascript                 js mjs;
+text/jcr-cnd					cnd;
+text/markdown					markdown md;
+text/mizar					miz;
+text/n3						n3;
+text/plain		txt asc text pm el c h cc hh cxx hxx f90 conf log;
+text/provenance-notation			provn;
+text/prs.fallenstein.rst			rst;
+text/prs.lines.tag				tag dsc;
+text/richtext					rtx;
+text/SGML					sgml sgm;
+text/shaclc                 shaclc shc;
+text/shex                   shex;
+text/spdx                   spdx;
+text/tab-separated-values			tsv;
+text/troff					t tr roff;
+text/turtle					ttl;
+text/uri-list					uris uri;
+text/vcard					vcf vcard;
+text/vnd.a					a;
+text/vnd.abc					abc;
+text/vnd.ascii-art				ascii;
+text/vnd.debian.copyright			copyright;
+text/vnd.DMClientScript				dms;
+text/vnd.dvb.subtitle				sub;
+text/vnd.esmertec.theme-descriptor		jtd;
+text/vnd.exchangeable           vfk;
+text/vnd.familysearch.gedcom    ged;
+text/vnd.ficlab.flt				flt;
+text/vnd.fly					fly;
+text/vnd.fmi.flexstor				flx;
+text/vnd.graphviz				gv dot;
+text/vnd.hans                   hans;
+text/vnd.hgl					hgl;
+text/vnd.in3d.3dml				3dml 3dm;
+text/vnd.in3d.spot				spot spo;
+text/vnd.ms-mediapackage			mpf;
+text/vnd.net2phone.commcenter.command		ccc;
+text/vnd.senx.warpscript			mc2;
+text/vnd.si.uricatalogue			uric;
+text/vnd.sun.j2me.app-descriptor		jad;
+text/vnd.sosi					sos;
+text/vnd.trolltech.linguist			ts;
+text/vnd.wap.si					si;
+text/vnd.wap.sl					sl;
+text/vnd.wap.wml				wml;
+text/vnd.wap.wmlscript				wmls;
+text/vtt					vtt;
+text/wgsl                   wgsl;
+text/xml					xml xsd rng;
+text/xml-external-parsed-entity			ent;
+video/3gpp					3gp 3gpp;
+video/3gpp2					3g2 3gpp2;
+video/iso.segment				m4s;
+video/mj2					mj2 mjp2;
+video/mp4					mp4 mpg4 m4v;
+video/mpeg					mpeg mpg mpe m1v m2v;
+video/ogg					ogv;
+video/quicktime					mov qt;
+video/vnd.dece.hd				uvh uvvh;
+video/vnd.dece.mobile				uvm uvvm;
+video/vnd.dece.mp4				uvu uvvu;
+video/vnd.dece.pd				uvp uvvp;
+video/vnd.dece.sd				uvs uvvs;
+video/vnd.dece.video				uvv uvvv;
+video/vnd.dvb.file				dvb;
+video/vnd.fvt					fvt;
+video/vnd.mpegurl				mxu m4u;
+video/vnd.ms-playready.media.pyv		pyv;
+video/vnd.nokia.interleaved-multimedia		nim;
+video/vnd.radgamettools.bink			bik bk2;
+video/vnd.radgamettools.smacker			smk;
+video/vnd.sealed.mpeg1				smpg s11;
+video/vnd.sealed.mpeg4				s14;
+video/vnd.sealed.swf				sswf ssw;
+video/vnd.sealedmedia.softseal.mov		smov smo s1q;
+video/vnd.youtube.yt				yt;
+video/vnd.vivo					viv;
+application/mac-compactpro			cpt;
+application/metalink+xml			metalink;
+application/owl+xml				owx;
+application/rss+xml				rss;
+application/vnd.android.package-archive		apk;
+application/vnd.oma.dd+xml			dd;
+application/vnd.oma.drm.content			dcf;
+application/vnd.oma.drm.dcf			o4a o4v;
+application/vnd.oma.drm.message			dm;
+application/vnd.oma.drm.rights+wbxml		drc;
+application/vnd.oma.drm.rights+xml		dr;
+application/vnd.sun.xml.calc			sxc;
+application/vnd.sun.xml.calc.template		stc;
+application/vnd.sun.xml.draw			sxd;
+application/vnd.sun.xml.draw.template		std;
+application/vnd.sun.xml.impress			sxi;
+application/vnd.sun.xml.impress.template	sti;
+application/vnd.sun.xml.math			sxm;
+application/vnd.sun.xml.writer			sxw;
+application/vnd.sun.xml.writer.global		sxg;
+application/vnd.sun.xml.writer.template		stw;
+application/vnd.symbian.install			sis;
+application/vnd.wap.mms-message			mms;
+application/x-annodex				anx;
+application/x-bcpio				bcpio;
+application/x-bittorrent			torrent;
+application/x-bzip2				bz2;
+application/x-cdlink				vcd;
+application/x-chrome-extension			crx;
+application/x-cpio				cpio;
+application/x-csh				csh;
+application/x-director				dcr dir dxr;
+application/x-dvi				dvi;
+application/x-futuresplash			spl;
+application/x-gtar				gtar;
+application/x-hdf				hdf;
+application/x-java-jnlp-file			jnlp;
+application/x-java-pack200			pack;
+application/x-killustrator			kil;
+application/x-latex				latex;
+application/x-netcdf				nc cdf;
+application/x-perl				pl;
+application/x-rpm				rpm;
+application/x-sh				sh;
+application/x-shar				shar;
+application/x-stuffit				sit;
+application/x-sv4cpio				sv4cpio;
+application/x-sv4crc				sv4crc;
+application/x-tar				tar;
+application/x-tcl				tcl;
+application/x-tex				tex;
+application/x-texinfo				texinfo texi;
+application/x-troff-man				man 1 2 3 4 5 6 7 8;
+application/x-troff-me				me;
+application/x-troff-ms				ms;
+application/x-ustar				ustar;
+application/x-wais-source			src;
+application/x-xpinstall				xpi;
+application/x-xspf+xml				xspf;
+application/x-xz				xz;
+audio/midi					mid midi kar;
+audio/x-aiff					aif aiff aifc;
+audio/x-annodex					axa;
+audio/x-flac					flac;
+audio/x-matroska				mka;
+audio/x-mod					mod ult uni m15 mtm 669 med;
+audio/x-mpegurl					m3u;
+audio/x-ms-wax					wax;
+audio/x-ms-wma					wma;
+audio/x-pn-realaudio				ram rm;
+audio/x-realaudio				ra;
+audio/x-s3m					s3m;
+audio/x-stm					stm;
+audio/x-wav					wav;
+chemical/x-xyz					xyz;
+image/webp					webp;
+image/x-cmu-raster				ras;
+image/x-portable-anymap				pnm;
+image/x-portable-bitmap				pbm;
+image/x-portable-graymap			pgm;
+image/x-portable-pixmap				ppm;
+image/x-rgb					rgb;
+image/x-targa					tga;
+image/x-xbitmap					xbm;
+image/x-xpixmap					xpm;
+image/x-xwindowdump				xwd;
+text/html-sandboxed				sandboxed;
+text/x-pod					pod;
+text/x-setext					etx;
+video/webm					webm;
+video/x-annodex					axv;
+video/x-flv					flv;
+video/x-javafx					fxm;
+video/x-matroska				mkv;
+video/x-matroska-3d				mk3d;
+video/x-ms-asf					asx;
+video/x-ms-wm					wm;
+video/x-ms-wmv					wmv;
+video/x-ms-wmx					wmx;
+video/x-ms-wvx					wvx;
+video/x-msvideo					avi;
+video/x-sgi-movie				movie;
+x-conference/x-cooltalk				ice;
+x-epoc/x-sisx-app				sisx;
+}

+ 0 - 0
nginx/nginx.conf → srv/nginx/nginx.conf


+ 17 - 0
srv/nginx/scgi_params

@@ -0,0 +1,17 @@
+
+scgi_param  REQUEST_METHOD     $request_method;
+scgi_param  REQUEST_URI        $request_uri;
+scgi_param  QUERY_STRING       $query_string;
+scgi_param  CONTENT_TYPE       $content_type;
+
+scgi_param  DOCUMENT_URI       $document_uri;
+scgi_param  DOCUMENT_ROOT      $document_root;
+scgi_param  SCGI               1;
+scgi_param  SERVER_PROTOCOL    $server_protocol;
+scgi_param  REQUEST_SCHEME     $scheme;
+scgi_param  HTTPS              $https if_not_empty;
+
+scgi_param  REMOTE_ADDR        $remote_addr;
+scgi_param  REMOTE_PORT        $remote_port;
+scgi_param  SERVER_PORT        $server_port;
+scgi_param  SERVER_NAME        $server_name;

+ 17 - 0
srv/nginx/uwsgi_params

@@ -0,0 +1,17 @@
+
+uwsgi_param  QUERY_STRING       $query_string;
+uwsgi_param  REQUEST_METHOD     $request_method;
+uwsgi_param  CONTENT_TYPE       $content_type;
+uwsgi_param  CONTENT_LENGTH     $content_length;
+
+uwsgi_param  REQUEST_URI        $request_uri;
+uwsgi_param  PATH_INFO          $document_uri;
+uwsgi_param  DOCUMENT_ROOT      $document_root;
+uwsgi_param  SERVER_PROTOCOL    $server_protocol;
+uwsgi_param  REQUEST_SCHEME     $scheme;
+uwsgi_param  HTTPS              $https if_not_empty;
+
+uwsgi_param  REMOTE_ADDR        $remote_addr;
+uwsgi_param  REMOTE_PORT        $remote_port;
+uwsgi_param  SERVER_PORT        $server_port;
+uwsgi_param  SERVER_NAME        $server_name;

+ 126 - 0
srv/nginx/win-utf

@@ -0,0 +1,126 @@
+
+# This map is not a full windows-1251 <> utf8 map: it does not
+# contain Serbian and Macedonian letters.  If you need a full map,
+# use contrib/unicode2nginx/win-utf map instead.
+
+charset_map  windows-1251  utf-8 {
+
+    82  E2809A ; # single low-9 quotation mark
+
+    84  E2809E ; # double low-9 quotation mark
+    85  E280A6 ; # ellipsis
+    86  E280A0 ; # dagger
+    87  E280A1 ; # double dagger
+    88  E282AC ; # euro
+    89  E280B0 ; # per mille
+
+    91  E28098 ; # left single quotation mark
+    92  E28099 ; # right single quotation mark
+    93  E2809C ; # left double quotation mark
+    94  E2809D ; # right double quotation mark
+    95  E280A2 ; # bullet
+    96  E28093 ; # en dash
+    97  E28094 ; # em dash
+
+    99  E284A2 ; # trade mark sign
+
+    A0  C2A0 ;   # &nbsp;
+    A1  D18E ;   # capital Byelorussian short U
+    A2  D19E ;   # small Byelorussian short u
+
+    A4  C2A4 ;   # currency sign
+    A5  D290 ;   # capital Ukrainian soft G
+    A6  C2A6 ;   # borken bar
+    A7  C2A7 ;   # section sign
+    A8  D081 ;   # capital YO
+    A9  C2A9 ;   # (C)
+    AA  D084 ;   # capital Ukrainian YE
+    AB  C2AB ;   # left-pointing double angle quotation mark
+    AC  C2AC ;   # not sign
+    AD  C2AD ;   # soft hyphen
+    AE  C2AE ;   # (R)
+    AF  D087 ;   # capital Ukrainian YI
+
+    B0  C2B0 ;   # &deg;
+    B1  C2B1 ;   # plus-minus sign
+    B2  D086 ;   # capital Ukrainian I
+    B3  D196 ;   # small Ukrainian i
+    B4  D291 ;   # small Ukrainian soft g
+    B5  C2B5 ;   # micro sign
+    B6  C2B6 ;   # pilcrow sign
+    B7  C2B7 ;   # &middot;
+    B8  D191 ;   # small yo
+    B9  E28496 ; # numero sign
+    BA  D194 ;   # small Ukrainian ye
+    BB  C2BB ;   # right-pointing double angle quotation mark
+
+    BF  D197 ;   # small Ukrainian yi
+
+    C0  D090 ;   # capital A
+    C1  D091 ;   # capital B
+    C2  D092 ;   # capital V
+    C3  D093 ;   # capital G
+    C4  D094 ;   # capital D
+    C5  D095 ;   # capital YE
+    C6  D096 ;   # capital ZH
+    C7  D097 ;   # capital Z
+    C8  D098 ;   # capital I
+    C9  D099 ;   # capital J
+    CA  D09A ;   # capital K
+    CB  D09B ;   # capital L
+    CC  D09C ;   # capital M
+    CD  D09D ;   # capital N
+    CE  D09E ;   # capital O
+    CF  D09F ;   # capital P
+
+    D0  D0A0 ;   # capital R
+    D1  D0A1 ;   # capital S
+    D2  D0A2 ;   # capital T
+    D3  D0A3 ;   # capital U
+    D4  D0A4 ;   # capital F
+    D5  D0A5 ;   # capital KH
+    D6  D0A6 ;   # capital TS
+    D7  D0A7 ;   # capital CH
+    D8  D0A8 ;   # capital SH
+    D9  D0A9 ;   # capital SHCH
+    DA  D0AA ;   # capital hard sign
+    DB  D0AB ;   # capital Y
+    DC  D0AC ;   # capital soft sign
+    DD  D0AD ;   # capital E
+    DE  D0AE ;   # capital YU
+    DF  D0AF ;   # capital YA
+
+    E0  D0B0 ;   # small a
+    E1  D0B1 ;   # small b
+    E2  D0B2 ;   # small v
+    E3  D0B3 ;   # small g
+    E4  D0B4 ;   # small d
+    E5  D0B5 ;   # small ye
+    E6  D0B6 ;   # small zh
+    E7  D0B7 ;   # small z
+    E8  D0B8 ;   # small i
+    E9  D0B9 ;   # small j
+    EA  D0BA ;   # small k
+    EB  D0BB ;   # small l
+    EC  D0BC ;   # small m
+    ED  D0BD ;   # small n
+    EE  D0BE ;   # small o
+    EF  D0BF ;   # small p
+
+    F0  D180 ;   # small r
+    F1  D181 ;   # small s
+    F2  D182 ;   # small t
+    F3  D183 ;   # small u
+    F4  D184 ;   # small f
+    F5  D185 ;   # small kh
+    F6  D186 ;   # small ts
+    F7  D187 ;   # small ch
+    F8  D188 ;   # small sh
+    F9  D189 ;   # small shch
+    FA  D18A ;   # small hard sign
+    FB  D18B ;   # small y
+    FC  D18C ;   # small soft sign
+    FD  D18D ;   # small e
+    FE  D18E ;   # small yu
+    FF  D18F ;   # small ya
+}

+ 11 - 0
srv/redis.conf

@@ -0,0 +1,11 @@
+port 6379
+bind 0.0.0.0
+requirepass Test@123456
+
+save 900 1
+save 300 10
+save 60 10000
+stop-writes-on-bgsave-error yes
+rdbcompression yes
+rdbchecksum yes
+dbfilename dump.rdb

+ 273 - 0
srv/schema/tnb_account_rdb.sql

@@ -0,0 +1,273 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server         : mysql57-209
+ Source Server Type    : MySQL
+ Source Server Version : 50736
+ Source Host           : 192.168.0.209:3306
+ Source Schema         : tnb_account_tdb
+
+ Target Server Type    : MySQL
+ Target Server Version : 50736
+ File Encoding         : 65001
+
+ Date: 13/01/2026 20:39:19
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for account_user_account
+-- ----------------------------
+DROP TABLE IF EXISTS `account_user_account`;
+CREATE TABLE `account_user_account` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `user_id` bigint(20) NOT NULL COMMENT '用户 ID, 全局唯一',
+  `username` varchar(255) NOT NULL COMMENT '用户名, 全局唯一',
+  `mobile` varchar(13) DEFAULT NULL COMMENT '手机号, 全局唯一',
+  `encoded_password` varchar(255) NOT NULL,
+  `salt` varchar(255) NOT NULL,
+  `create_at` datetime(6) NOT NULL COMMENT '帐号创建时间',
+  `enabled` bit(1) NOT NULL COMMENT 'spring-security 字段',
+  `locked` bit(1) NOT NULL COMMENT 'spring-security 字段',
+  `screen_name` varchar(255) NOT NULL,
+  `avatar_url` varchar(255) NOT NULL,
+  `email` varchar(255) NOT NULL COMMENT '邮箱, 全局唯一',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `user_id` (`user_id`) USING BTREE,
+  UNIQUE KEY `username` (`username`) USING BTREE,
+  UNIQUE KEY `index_screen_name` (`screen_name`),
+  UNIQUE KEY `email` (`email`) USING BTREE,
+  UNIQUE KEY `mobile` (`mobile`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=2057872 DEFAULT CHARSET=utf8mb4 COMMENT='用户帐号';
+
+-- ----------------------------
+-- Table structure for account_user_login
+-- ----------------------------
+DROP TABLE IF EXISTS `account_user_login`;
+CREATE TABLE `account_user_login` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `login_id` varchar(255) NOT NULL,
+  `user_id` bigint(20) NOT NULL,
+  `login_type` int(11) NOT NULL,
+  `user_agent` text NOT NULL,
+  `login_ip` varchar(255) NOT NULL,
+  `login_at` bigint(20) NOT NULL COMMENT 'ms 时间戳',
+  `plat` int(11) NOT NULL,
+  `remember_me` tinyint(1) NOT NULL,
+  `success` tinyint(1) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `login_id` (`login_id`),
+  KEY `user_id` (`user_id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=241 DEFAULT CHARSET=utf8mb4 COMMENT='用户登录记录';
+
+-- ----------------------------
+-- Table structure for account_user_registry
+-- ----------------------------
+DROP TABLE IF EXISTS `account_user_registry`;
+CREATE TABLE `account_user_registry` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `enabled` bit(1) NOT NULL COMMENT '是否开放注册',
+  `captcha_code` varchar(255) NOT NULL,
+  `enable_captcha` bit(1) NOT NULL,
+  `verify_code` varchar(255) NOT NULL,
+  `enable_verify` bit(1) NOT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='帐号开放注册规则';
+
+-- ----------------------------
+-- Table structure for account_user_role
+-- ----------------------------
+DROP TABLE IF EXISTS `account_user_role`;
+CREATE TABLE `account_user_role` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `user_id` bigint(20) NOT NULL,
+  `name` varchar(255) NOT NULL,
+  PRIMARY KEY (`id`) USING BTREE,
+  UNIQUE KEY `user_id_2` (`user_id`,`name`),
+  KEY `name` (`name`) USING BTREE,
+  KEY `user_id` (`user_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COMMENT='用户帐号拥有的角色';
+
+-- ----------------------------
+-- Table structure for message_email_account
+-- ----------------------------
+DROP TABLE IF EXISTS `message_email_account`;
+CREATE TABLE `message_email_account` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `smtp` varchar(255) NOT NULL,
+  `username` varchar(255) NOT NULL,
+  `password` varchar(255) NOT NULL,
+  `personal` varchar(255) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `username` (`username`)
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Table structure for message_user_message
+-- ----------------------------
+DROP TABLE IF EXISTS `message_user_message`;
+CREATE TABLE `message_user_message` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `msg_type` int(11) NOT NULL,
+  `message_id` bigint(20) NOT NULL,
+  `title` varchar(255) NOT NULL,
+  `content` varchar(255) NOT NULL,
+  `unread` bit(1) NOT NULL,
+  `user_id` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=786 DEFAULT CHARSET=utf8mb4 COMMENT='用户消息';
+
+-- ----------------------------
+-- Table structure for message_webhook
+-- ----------------------------
+DROP TABLE IF EXISTS `message_webhook`;
+CREATE TABLE `message_webhook` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `create_time` datetime(6) NOT NULL,
+  `deleted` bit(1) NOT NULL,
+  `update_time` datetime(6) NOT NULL,
+  `name` varchar(255) NOT NULL,
+  `url` varchar(255) NOT NULL,
+  `sign` varchar(255) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `UK_gpaf6ryyim70bbv5jfnopn2i7` (`name`)
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='webhook 通知';
+
+-- ----------------------------
+-- Table structure for user_contact
+-- ----------------------------
+DROP TABLE IF EXISTS `user_contact`;
+CREATE TABLE `user_contact` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `friend_id` bigint(20) NOT NULL,
+  `remark_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '备注名',
+  `status` int(10) NOT NULL COMMENT '关系状态',
+  `owner` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `user_id` (`owner`) USING BTREE,
+  KEY `friend_id` (`friend_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='联系人';
+
+-- ----------------------------
+-- Table structure for user_contact_record
+-- ----------------------------
+DROP TABLE IF EXISTS `user_contact_record`;
+CREATE TABLE `user_contact_record` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `apply_id` bigint(20) NOT NULL,
+  `apply_user` bigint(20) NOT NULL,
+  `applied_user` bigint(20) NOT NULL,
+  `friend_status` int(10) NOT NULL,
+  `apply_status` int(10) NOT NULL,
+  `remark` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `user_id` (`apply_user`) USING BTREE,
+  KEY `friend_id` (`applied_user`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='联系人申请记录';
+
+-- ----------------------------
+-- Table structure for user_profile
+-- ----------------------------
+DROP TABLE IF EXISTS `user_profile`;
+CREATE TABLE `user_profile` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `user_id` bigint(20) NOT NULL,
+  `gender` varchar(255) NOT NULL,
+  `signature` varchar(255) NOT NULL COMMENT '用户自我介绍',
+  `following` int(11) NOT NULL,
+  `follower` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `user_id` (`user_id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=420962 DEFAULT CHARSET=utf8mb4 COMMENT='用户信息';
+
+-- ----------------------------
+-- Table structure for user_relation
+-- ----------------------------
+DROP TABLE IF EXISTS `user_relation`;
+CREATE TABLE `user_relation` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL,
+  `create_time` datetime(6) NOT NULL ON UPDATE CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL ON UPDATE CURRENT_TIMESTAMP(6),
+  `user_id` bigint(20) NOT NULL,
+  `following_id` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `user_id` (`user_id`,`following_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COMMENT='用户关系';
+
+-- ----------------------------
+-- Table structure for user_vip
+-- ----------------------------
+DROP TABLE IF EXISTS `user_vip`;
+CREATE TABLE `user_vip` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `user_id` bigint(20) NOT NULL COMMENT '用户 ID',
+  `expire_at` bigint(20) NOT NULL COMMENT 'VIP 用户过期时间',
+  `rcmd_mode` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `user_id` (`user_id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COMMENT='小会员用户';
+
+-- ----------------------------
+-- Table structure for user_wallet_bill
+-- ----------------------------
+DROP TABLE IF EXISTS `user_wallet_bill`;
+CREATE TABLE `user_wallet_bill` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `type` int(11) NOT NULL COMMENT '1 - 收入, 2 - 支出',
+  `quantity` double NOT NULL,
+  `create_at` datetime(6) NOT NULL,
+  `owner` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COMMENT='用户钱包账单';
+
+-- ----------------------------
+-- Table structure for user_wallet_charge
+-- ----------------------------
+DROP TABLE IF EXISTS `user_wallet_charge`;
+CREATE TABLE `user_wallet_charge` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `charge_id` bigint(20) NOT NULL,
+  `quantity` double NOT NULL,
+  `owner` bigint(20) NOT NULL,
+  `status` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `owner` (`charge_id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COMMENT='用户钱包充值';
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 769 - 0
srv/schema/tnb_content_rdb.sql

@@ -0,0 +1,769 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server         : mysql57-209
+ Source Server Type    : MySQL
+ Source Server Version : 50736
+ Source Host           : 192.168.0.209:3306
+ Source Schema         : tnb_content_tdb
+
+ Target Server Type    : MySQL
+ Target Server Version : 50736
+ File Encoding         : 65001
+
+ Date: 13/01/2026 20:39:11
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for blog_about_view
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_about_view`;
+CREATE TABLE `blog_about_view` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `create_time` datetime(6) NOT NULL,
+  `deleted` bit(1) NOT NULL,
+  `update_time` datetime(6) NOT NULL,
+  `content` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
+  `title` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
+
+-- ----------------------------
+-- Table structure for blog_article
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_article`;
+CREATE TABLE `blog_article` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `create_time` datetime(6) NOT NULL,
+  `deleted` bit(1) NOT NULL,
+  `update_time` datetime(6) NOT NULL,
+  `article_id` varchar(255) NOT NULL,
+  `category_id` int(11) NOT NULL,
+  `content` text NOT NULL,
+  `editor` varchar(255) NOT NULL,
+  `excerpt` varchar(255) NOT NULL,
+  `publish_at` datetime(6) NOT NULL,
+  `published` bit(1) NOT NULL,
+  `title` varchar(255) NOT NULL,
+  `owner` bigint(20) DEFAULT NULL,
+  `owner_id` int(11) DEFAULT NULL,
+  `weight` int(11) DEFAULT NULL,
+  `post_type` int(11) DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `UK_7a346qtf7s4mi59cq6eq3bgoe` (`article_id`),
+  KEY `FKnji2jikxh7lkxhgoadgesxpct` (`owner_id`),
+  CONSTRAINT `FKnji2jikxh7lkxhgoadgesxpct` FOREIGN KEY (`owner_id`) REFERENCES `sys_user` (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=603 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Table structure for blog_article_tag
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_article_tag`;
+CREATE TABLE `blog_article_tag` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `create_time` datetime(6) NOT NULL,
+  `deleted` bit(1) NOT NULL,
+  `update_time` datetime(6) NOT NULL,
+  `article_id` varchar(255) NOT NULL,
+  `tag_id` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `article_id` (`article_id`,`tag_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=670 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Table structure for blog_article_view
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_article_view`;
+CREATE TABLE `blog_article_view` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `create_time` datetime(6) NOT NULL,
+  `deleted` bit(1) NOT NULL,
+  `update_time` datetime(6) NOT NULL,
+  `article_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
+  `request_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
+  `session_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=120 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
+
+-- ----------------------------
+-- Table structure for blog_category
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_category`;
+CREATE TABLE `blog_category` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `create_time` datetime(6) NOT NULL,
+  `deleted` bit(1) NOT NULL,
+  `update_time` datetime(6) NOT NULL,
+  `name` varchar(255) NOT NULL,
+  `type` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `UK_46ccwnsi9409t36lurvtyljak` (`name`)
+) ENGINE=InnoDB AUTO_INCREMENT=419 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Table structure for blog_question
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_question`;
+CREATE TABLE `blog_question` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `create_time` datetime(6) NOT NULL,
+  `deleted` bit(1) NOT NULL,
+  `update_time` datetime(6) NOT NULL,
+  `category_id` int(11) NOT NULL,
+  `content` text COLLATE utf8mb4_bin,
+  `owner` bigint(20) DEFAULT NULL,
+  `publish_at` datetime(6) NOT NULL,
+  `question_id` varchar(255) COLLATE utf8mb4_bin NOT NULL,
+  `tag` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
+  `title` varchar(255) COLLATE utf8mb4_bin NOT NULL,
+  `weight` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `UK_4r5x0ds8h0pv2hxoy7bbe0miq` (`question_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
+
+-- ----------------------------
+-- Table structure for blog_question1
+-- ----------------------------
+DROP TABLE IF EXISTS `blog_question1`;
+CREATE TABLE `blog_question1` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `create_time` datetime(6) NOT NULL,
+  `deleted` bit(1) NOT NULL,
+  `update_time` datetime(6) NOT NULL,
+  `category_id` int(11) NOT NULL,
+  `content` text,
+  `publish_at` datetime(6) NOT NULL,
+  `question_id` varchar(255) NOT NULL,
+  `tag` varchar(255) DEFAULT NULL,
+  `title` varchar(255) NOT NULL,
+  `owner` bigint(20) DEFAULT NULL,
+  `owner_id` int(11) DEFAULT NULL,
+  `weight` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `UK_488pr2mfs6ye2bjlwf0pbcynf` (`question_id`),
+  KEY `FKruq0rciiv2u9do75lmxrniv2c` (`owner_id`),
+  CONSTRAINT `FKruq0rciiv2u9do75lmxrniv2c` FOREIGN KEY (`owner_id`) REFERENCES `sys_user` (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=414 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Table structure for disk_album
+-- ----------------------------
+DROP TABLE IF EXISTS `disk_album`;
+CREATE TABLE `disk_album` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` tinyint(1) NOT NULL DEFAULT '0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `album_id` bigint(20) NOT NULL,
+  `album_name` varchar(255) NOT NULL,
+  `file_type` int(11) NOT NULL,
+  `cover_file_id` varchar(255) NOT NULL,
+  `num` int(11) NOT NULL,
+  `create_at` bigint(20) NOT NULL,
+  `create_by` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `UK_rfuvf3osnlaakifjdao0a8e2x` (`album_id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COMMENT='网盘相册';
+
+-- ----------------------------
+-- Table structure for disk_album_file
+-- ----------------------------
+DROP TABLE IF EXISTS `disk_album_file`;
+CREATE TABLE `disk_album_file` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `album_id` bigint(20) NOT NULL,
+  `sha256sum` varchar(255) NOT NULL,
+  `pos` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `album_id` (`album_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=575 DEFAULT CHARSET=utf8mb4 COMMENT='网盘相册中的文件';
+
+-- ----------------------------
+-- Table structure for disk_cam_device
+-- ----------------------------
+DROP TABLE IF EXISTS `disk_cam_device`;
+CREATE TABLE `disk_cam_device` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `cam_id` bigint(20) NOT NULL,
+  `cam_name` varchar(255) NOT NULL,
+  `state` int(11) NOT NULL,
+  `add_at` datetime(6) NOT NULL,
+  `add_by` bigint(20) NOT NULL,
+  `push_url` varchar(255) DEFAULT NULL,
+  `pull_url` varchar(255) DEFAULT NULL,
+  `device_id` varchar(255) DEFAULT NULL,
+  `online` bit(1) DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `favlist_id` (`cam_id`),
+  UNIQUE KEY `UK_s2qsleagsnky42h7gomb5lmf9` (`device_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COMMENT='摄像头';
+
+-- ----------------------------
+-- Table structure for disk_cam_record
+-- ----------------------------
+DROP TABLE IF EXISTS `disk_cam_record`;
+CREATE TABLE `disk_cam_record` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `cam_id` bigint(20) NOT NULL,
+  `record_id` bigint(20) NOT NULL,
+  `video_file_id` varchar(255) NOT NULL COMMENT 'object_id',
+  `cover_url` varchar(255) DEFAULT NULL,
+  `start_at` datetime(6) NOT NULL,
+  `duration` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `record_id` (`record_id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=13072 DEFAULT CHARSET=utf8mb4 COMMENT='摄像头录像记录';
+
+-- ----------------------------
+-- Table structure for disk_file
+-- ----------------------------
+DROP TABLE IF EXISTS `disk_file`;
+CREATE TABLE `disk_file` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `channel_code` int(11) NOT NULL,
+  `file_id` varchar(255) NOT NULL COMMENT 'oss 的 object_id',
+  `pid` varchar(255) NOT NULL,
+  `path` varchar(255) NOT NULL,
+  `filename` varchar(255) NOT NULL,
+  `file_type` int(11) NOT NULL,
+  `sha256sum` varchar(255) NOT NULL,
+  `size` bigint(20) NOT NULL,
+  `owner` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `UK_db0vg67wc61jnlo7nesm0ulbg` (`file_id`) USING BTREE,
+  KEY `path` (`path`),
+  KEY `sha256sum` (`sha256sum`),
+  KEY `owner` (`owner`),
+  KEY `file_type` (`file_type`),
+  KEY `pid` (`pid`)
+) ENGINE=InnoDB AUTO_INCREMENT=4405 DEFAULT CHARSET=utf8mb4 COMMENT='网盘文件';
+
+-- ----------------------------
+-- Table structure for disk_share
+-- ----------------------------
+DROP TABLE IF EXISTS `disk_share`;
+CREATE TABLE `disk_share` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` tinyint(1) NOT NULL DEFAULT '0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `share_id` bigint(20) NOT NULL,
+  `album_type` int(11) NOT NULL,
+  `album_id` bigint(20) NOT NULL,
+  `create_at` bigint(20) NOT NULL,
+  `create_by` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `UK_rfuvf3osnlaakifjdao0a8e2x` (`share_id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COMMENT='网盘分享';
+
+-- ----------------------------
+-- Table structure for disk_share_to
+-- ----------------------------
+DROP TABLE IF EXISTS `disk_share_to`;
+CREATE TABLE `disk_share_to` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `share_id` bigint(20) NOT NULL,
+  `user_id` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `UK_rfuvf3osnlaakifjdao0a8e2x` (`share_id`) USING BTREE,
+  KEY `user_id` (`user_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COMMENT='网盘被分享用户';
+
+-- ----------------------------
+-- Table structure for disk_user_activity
+-- ----------------------------
+DROP TABLE IF EXISTS `disk_user_activity`;
+CREATE TABLE `disk_user_activity` (
+  `id` varchar(255) COLLATE utf8mb4_bin NOT NULL,
+  `activity` int(11) DEFAULT NULL,
+  `create_time` datetime(6) DEFAULT NULL,
+  `create_by` int(11) DEFAULT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='用户活动';
+
+-- ----------------------------
+-- Table structure for file_job_detail
+-- ----------------------------
+DROP TABLE IF EXISTS `file_job_detail`;
+CREATE TABLE `file_job_detail` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `job_id` bigint(20) NOT NULL,
+  `job_name` varchar(255) NOT NULL,
+  `status` int(11) NOT NULL,
+  `start_at` datetime(6) NOT NULL,
+  `end_at` datetime(6) DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `oss_type` (`job_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务详情';
+
+-- ----------------------------
+-- Table structure for file_local_file
+-- ----------------------------
+DROP TABLE IF EXISTS `file_local_file`;
+CREATE TABLE `file_local_file` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL,
+  `create_time` datetime(6) NOT NULL,
+  `update_time` datetime(6) NOT NULL,
+  `object_name` varchar(255) NOT NULL,
+  `object_id` varchar(255) NOT NULL,
+  `absolute_path` varchar(255) NOT NULL,
+  `sha256sum` varchar(255) NOT NULL,
+  `filename` varchar(255) NOT NULL,
+  `content_type` varchar(255) NOT NULL,
+  `file_type` int(11) NOT NULL,
+  `size` bigint(20) NOT NULL,
+  `owner` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `UK_db0vg67wc61jnlo7nesm0ulbg` (`object_id`),
+  UNIQUE KEY `UK_iyqdutum15wj3lc4u15dakbs2` (`object_name`)
+) ENGINE=InnoDB AUTO_INCREMENT=16795 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Table structure for file_store_node
+-- ----------------------------
+DROP TABLE IF EXISTS `file_store_node`;
+CREATE TABLE `file_store_node` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `node_addr` varchar(255) NOT NULL,
+  `http_port` int(11) NOT NULL,
+  `rpc_port` int(11) NOT NULL,
+  `enabled` bit(1) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `UK_1wxd94v6bxoaaxci2c9plth54` (`node_addr`,`http_port`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Table structure for file_store_volume
+-- ----------------------------
+DROP TABLE IF EXISTS `file_store_volume`;
+CREATE TABLE `file_store_volume` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `store_dir` varchar(255) NOT NULL,
+  `store_node_id` int(11) NOT NULL,
+  `name` varchar(255) NOT NULL,
+  `volume` varchar(255) NOT NULL,
+  `mount_point` varchar(255) NOT NULL,
+  `fs_type` varchar(255) NOT NULL,
+  `block_id` varchar(255) NOT NULL,
+  `total_space` bigint(20) NOT NULL,
+  `avail_space` bigint(20) NOT NULL,
+  `total_inode` bigint(20) NOT NULL,
+  `avail_inode` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `FK1kcrqmowoyk62q46kslo9bh9f` (`store_node_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Table structure for file_upload_channel
+-- ----------------------------
+DROP TABLE IF EXISTS `file_upload_channel`;
+CREATE TABLE `file_upload_channel` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `user_node_id` int(11) NOT NULL,
+  `channel_code` int(11) NOT NULL,
+  `name` varchar(255) NOT NULL,
+  `prefix` varchar(255) NOT NULL,
+  `max_size` bigint(20) NOT NULL,
+  `file_type` int(11) NOT NULL,
+  `scope` int(11) NOT NULL,
+  `set_url` bit(1) NOT NULL,
+  `set_callback` bit(1) NOT NULL,
+  `enabled` bit(1) NOT NULL,
+  `create_by` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `prefix` (`prefix`,`user_node_id`) USING BTREE,
+  UNIQUE KEY `user_node_id` (`user_node_id`,`channel_code`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Table structure for file_user_key
+-- ----------------------------
+DROP TABLE IF EXISTS `file_user_key`;
+CREATE TABLE `file_user_key` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `access_key_id` varchar(255) NOT NULL,
+  `access_key_secret` varchar(255) NOT NULL,
+  `create_by` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `UK_b19uph22ddqmlfck521k6yao5` (`access_key_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Table structure for file_user_node
+-- ----------------------------
+DROP TABLE IF EXISTS `file_user_node`;
+CREATE TABLE `file_user_node` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `store_node_id` int(11) NOT NULL,
+  `domain` varchar(255) NOT NULL,
+  `referer` varchar(255) NOT NULL,
+  `secret_key` varchar(255) NOT NULL,
+  `create_by` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `domain` (`domain`)
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
+
+-- ----------------------------
+-- Table structure for search_wenshu_doc
+-- ----------------------------
+DROP TABLE IF EXISTS `search_wenshu_doc`;
+CREATE TABLE `search_wenshu_doc` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `create_time` datetime(6) NOT NULL,
+  `deleted` bit(1) NOT NULL,
+  `update_time` datetime(6) NOT NULL,
+  `case_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
+  `case_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
+  `case_type` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
+  `case_type_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
+  `cause` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
+  `court` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
+  `judgment_date` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
+  `original_url` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
+  `parties` text COLLATE utf8mb4_bin,
+  `procedures` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
+  `public_date` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
+  `region` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
+  `wenshu_id` bigint(20) DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `UK_63xcr8vbrobc2wpauyptej0d` (`wenshu_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
+
+-- ----------------------------
+-- Table structure for search_wenshu_legals
+-- ----------------------------
+DROP TABLE IF EXISTS `search_wenshu_legals`;
+CREATE TABLE `search_wenshu_legals` (
+  `wenshu_doc_id` int(11) NOT NULL,
+  `legal_basis` text COLLATE utf8mb4_bin,
+  KEY `FK3j21a8x2jltc4obypgjcblgox` (`wenshu_doc_id`),
+  CONSTRAINT `FK3j21a8x2jltc4obypgjcblgox` FOREIGN KEY (`wenshu_doc_id`) REFERENCES `search_wenshu_doc` (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
+
+-- ----------------------------
+-- Table structure for vod_banner_video
+-- ----------------------------
+DROP TABLE IF EXISTS `vod_banner_video`;
+CREATE TABLE `vod_banner_video` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `create_at` bigint(20) NOT NULL,
+  `video_id` varchar(255) CHARACTER SET utf8mb4 NOT NULL,
+  `title` varchar(255) COLLATE utf8mb4_bin NOT NULL,
+  `cover_url` varchar(255) COLLATE utf8mb4_bin NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `UK_rfuvf3osnlaakifjdao0a8e2x` (`cover_url`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
+
+-- ----------------------------
+-- Table structure for vod_play_complete
+-- ----------------------------
+DROP TABLE IF EXISTS `vod_play_complete`;
+CREATE TABLE `vod_play_complete` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `video_id` varchar(255) NOT NULL,
+  `user_id` bigint(20) NOT NULL,
+  `create_at` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `user_id` (`user_id`),
+  KEY `video_id` (`video_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=3563 DEFAULT CHARSET=utf8mb4 COMMENT='视频播放完成记录';
+
+-- ----------------------------
+-- Table structure for vod_play_record
+-- ----------------------------
+DROP TABLE IF EXISTS `vod_play_record`;
+CREATE TABLE `vod_play_record` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `video_id` varchar(255) NOT NULL,
+  `user_id` bigint(20) NOT NULL,
+  `current_time` double NOT NULL,
+  `create_at` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uk_user_id_video_id` (`user_id`,`video_id`) USING BTREE,
+  KEY `user_id` (`user_id`),
+  KEY `video_id` (`video_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1407137 DEFAULT CHARSET=utf8mb4 COMMENT='视频播放记录';
+
+-- ----------------------------
+-- Table structure for vod_post_album
+-- ----------------------------
+DROP TABLE IF EXISTS `vod_post_album`;
+CREATE TABLE `vod_post_album` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `album_id` bigint(20) NOT NULL,
+  `album_name` varchar(255) NOT NULL,
+  `channel_code` int(11) NOT NULL,
+  `cover_url` varchar(255) NOT NULL,
+  `post_type` int(11) NOT NULL,
+  `total` int(11) NOT NULL,
+  `scope` int(11) NOT NULL,
+  `create_at` bigint(20) NOT NULL,
+  `create_by` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `favlist_id` (`album_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=5642 DEFAULT CHARSET=utf8mb4 COMMENT='稿件合集';
+
+-- ----------------------------
+-- Table structure for vod_post_category
+-- ----------------------------
+DROP TABLE IF EXISTS `vod_post_category`;
+CREATE TABLE `vod_post_category` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+  `pid` int(11) NOT NULL COMMENT '分区级别【1 一级分区, 2 二级分区】',
+  `name` varchar(255) NOT NULL COMMENT '分区名',
+  `sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序',
+  `vip` bit(1) NOT NULL,
+  PRIMARY KEY (`id`) USING BTREE,
+  KEY `name` (`name`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=130 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='视频分类';
+
+-- ----------------------------
+-- Table structure for vod_post_item
+-- ----------------------------
+DROP TABLE IF EXISTS `vod_post_item`;
+CREATE TABLE `vod_post_item` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `album_id` bigint(20) NOT NULL,
+  `post_id` varchar(255) NOT NULL,
+  `pos` int(11) NOT NULL,
+  `channel_code` int(11) NOT NULL,
+  `object_id` varchar(255) NOT NULL,
+  `format` varchar(255) NOT NULL,
+  `url` varchar(255) NOT NULL,
+  `width` int(11) NOT NULL,
+  `height` int(11) NOT NULL,
+  `horizontal` tinyint(1) NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `favlist_id` (`album_id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=322174 DEFAULT CHARSET=utf8mb4 COMMENT='稿件合集包含的稿件';
+
+-- ----------------------------
+-- Table structure for vod_post_tag
+-- ----------------------------
+DROP TABLE IF EXISTS `vod_post_tag`;
+CREATE TABLE `vod_post_tag` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `tag_id` varchar(255) NOT NULL,
+  `tag_name` varchar(255) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `tag_id` (`tag_id`),
+  UNIQUE KEY `tag_name` (`tag_name`)
+) ENGINE=InnoDB AUTO_INCREMENT=1126111 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='视频标签';
+
+-- ----------------------------
+-- Table structure for vod_search_record
+-- ----------------------------
+DROP TABLE IF EXISTS `vod_search_record`;
+CREATE TABLE `vod_search_record` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `keyword` varchar(255) NOT NULL,
+  `search_by` bigint(20) NOT NULL,
+  `search_at` datetime NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `user_id` (`search_by`),
+  KEY `keyword` (`keyword`)
+) ENGINE=InnoDB AUTO_INCREMENT=563 DEFAULT CHARSET=utf8mb4 COMMENT='搜索记录';
+
+-- ----------------------------
+-- Table structure for vod_site_notice
+-- ----------------------------
+DROP TABLE IF EXISTS `vod_site_notice`;
+CREATE TABLE `vod_site_notice` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `content` text NOT NULL,
+  `create_by` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='站点公告';
+
+-- ----------------------------
+-- Table structure for vod_video_category_post
+-- ----------------------------
+DROP TABLE IF EXISTS `vod_video_category_post`;
+CREATE TABLE `vod_video_category_post` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `video_id` varchar(255) CHARACTER SET utf8mb4 NOT NULL,
+  `category_pid` int(11) NOT NULL,
+  `category_id` int(11) NOT NULL,
+  `duration` int(11) NOT NULL,
+  `horizontal` bit(1) NOT NULL,
+  `scope` int(11) NOT NULL COMMENT '视频可见范围',
+  `publish_at` datetime NOT NULL,
+  `publish_by` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `UK_rfuvf3osnlaakifjdao0a8e2x` (`category_id`,`publish_by`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=265118 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='视频分区稿件';
+
+-- ----------------------------
+-- Table structure for vod_video_error
+-- ----------------------------
+DROP TABLE IF EXISTS `vod_video_error`;
+CREATE TABLE `vod_video_error` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL,
+  `create_time` datetime(6) NOT NULL,
+  `update_time` datetime(6) NOT NULL,
+  `video_id` varchar(255) NOT NULL,
+  `error_code` int(11) NOT NULL,
+  `error_info` varchar(255) NOT NULL,
+  `solved` bit(1) NOT NULL,
+  PRIMARY KEY (`id`) USING BTREE,
+  KEY `name` (`video_id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=1403 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='视频稿件错误';
+
+-- ----------------------------
+-- Table structure for vod_video_file
+-- ----------------------------
+DROP TABLE IF EXISTS `vod_video_file`;
+CREATE TABLE `vod_video_file` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `video_id` varchar(255) NOT NULL,
+  `object_id` varchar(255) NOT NULL,
+  `channel_code` varchar(255) NOT NULL,
+  `video_codec` varchar(255) NOT NULL,
+  `vbit_rate` bigint(20) NOT NULL,
+  `audio_codec` varchar(255) NOT NULL,
+  `abit_rate` bigint(20) NOT NULL,
+  `url_type` varchar(255) NOT NULL,
+  `url` varchar(255) NOT NULL,
+  `format_name` varchar(255) NOT NULL,
+  `quality` varchar(255) NOT NULL,
+  `width` int(11) NOT NULL,
+  `height` int(11) NOT NULL,
+  `horizontal` bit(1) NOT NULL,
+  `duration` int(11) NOT NULL,
+  `size` bigint(20) NOT NULL,
+  `video_file_id` varchar(255) DEFAULT NULL COMMENT '待删除',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `object_id` (`object_id`) USING BTREE,
+  UNIQUE KEY `video_file_id` (`video_file_id`) USING BTREE,
+  KEY `video_id` (`video_id`),
+  KEY `size` (`size`)
+) ENGINE=InnoDB AUTO_INCREMENT=715195 DEFAULT CHARSET=utf8mb4 COMMENT='视频文件';
+
+-- ----------------------------
+-- Table structure for vod_video_post
+-- ----------------------------
+DROP TABLE IF EXISTS `vod_video_post`;
+CREATE TABLE `vod_video_post` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `video_id` varchar(255) CHARACTER SET utf8mb4 NOT NULL,
+  `title` varchar(255) CHARACTER SET utf8mb4 NOT NULL,
+  `description` text CHARACTER SET utf8mb4,
+  `category_pid` int(11) DEFAULT NULL,
+  `category_id` int(11) DEFAULT NULL,
+  `duration` int(11) NOT NULL,
+  `horizontal` bit(1) NOT NULL,
+  `cover_url` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
+  `scope` int(11) NOT NULL COMMENT '视频可见范围',
+  `status` int(11) NOT NULL COMMENT '视频贴状态',
+  `publish_at` datetime DEFAULT NULL,
+  `publish_by` bigint(20) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `UK_rfuvf3osnlaakifjdao0a8e2x` (`video_id`) USING BTREE,
+  KEY `user_id` (`publish_by`) USING BTREE,
+  KEY `status` (`status`),
+  KEY `scope` (`scope`),
+  KEY `category_pid` (`category_pid`),
+  KEY `category_id` (`category_id`),
+  KEY `duration` (`duration`),
+  KEY `pub_date` (`publish_at`),
+  KEY `query_max` (`category_pid`,`category_id`,`scope`,`status`) USING BTREE,
+  KEY `deleted` (`deleted`),
+  FULLTEXT KEY `index_title` (`title`) /*!50100 WITH PARSER `ngram` */ 
+) ENGINE=InnoDB AUTO_INCREMENT=3059588 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='视频稿件';
+
+-- ----------------------------
+-- Table structure for vod_video_statistic
+-- ----------------------------
+DROP TABLE IF EXISTS `vod_video_statistic`;
+CREATE TABLE `vod_video_statistic` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `video_id` varchar(255) NOT NULL,
+  `view` int(11) NOT NULL,
+  `danmaku` int(11) NOT NULL,
+  `comment` int(11) NOT NULL,
+  `favorite` int(11) NOT NULL,
+  `share` int(11) NOT NULL,
+  `thumb_up` int(11) NOT NULL,
+  `thumb_down` int(11) NOT NULL,
+  `coin` int(11) NOT NULL COMMENT 'bilibili 硬币',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `UK_rfuvf3osnlaakifjdao0a8e2x` (`video_id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=3043577 DEFAULT CHARSET=utf8mb4 COMMENT='视频稿件数据';
+
+-- ----------------------------
+-- Table structure for vod_video_tag
+-- ----------------------------
+DROP TABLE IF EXISTS `vod_video_tag`;
+CREATE TABLE `vod_video_tag` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `video_id` varchar(255) NOT NULL,
+  `tag_id` varchar(255) NOT NULL,
+  `scope` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `tag_id` (`tag_id`),
+  KEY `video_id` (`video_id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=29460005 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='视频稿件包含的标签';
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 110 - 0
srv/schema/tnb_oss_rdb.sql

@@ -0,0 +1,110 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server         : mysql57-209
+ Source Server Type    : MySQL
+ Source Server Version : 50736
+ Source Host           : 192.168.0.209:3306
+ Source Schema         : tnb_oss_tdb
+
+ Target Server Type    : MySQL
+ Target Server Version : 50736
+ File Encoding         : 65001
+
+ Date: 13/01/2026 20:39:00
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for data_block
+-- ----------------------------
+DROP TABLE IF EXISTS `data_block`;
+CREATE TABLE `data_block` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `content_id` varchar(255) NOT NULL,
+  `block_id` varchar(255) NOT NULL,
+  `host` varchar(255) NOT NULL,
+  `absolute_path` varchar(255) NOT NULL COMMENT '本地文件绝对路径',
+  `size` bigint(20) NOT NULL,
+  `replica` int(11) DEFAULT '0',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `content_id` (`content_id`) USING BTREE,
+  KEY `absolute_path` (`absolute_path`),
+  KEY `size` (`size`),
+  KEY `deleted` (`deleted`)
+) ENGINE=InnoDB AUTO_INCREMENT=7616951 DEFAULT CHARSET=utf8mb4 COMMENT='对象数据块';
+
+-- ----------------------------
+-- Table structure for file_meta
+-- ----------------------------
+DROP TABLE IF EXISTS `file_meta`;
+CREATE TABLE `file_meta` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `object_name` varchar(255) NOT NULL,
+  `object_id` varchar(255) NOT NULL,
+  `pid` varchar(255) NOT NULL,
+  `content_id` varchar(255) NOT NULL,
+  `sha256sum` varchar(255) NOT NULL COMMENT '文件的 sha256sum 值',
+  `filename` varchar(255) NOT NULL,
+  `size` bigint(20) NOT NULL,
+  `file_type` int(11) NOT NULL,
+  `content_type` varchar(255) NOT NULL COMMENT 'http content-type',
+  `scope` int(11) NOT NULL,
+  `upload_by` varchar(255) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `UK_rfuvf3osnlaakifjdao0a8e2x` (`object_name`) USING BTREE,
+  UNIQUE KEY `object_id` (`object_id`) USING BTREE,
+  KEY `sha256sum` (`sha256sum`) USING BTREE,
+  KEY `file_type` (`file_type`),
+  KEY `pid` (`pid`),
+  KEY `filename` (`filename`),
+  KEY `acl` (`scope`),
+  KEY `content_id` (`content_id`),
+  KEY `upload_by` (`upload_by`),
+  KEY `deleted` (`deleted`)
+) ENGINE=InnoDB AUTO_INCREMENT=8338173 DEFAULT CHARSET=utf8mb4 COMMENT='对象元数据';
+
+-- ----------------------------
+-- Table structure for file_multipart
+-- ----------------------------
+DROP TABLE IF EXISTS `file_multipart`;
+CREATE TABLE `file_multipart` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `deleted` bit(1) NOT NULL DEFAULT b'0',
+  `create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+  `content_id` varchar(255) NOT NULL,
+  `absolute_path` varchar(255) NOT NULL,
+  `sha256sum` varchar(255) NOT NULL COMMENT '文件的 sha256sum 值',
+  `total_size` bigint(20) NOT NULL,
+  `chunk_size` int(11) NOT NULL,
+  `total_chunks` int(11) NOT NULL,
+  `uploaded` bit(1) NOT NULL,
+  `upload_by` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `sha256sum_uploadby` (`sha256sum`,`upload_by`) USING BTREE,
+  UNIQUE KEY `content_id` (`content_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='分片文件';
+
+-- ----------------------------
+-- Table structure for file_part
+-- ----------------------------
+DROP TABLE IF EXISTS `file_part`;
+CREATE TABLE `file_part` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `content_id` varchar(255) NOT NULL,
+  `chunk_number` int(11) NOT NULL,
+  `current_chunk_size` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `sha256sum` (`content_id`,`chunk_number`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='分片文件';
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 76 - 0
srv/start_thirdparty.sh

@@ -0,0 +1,76 @@
+#!/bin/bash
+
+###############################################################################
+# 第三方依赖 docker 镜像
+###############################################################################
+
+dir=`pwd`
+
+image='registry.cn-chengdu.aliyuncs.com/reghao/nginx:1.28.1-alpine'
+docker run -d --name=nginx --network=host --restart=always \
+    -v /etc/localtime:/etc/localtime:ro \
+    -v ${dir}/nginx:/etc/nginx \
+    ${image}
+
+# root 密码 Root@123456
+image='registry.cn-chengdu.aliyuncs.com/reghao/mysql:5.7.32'
+docker run -d --name=mysql57 --network=host --restart=always \
+    -v /etc/localtime:/etc/localtime:ro \
+    -e MYSQL_ROOT_PASSWORD=Root@123456 \
+    ${image}
+
+# 密码在 redis.conf 配置文件中设置
+image='registry.cn-chengdu.aliyuncs.com/reghao/redis:6.0.16-bullseye'
+docker run -d --name=redis --network=host --restart=always \
+    -v /etc/localtime:/etc/localtime:ro \
+    -v ${dir}/redis.conf:/etc/redis.conf \
+    -d ${image} redis-server /etc/redis.conf --appendonly yes
+
+# 帐号密码 test 和 Test@123456
+image='registry.cn-chengdu.aliyuncs.com/reghao/rabbitmq:3.8.9-management-alpine'
+docker run -d --name=rabbitmq --network=host --restart=always \
+    -v /etc/localtime:/etc/localtime:ro \
+    -e RABBITMQ_DEFAULT_USER=test \
+    -e RABBITMQ_DEFAULT_PASS=Test@123456 \
+    ${image}
+
+image='registry.cn-chengdu.aliyuncs.com/reghao/zookeeper:3.8.4'
+docker run -d --name=zookeeper --network=host --restart=always \
+    -v /etc/localtime:/etc/localtime:ro \
+    ${image}
+
+image='registry.cn-chengdu.aliyuncs.com/reghao/nacos_nacos-server:v2.4.1'
+# nacos-standalone-derby
+# bH3NaBbCDSK0mAI5k6T9BjVqPl2con36 -base64-> YkgzTmFCYkNEU0swbUFJNWs2VDlCalZxUGwyY29uMzYK
+docker run -d --name=nacos --network=host --restart=always \
+    -v /etc/localtime:/etc/localtime:ro \
+    -e MODE=standalone \
+    -e NACOS_AUTH_ENABLE=true \
+    -e NACOS_AUTH_TOKEN=YkgzTmFCYkNEU0swbUFJNWs2VDlCalZxUGwyY29uMzYK \
+    -e NACOS_AUTH_IDENTITY_KEY=nacos_auth_key \
+    -e NACOS_AUTH_IDENTITY_VALUE=nacos_auth_value \
+    ${image}
+
+image='registry.cn-chengdu.aliyuncs.com/reghao/elasticsearch:7.17.18'
+# docker run -d --name=elasticsearch --network=host \
+#     -v /etc/localtime:/etc/localtime:ro \
+#     -e "discovery.type=single-node" \
+#     ${image}
+
+echo "sleep 60s to wait service started..."
+sleep 60
+
+echo "set mysql account..."
+# mysql 帐号密码 test 和 Test@123456
+sql1="create user test@'%' IDENTIFIED WITH mysql_native_password BY 'Test@123456';"
+sql2="grant all privileges on *.* to test@'%' with grant option;"
+sql3="flush privileges;"
+mysql -h127.0.0.1 -uroot -pRoot@123456 << EOF
+${sql1}
+${sql2}
+${sql3}
+EOF
+
+echo "set nacos account..."
+# 帐号密码 nacos 和 E4B2M7W8Dx
+curl -X POST 'http://localhost:8848/nacos/v1/auth/users/admin' -d 'password=E4B2M7W8Dx'

+ 6 - 10
start.sh

@@ -4,13 +4,6 @@ set -e
 
 cd tmp/bin/
 
-###############################################################################
-# 启动 bnt 项目应用
-###############################################################################
-nohup java -jar bntweb.jar > bntweb.log 2>&1 &
-echo 'sleep 10s to wait bntweb started...'
-sleep 10
-
 ###############################################################################
 # 启动 tnb 项目应用
 ###############################################################################
@@ -21,13 +14,16 @@ sleep 10
 nohup java -jar tnb-gateway.jar > tnb-gateway.log 2>&1 &
 nohup java -jar tnb-account.jar > tnb-account.log 2>&1 &
 nohup java -jar tnb-user.jar > tnb-user.log 2>&1 &
-nohup java -jar tnb-message.jar > tnb-message.log 2>&1 &
+
 nohup java -jar tnb-file.jar > tnb-file.log 2>&1 &
 nohup java -jar tnb-content.jar > tnb-content.log 2>&1 &
 nohup java -jar tnb-data.jar > tnb-data.log 2>&1 &
 
+export SERVER_ADDRESS=127.0.0.1
+nohup java -jar tnb-message.jar > tnb-message.log 2>&1 &
+
 ###############################################################################
 # 启动 oss-store 应用
 ###############################################################################
-# cd oss-store
-# bash start.sh
+cd oss-store
+bash start.sh