Преглед на файлове

refactor: 抽取平台配置到环境变量 - 新增 .env.example 配置模板(含平台名称/SSO/样本中心/数据库等) - docker-compose.yml 改为从 .env 读取所有配置 - 后端 /profile 接口返回 app_title 和 app_version - LogoFull 组件从后端动态获取平台名称(不再硬编码) - builder.html title 改为使用 VITE_APP_TITLE 变量 - 改名只需修改 .env 中的 APP_TITLE 即可全局生效

mengboxin137-blip преди 5 дни
родител
ревизия
21e45a7d71
променени са 7 файла, в които са добавени 119 реда и са изтрити 30 реда
  1. 60 0
      .env.example
  2. 4 0
      apps/maxkb/settings/base/web.py
  3. 3 1
      apps/system_manage/serializers/system.py
  4. 36 26
      docker-compose.yml
  5. 1 1
      ui/builder.html
  6. 9 2
      ui/src/components/logo/LogoFull.vue
  7. 6 0
      ui/src/stores/modules/user.ts

+ 60 - 0
.env.example

@@ -0,0 +1,60 @@
+# ============================================================
+# 智能体平台环境变量配置
+# 复制此文件为 .env 并修改对应的值
+# ============================================================
+
+# ==================== 平台基础信息 ====================
+# 平台名称(显示在页面标题、Logo等位置)
+APP_TITLE=智能体平台
+# 平台版本号
+APP_VERSION=v1.0
+
+# ==================== 数据库配置 ====================
+DB_HOST=127.0.0.1
+DB_PORT=5432
+DB_USER=postgres
+DB_PASSWORD=zhagent123
+DB_NAME=maxkb
+
+# ==================== Redis 配置 ====================
+REDIS_HOST=127.0.0.1
+REDIS_PORT=6379
+REDIS_PASSWORD=
+REDIS_DB=0
+
+# ==================== SSO 统一认证配置 ====================
+# SSO 认证服务地址
+SSO_BASE_URL=http://192.168.92.61:8200
+# SSO 应用标识
+SSO_CLIENT_ID=
+# SSO 应用密钥
+SSO_CLIENT_SECRET=
+# SSO 回调地址(本平台的回调URL)
+SSO_REDIRECT_URI=http://localhost/admin/auth/callback
+# SSO 登出后跳转地址
+SSO_LOGOUT_REDIRECT_URL=http://192.168.92.61:9200/login
+
+# ==================== 样本中心配置 ====================
+# 样本中心 API 地址
+SAMPLE_CENTER_BASE_URL=
+# 样本中心应用标识
+SAMPLE_CENTER_APP_ID=
+# 样本中心应用密钥
+SAMPLE_CENTER_APP_SECRET=
+
+# ==================== 服务配置 ====================
+# 调试模式(生产环境设为 false)
+DEBUG=false
+# 语言(zh-CN / en-US / zh-Hant)
+LANGUAGE_CODE=zh-CN
+# Session 超时时间(秒,默认8小时)
+SESSION_TIMEOUT=28800
+
+# ==================== 本地模型配置 ====================
+LOCAL_MODEL_HOST=127.0.0.1
+LOCAL_MODEL_PORT=11636
+LOCAL_MODEL_PROTOCOL=http
+
+# ==================== 存储配置 ====================
+# 文件上传存储路径(Docker 部署时映射的路径)
+UPLOAD_PATH=/app/uploads

+ 4 - 0
apps/maxkb/settings/base/web.py

@@ -209,3 +209,7 @@ SSO_LOGOUT_REDIRECT_URL = CONFIG.get("SSO_LOGOUT_REDIRECT_URL") or ""
 SAMPLE_CENTER_BASE_URL = CONFIG.get("SAMPLE_CENTER_BASE_URL") or ""
 SAMPLE_CENTER_APP_ID = CONFIG.get("SAMPLE_CENTER_APP_ID") or ""
 SAMPLE_CENTER_APP_SECRET = CONFIG.get("SAMPLE_CENTER_APP_SECRET") or ""
+
+# 平台信息配置
+APP_TITLE = CONFIG.get("APP_TITLE") or "智能体平台"
+APP_VERSION = CONFIG.get("APP_VERSION") or "v1.0"

+ 3 - 1
apps/system_manage/serializers/system.py

@@ -41,4 +41,6 @@ class SystemProfileSerializer(serializers.Serializer):
         license_is_valid = DatabaseModelManage.get_model('license_is_valid') or (lambda: False)
         return {'version': version, 'edition': settings.edition,
                 'license_is_valid': license_is_valid() if license_is_valid() is not None else False,
-                'rsa': get_key_pair_by_sql().get('key')}
+                'rsa': get_key_pair_by_sql().get('key'),
+                'app_title': getattr(settings, 'APP_TITLE', '智能体平台'),
+                'app_version': getattr(settings, 'APP_VERSION', 'v1.0')}

