This commit is contained in:
BBIT-Kai
2025-10-22 13:54:10 +08:00
parent e81b2e9c20
commit 64262c4432
9 changed files with 144 additions and 164 deletions
+3
View File
@@ -6,6 +6,7 @@ from routers.Chat import chatRouter
from routers.Datasource import reportDataRouter from routers.Datasource import reportDataRouter
from routers.F8 import f8Router from routers.F8 import f8Router
from routers.Knowledge import knowledgeRouter from routers.Knowledge import knowledgeRouter
from routers.Public import publicRouter
from routers.RabbitMQ import rqRouter from routers.RabbitMQ import rqRouter
from routers.Report import reportRouter from routers.Report import reportRouter
from routers.Service import serviceRouter from routers.Service import serviceRouter
@@ -45,4 +46,6 @@ for r in routers:
app.include_router(f8Router, prefix="/f8", tags=["f8"]) app.include_router(f8Router, prefix="/f8", tags=["f8"])
app.include_router(publicRouter, prefix="/api/public", tags=["api"])
MyUtils.async_new_task(mq_pull_analysis) MyUtils.async_new_task(mq_pull_analysis)
+32
View File
@@ -0,0 +1,32 @@
import base64
from fastapi import APIRouter
from config.app import F8_SERVER_USER_ID
from models.BaseResponse import BaseResponse
from models.F8ImageRequestV2 import F8ImageRequestV2
from service.vision import process_ticket_image
from utils import MyUtils
publicRouter = APIRouter()
@publicRouter.post("/recognize-cocoon-metrics")
async def cocoonTicket(data: F8ImageRequestV2):
input_data = data.image
if "," in input_data:
input_data = input_data.split(",")[1]
try:
img_bytes = base64.b64decode(input_data)
json_data = await MyUtils.async_task(
process_ticket_image,
2,
data.needBarcode,
img_bytes,
f"{data.title}.jpg",
data.title,
F8_SERVER_USER_ID,
)
return BaseResponse(data=json_data)
except Exception as e:
return BaseResponse(status=False, message=f"解析失败: {str(e)}", data=None)
+72 -2
View File
@@ -2,11 +2,13 @@
## 一、技术栈 ## 一、技术栈
- ### 部署 - ### 运维
- **Docker**:项目部署 - **Docker**:项目部署
- **Nginx**:前端项目部署 - **Nginx**:前端项目部署
- **Kong**: 网关 - **Kong**: 网关
- **Prometheus**:服务监控
- **Grafana**:数据可视化
- ### 前端 - ### 前端
@@ -154,7 +156,75 @@ docker compose up -d
docker image prune -f docker image prune -f
``` ```
## 四、其他 ## 四、配置
- 安装顺序
1. 安装docker
2. 运行基本环境infra-compose.yaml
3. 安装Harbor
4. 推送镜像
5. 运行前后端程序docker-compose.yaml
- Harbor
1. 添加用户
2. 添加仓库
3. 添加仓库用户使用权限
4. (2x客户端)登录
```
docker login http://s1.ronsunny.cn:13011
```
- Prometheus
1. 设置docker metrics配置文件
```
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://mirror.baidubce.com",
"https://docker.nju.edu.cn"
],
"metrics-addr": "10.10.10.9:9323",
"experimental": true,
"insecure-registries": ["s1.ronsunny.cn:13011"]
}
```
2. 重启docker
```
sudo systemctl restart docker
```
- RabbitMQ
1. 添加用户
2. 添加Vhost
- [Grafana][https://grafana.com/grafana/dashboards/]
1. 创建Prometheus数据源
2. 增加配置
| 项目 | 代码 | 描述 |
| ----------- | ----- | ---- |
| MinIO | 13502 | |
| Docker | 9621 | |
| PostgreSQL | 9628 | |
| 主机 | 1860 | |
| RabbitMQ | 10991 | |
| Redis | 11835 | |
| Prometheus | 19268 | |
| 主机 中文版 | 8919 | |
## 五、其他
### 旧部署 ### 旧部署
-8
View File
@@ -1,11 +1,3 @@
x-kong-config:
&kong-env
KONG_DATABASE: postgres
KONG_PG_HOST: postgres
KONG_PG_DATABASE: kong
KONG_PG_USER: postgres
KONG_PG_PASSWORD: 123456
services: services:
# ---------- Vue 前端 ---------- # ---------- Vue 前端 ----------
vue: vue:
+25 -16
View File
@@ -7,6 +7,7 @@ x-kong-config:
KONG_PG_USER: postgres KONG_PG_USER: postgres
KONG_PG_PASSWORD: 123456 KONG_PG_PASSWORD: 123456
services: services:
# ---------- PostgreSQL ---------- # ---------- PostgreSQL ----------
postgres: postgres:
container_name: ce_postgres container_name: ce_postgres
@@ -15,6 +16,7 @@ services:
POSTGRES_DB: ktor # 实际上这里已经没用了,因为卷已经创建了,现在在用ktor2、kong两个数据库 POSTGRES_DB: ktor # 实际上这里已经没用了,因为卷已经创建了,现在在用ktor2、kong两个数据库
POSTGRES_USER: postgres POSTGRES_USER: postgres
POSTGRES_PASSWORD: 123456 POSTGRES_PASSWORD: 123456
POSTGRES_HOST_AUTH_METHOD: trust
ports: ports:
- "5432:5432" - "5432:5432"
volumes: volumes:
@@ -27,6 +29,11 @@ services:
redis: redis:
container_name: ce_redis container_name: ce_redis
image: redis:7.2.3-alpine image: redis:7.2.3-alpine
command: [
"redis-server",
"--save", "60", "100",
"--appendonly", "yes",
]
volumes: volumes:
- redis_data:/data - redis_data:/data
ports: ports:
@@ -50,13 +57,13 @@ services:
- minio_data:/data - minio_data:/data
networks: networks:
- ce_network - ce_network
restart: unless-stopped
command: server /data --console-address ":9001" command: server /data --console-address ":9001"
healthcheck: healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 10s interval: 30s
timeout: 5s timeout: 20s
retries: 5 retries: 3
restart: unless-stopped
# ---------- ETCD ---------- # ---------- ETCD ----------
etcd: etcd:
@@ -69,15 +76,15 @@ services:
- ETCD_SNAPSHOT_COUNT=50000 - ETCD_SNAPSHOT_COUNT=50000
networks: networks:
- ce_network - ce_network
restart: unless-stopped
volumes: volumes:
- etcd_data:/data/etcd - etcd_data:/data/etcd
command: etcd -advertise-client-urls=http://etcd:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /data/etcd command: etcd -advertise-client-urls=http://etcd:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /data/etcd
healthcheck: healthcheck:
test: ["CMD", "etcdctl", "endpoint", "health"] test: ["CMD", "etcdctl", "endpoint", "health"]
interval: 10s interval: 30s
timeout: 5s timeout: 20s
retries: 5 retries: 3
restart: unless-stopped
# ---------- Milvus ---------- # ---------- Milvus ----------
milvus: milvus:
@@ -86,7 +93,6 @@ services:
command: ["milvus", "run", "standalone"] command: ["milvus", "run", "standalone"]
security_opt: security_opt:
- seccomp:unconfined - seccomp:unconfined
restart: unless-stopped
environment: environment:
ETCD_ENDPOINTS: etcd:2379 ETCD_ENDPOINTS: etcd:2379
MINIO_ADDRESS: minio:9000 MINIO_ADDRESS: minio:9000
@@ -107,6 +113,7 @@ services:
depends_on: depends_on:
- etcd - etcd
- minio - minio
restart: unless-stopped
# ---------- Attu ---------- # ---------- Attu ----------
attu: attu:
@@ -118,9 +125,9 @@ services:
- ce_network - ce_network
ports: ports:
- "3000:3000" # 浏览器访问端口 - "3000:3000" # 浏览器访问端口
restart: unless-stopped
depends_on: depends_on:
- milvus - milvus
restart: unless-stopped
# ---------- Kong 网关 ---------- # ---------- Kong 网关 ----------
kong-migrations: kong-migrations:
@@ -184,7 +191,6 @@ services:
rabbitmq: rabbitmq:
image: rabbitmq:4.2-rc-management-alpine image: rabbitmq:4.2-rc-management-alpine
container_name: ce_rabbitmq container_name: ce_rabbitmq
restart: always
environment: environment:
RABBITMQ_DEFAULT_USER: admin RABBITMQ_DEFAULT_USER: admin
RABBITMQ_DEFAULT_PASS: 123456 RABBITMQ_DEFAULT_PASS: 123456
@@ -198,12 +204,12 @@ services:
- rabbitmq_data:/var/lib/rabbitmq - rabbitmq_data:/var/lib/rabbitmq
networks: networks:
- ce_network - ce_network
restart: unless-stopped
# ---------- prometheus ---------- # ---------- prometheus ----------
prometheus: prometheus:
image: prom/prometheus:v3.7.0-rc.0 image: prom/prometheus:v3.7.0-rc.0
container_name: ce_prometheus container_name: ce_prometheus
restart: always
volumes: volumes:
- ./config/prometheus:/etc/prometheus - ./config/prometheus:/etc/prometheus
- prometheus_data:/prometheus - prometheus_data:/prometheus
@@ -219,12 +225,12 @@ services:
- postgres-exporter - postgres-exporter
- rabbitmq - rabbitmq
- redis-exporter - redis-exporter
restart: unless-stopped
# ---------- grafana ---------- # ---------- grafana ----------
grafana: grafana:
image: grafana/grafana:12.3.0-18481575143-ubuntu image: grafana/grafana:12.3.0-18481575143-ubuntu
container_name: ce_grafana container_name: ce_grafana
restart: always
ports: ports:
- "0.0.0.0:3001:3000" - "0.0.0.0:3001:3000"
environment: environment:
@@ -237,6 +243,8 @@ services:
- prometheus - prometheus
networks: networks:
- ce_network - ce_network
restart: unless-stopped
# ---------- Redis Exporter ---------- # ---------- Redis Exporter ----------
redis-exporter: redis-exporter:
image: oliver006/redis_exporter:v1.78.0-alpine image: oliver006/redis_exporter:v1.78.0-alpine
@@ -247,9 +255,9 @@ services:
# - "9121:9121" # 无需暴露内网端口 直接通过ce_redis_exporter访问即可 # - "9121:9121" # 无需暴露内网端口 直接通过ce_redis_exporter访问即可
networks: networks:
- ce_network - ce_network
restart: unless-stopped
depends_on: depends_on:
- redis - redis
restart: unless-stopped
# ---------- PostgreSQL Exporter ---------- # ---------- PostgreSQL Exporter ----------
postgres-exporter: postgres-exporter:
@@ -261,9 +269,9 @@ services:
# - "9187:9187" # 无需暴露内网端口 直接通过ce_postgres_exporter访问即可 # - "9187:9187" # 无需暴露内网端口 直接通过ce_postgres_exporter访问即可
networks: networks:
- ce_network - ce_network
restart: unless-stopped
depends_on: depends_on:
- postgres - postgres
restart: unless-stopped
# ---------- node_exporter ---------- # ---------- node_exporter ----------
node_exporter: node_exporter:
@@ -273,9 +281,9 @@ services:
- '--path.rootfs=/host' - '--path.rootfs=/host'
network_mode: host network_mode: host
pid: host pid: host
restart: unless-stopped
volumes: volumes:
- '/:/host:ro,rslave' - '/:/host:ro,rslave'
restart: unless-stopped
# ---------- 数据卷 ---------- # ---------- 数据卷 ----------
volumes: volumes:
@@ -296,6 +304,7 @@ volumes:
rabbitmq_data: rabbitmq_data:
prometheus_config: prometheus_config:
prometheus_data: prometheus_data:
# ---------- 网络 ---------- # ---------- 网络 ----------
networks: networks:
ce_network: ce_network:
+4 -2
View File
@@ -9,7 +9,7 @@ export const overridesPreferences = defineOverridesPreferences({
// overrides // overrides
app: { app: {
name: import.meta.env.VITE_APP_TITLE, name: import.meta.env.VITE_APP_TITLE,
layout: 'sidebar-mixed-nav', layout: 'header-sidebar-nav',
defaultHomePath: '/workspace', // 默认首页路径 defaultHomePath: '/workspace', // 默认首页路径
enablePreferences: false, // 是否启用偏好设置 enablePreferences: false, // 是否启用偏好设置
loginExpiredMode: 'page', // 登录过期模式 不用弹窗登录 跳转到页面登录,防止一些界面不会再加载 loginExpiredMode: 'page', // 登录过期模式 不用弹窗登录 跳转到页面登录,防止一些界面不会再加载
@@ -21,6 +21,7 @@ export const overridesPreferences = defineOverridesPreferences({
breadcrumb: { breadcrumb: {
hideOnlyOne: true, hideOnlyOne: true,
styleType: 'normal', styleType: 'normal',
showHome: true,
}, },
copyright: { copyright: {
enable: false, enable: false,
@@ -31,7 +32,7 @@ export const overridesPreferences = defineOverridesPreferences({
sidebar: { sidebar: {
collapsed: false, collapsed: false,
fixedButton: true, fixedButton: true,
width: 170, width: 190,
}, },
transition: { transition: {
name: 'fade-up', name: 'fade-up',
@@ -40,6 +41,7 @@ export const overridesPreferences = defineOverridesPreferences({
lockScreen: false, lockScreen: false,
notification: false, notification: false,
languageToggle: false, languageToggle: false,
themeToggle: false,
}, },
navigation: { navigation: {
accordion: false, accordion: false,
@@ -22,7 +22,7 @@ const routes: RouteRecordRaw[] = [
meta: { meta: {
icon: 'mdi:monitor-dashboard', icon: 'mdi:monitor-dashboard',
link: 'http://10.10.10.9:8002/', link: 'http://10.10.10.9:8002/',
title: 'Kong后台', title: '网关',
}, },
}, },
{ {
@@ -32,7 +32,7 @@ const routes: RouteRecordRaw[] = [
meta: { meta: {
icon: 'mdi:monitor-dashboard', icon: 'mdi:monitor-dashboard',
link: 'http://10.10.10.9:9001', link: 'http://10.10.10.9:9001',
title: 'MinIO后台', title: '对象存储',
}, },
}, },
{ {
@@ -42,7 +42,7 @@ const routes: RouteRecordRaw[] = [
meta: { meta: {
icon: 'mdi:monitor-dashboard', icon: 'mdi:monitor-dashboard',
link: 'http://10.10.10.9:9091/webui', link: 'http://10.10.10.9:9091/webui',
title: 'Milvus后台', title: '向量数据库',
}, },
}, },
{ {
@@ -52,7 +52,7 @@ const routes: RouteRecordRaw[] = [
meta: { meta: {
icon: 'mdi:monitor-dashboard', icon: 'mdi:monitor-dashboard',
link: 'http://10.10.10.9:3000/', link: 'http://10.10.10.9:3000/',
title: 'Milvus Attu后台', title: '向量数据库Attu',
}, },
}, },
{ {
@@ -62,7 +62,7 @@ const routes: RouteRecordRaw[] = [
meta: { meta: {
icon: 'mdi:monitor-dashboard', icon: 'mdi:monitor-dashboard',
link: 'http://10.10.10.9:15672', link: 'http://10.10.10.9:15672',
title: 'RabbitMQ后台', title: '消息队列',
}, },
}, },
{ {
@@ -72,7 +72,7 @@ const routes: RouteRecordRaw[] = [
meta: { meta: {
icon: 'mdi:monitor-dashboard', icon: 'mdi:monitor-dashboard',
link: 'http://10.10.10.9:13011', link: 'http://10.10.10.9:13011',
title: 'Harbor后台', title: '容器管理',
}, },
}, },
{ {
@@ -82,7 +82,7 @@ const routes: RouteRecordRaw[] = [
meta: { meta: {
icon: 'mdi:monitor-dashboard', icon: 'mdi:monitor-dashboard',
link: 'http://10.10.10.9:9090', link: 'http://10.10.10.9:9090',
title: 'Prometheus后台', title: '日志监控',
}, },
}, },
{ {
@@ -92,7 +92,7 @@ const routes: RouteRecordRaw[] = [
meta: { meta: {
icon: 'mdi:monitor-dashboard', icon: 'mdi:monitor-dashboard',
link: 'http://10.10.10.9:3001', link: 'http://10.10.10.9:3001',
title: 'Grafana后台', title: '数据可视化',
}, },
}, },
], ],
-90
View File
@@ -1,90 +0,0 @@
services:
vue:
container_name: ce_vue
image: ce-vue:latest
ports:
- "8090:8090" # 映射到宿主机的 8090 端口
restart: always
networks:
- ce_network
backend:
container_name: ce-pybackend
image: ce-pybackend:latest
ports:
- "13011:13011"
restart: unless-stopped
networks:
- ce_network
depends_on:
- vue
postgres:
image: postgres:15-alpine
container_name: ce_postgres
environment:
POSTGRES_DB: ktor
POSTGRES_USER: postgres
POSTGRES_PASSWORD: 123456
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
networks:
- ce_network
restart: unless-stopped
redis:
image: redis:7.2.3-alpine
container_name: ce_redis
volumes:
- redis_data:/data
ports:
- "6379:6379"
networks:
- ce_network
restart: unless-stopped
minio:
image: minio/minio:RELEASE.2025-03-12T18-04-18Z
container_name: ce_minio
environment:
MINIO_ACCESS_KEY: minioadmin
MINIO_SECRET_KEY: minioadmin
volumes:
- minio_data:/data
ports:
- "9000:9000"
- "9001:9001"
command: server /data --console-address ":9001"
networks:
- ce_network
restart: unless-stopped
# ollama:
# image: ollama/ollama
# container_name: ce_ollama
# deploy:
# resources:
# reservations:
# devices:7
# - capabilities: [gpu] # 启用 GPU 支持
# volumes:
# - ollama_data:/root/.ollama # 持久化 ollama 数据
# ports:
# - "11434:11434" # 暴露 ollama 的端口
# networks:
# - ce_network
# restart: unless-stopped
# 定义数据卷
volumes:
postgres_data:
redis_data:
minio_data:
ollama_data: # 定义 ollama 的数据卷
# 定义网络
networks:
ce_network:
driver: bridge
-38
View File
@@ -1,51 +1,13 @@
#user nobody;
worker_processes 1; worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events { events {
worker_connections 1024; worker_connections 1024;
} }
http { http {
include mime.types; include mime.types;
default_type application/octet-stream; default_type application/octet-stream;
types {
application/javascript js mjs;
text/css css;
text/html html;
}
sendfile on; sendfile on;
# tcp_nopush on;
#keepalive_timeout 0;
# keepalive_timeout 65;
# gzip on;
# gzip_buffers 32 16k;
# gzip_comp_level 6;
# gzip_min_length 1k;
# gzip_static on;
# gzip_types text/plain
# text/css
# application/javascript
# application/json
# application/x-javascript
# text/xml
# application/xml
# application/xml+rss
# text/javascript; #设置压缩的文件类型
# gzip_vary on;
server { server {
listen 8091; listen 8091;
server_name localhost; server_name localhost;