+ 36 - 26
docker-compose.yml

@@ -5,13 +5,13 @@ services:
     container_name: zhagent-db
     restart: always
     environment:
-      POSTGRES_DB: maxkb
-      POSTGRES_USER: postgres
+      POSTGRES_DB: ${DB_NAME:-maxkb}
+      POSTGRES_USER: ${DB_USER:-postgres}
       POSTGRES_PASSWORD: ${DB_PASSWORD:-zhagent123}
     ports:
       - "5432:5432"
     volumes:
-      - D:/UGit/maas_agent_storage/postgresql:/var/lib/postgresql/data
+      - ${DATA_PATH:-./data}/postgresql:/var/lib/postgresql/data
     healthcheck:
       test: ["CMD-SHELL", "pg_isready -U postgres"]
       interval: 10s
@@ -26,7 +26,7 @@ services:
     ports:
       - "6379:6379"
     volumes:
-      - D:/UGit/maas_agent_storage/redis:/data
+      - ${DATA_PATH:-./data}/redis:/data
     healthcheck:
       test: ["CMD", "redis-cli", "ping"]
       interval: 10s
@@ -45,21 +45,26 @@ services:
       - MAXKB_CONFIG_TYPE=ENV
       - MAXKB_DB_HOST=db
       - MAXKB_DB_PORT=5432
-      - MAXKB_DB_USER=postgres
+      - MAXKB_DB_USER=${DB_USER:-postgres}
       - MAXKB_DB_PASSWORD=${DB_PASSWORD:-zhagent123}
-      - MAXKB_DB_NAME=maxkb
+      - MAXKB_DB_NAME=${DB_NAME:-maxkb}
       - MAXKB_REDIS_HOST=redis
       - MAXKB_REDIS_PORT=6379
-      - MAXKB_REDIS_PASSWORD=
-      - MAXKB_REDIS_DB=0
-      - MAXKB_DEBUG=false
-      - MAXKB_SSO_BASE_URL=http://192.168.92.61:8200
-      - MAXKB_SSO_CLIENT_ID=kcoy9GEKTfCRUZOrwqOtce4vhiyXYjro
-      - MAXKB_SSO_CLIENT_SECRET=PNcpLCGXAOd6MSIs5WhQ52DyGEVcf8W45D5SLLXQcFCPij9ZZtssQYeGBPhbXZrp
-      - MAXKB_SSO_REDIRECT_URI=http://10.110.20.131/admin/auth/callback
-      - MAXKB_SSO_LOGOUT_REDIRECT_URL=http://192.168.92.61:9200/login
+      - MAXKB_REDIS_PASSWORD=${REDIS_PASSWORD:-}
+      - MAXKB_REDIS_DB=${REDIS_DB:-0}
+      - MAXKB_DEBUG=${DEBUG:-false}
+      - MAXKB_APP_TITLE=${APP_TITLE:-智能体平台}
+      - MAXKB_APP_VERSION=${APP_VERSION:-v1.0}
+      - MAXKB_SSO_BASE_URL=${SSO_BASE_URL:-}
+      - MAXKB_SSO_CLIENT_ID=${SSO_CLIENT_ID:-}
+      - MAXKB_SSO_CLIENT_SECRET=${SSO_CLIENT_SECRET:-}
+      - MAXKB_SSO_REDIRECT_URI=${SSO_REDIRECT_URI:-}
+      - MAXKB_SSO_LOGOUT_REDIRECT_URL=${SSO_LOGOUT_REDIRECT_URL:-}
+      - MAXKB_SAMPLE_CENTER_BASE_URL=${SAMPLE_CENTER_BASE_URL:-}
+      - MAXKB_SAMPLE_CENTER_APP_ID=${SAMPLE_CENTER_APP_ID:-}
+      - MAXKB_SAMPLE_CENTER_APP_SECRET=${SAMPLE_CENTER_APP_SECRET:-}
     volumes:
-      - D:/UGit/maas_agent_storage/uploads:/app/uploads
+      - ${UPLOAD_PATH:-./data/uploads}:/app/uploads
       - ./apps/static:/app/apps/static
     depends_on:
       db:
@@ -77,21 +82,26 @@ services:
       - MAXKB_CONFIG_TYPE=ENV
       - MAXKB_DB_HOST=db
       - MAXKB_DB_PORT=5432
-      - MAXKB_DB_USER=postgres
+      - MAXKB_DB_USER=${DB_USER:-postgres}
       - MAXKB_DB_PASSWORD=${DB_PASSWORD:-zhagent123}
-      - MAXKB_DB_NAME=maxkb
+      - MAXKB_DB_NAME=${DB_NAME:-maxkb}
       - MAXKB_REDIS_HOST=redis
       - MAXKB_REDIS_PORT=6379
-      - MAXKB_REDIS_PASSWORD=
-      - MAXKB_REDIS_DB=0
-      - MAXKB_DEBUG=false
-      - MAXKB_SSO_BASE_URL=http://192.168.92.61:8200
-      - MAXKB_SSO_CLIENT_ID=kcoy9GEKTfCRUZOrwqOtce4vhiyXYjro
-      - MAXKB_SSO_CLIENT_SECRET=PNcpLCGXAOd6MSIs5WhQ52DyGEVcf8W45D5SLLXQcFCPij9ZZtssQYeGBPhbXZrp
-      - MAXKB_SSO_REDIRECT_URI=http://10.110.20.131/admin/auth/callback
-      - MAXKB_SSO_LOGOUT_REDIRECT_URL=http://192.168.92.61:9200/login
+      - MAXKB_REDIS_PASSWORD=${REDIS_PASSWORD:-}
+      - MAXKB_REDIS_DB=${REDIS_DB:-0}
+      - MAXKB_DEBUG=${DEBUG:-false}
+      - MAXKB_APP_TITLE=${APP_TITLE:-智能体平台}
+      - MAXKB_APP_VERSION=${APP_VERSION:-v1.0}
+      - MAXKB_SSO_BASE_URL=${SSO_BASE_URL:-}
+      - MAXKB_SSO_CLIENT_ID=${SSO_CLIENT_ID:-}
+      - MAXKB_SSO_CLIENT_SECRET=${SSO_CLIENT_SECRET:-}
+      - MAXKB_SSO_REDIRECT_URI=${SSO_REDIRECT_URI:-}
+      - MAXKB_SSO_LOGOUT_REDIRECT_URL=${SSO_LOGOUT_REDIRECT_URL:-}
+      - MAXKB_SAMPLE_CENTER_BASE_URL=${SAMPLE_CENTER_BASE_URL:-}
+      - MAXKB_SAMPLE_CENTER_APP_ID=${SAMPLE_CENTER_APP_ID:-}
+      - MAXKB_SAMPLE_CENTER_APP_SECRET=${SAMPLE_CENTER_APP_SECRET:-}
     volumes:
-      - D:/UGit/maas_agent_storage/uploads:/app/uploads
+      - ${UPLOAD_PATH:-./data/uploads}:/app/uploads
     depends_on:
       db:
         condition: service_healthy

+ 1 - 1
ui/builder.html

@@ -4,7 +4,7 @@
     <meta charset="UTF-8" />
     <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <title>网讯Maas智能体平台</title>
+    <title>%VITE_APP_TITLE%</title>
   </head>
   <body>
     <div id="app"></div>

+ 9 - 2
ui/src/components/logo/LogoFull.vue

@@ -2,7 +2,7 @@
   <img v-if="theme.themeInfo?.loginLogo" :src="fileURL" alt="" height="45px" class="mr-8" />
   <template v-else>
     <div style="font-size: 20px; font-weight: bold; color: var(--el-color-primary); display: flex; align-items: center; height: 100%; white-space: nowrap;">
-      网讯Maas智能体平台v1.0
+      {{ platformTitle }}
     </div>
   </template>
 </template>
@@ -17,7 +17,14 @@ defineProps({
     default: '36px',
   },
 })
-const { theme } = useStore()
+const { theme, user } = useStore()
+
+const platformTitle = computed(() => {
+  const title = user.appTitle || '智能体平台'
+  const version = user.appVersion || ''
+  return version ? `${title}${version}` : title
+})
+
 const isDefaultTheme = computed(() => {
   return theme.isDefaultTheme()
 })

+ 6 - 0
ui/src/stores/modules/user.ts

@@ -18,6 +18,8 @@ export interface userStateTypes {
   workspace_id: string
   workspace_list: Array<any>,
   rsaKey: string
+  appTitle: string
+  appVersion: string
 }
 
 const useUserStore = defineStore('user', {
@@ -29,6 +31,8 @@ const useUserStore = defineStore('user', {
     workspace_id: '',
     workspace_list: [],
     rsaKey: '',
+    appTitle: '智能体平台',
+    appVersion: 'v1.0',
   }),
   actions: {
     getLanguage() {
@@ -143,6 +147,8 @@ const useUserStore = defineStore('user', {
             this.edition = ok.data.edition
             this.version = ok.data.version
             this.rsaKey = ok.data.rsa
+            this.appTitle = ok.data.app_title || '智能体平台'
+            this.appVersion = ok.data.app_version || 'v1.0'
             const theme = useThemeStore()
             if (this.isEE() || this.isPE()) {
               await theme.theme()