Переглянути джерело

增加docker的编译环境,取消对windows编译结果的依赖。

zhulangren 7 місяців тому
батько
коміт
6afa88cbca

+ 8 - 6
docker/README.md

@@ -1,22 +1,24 @@
 # 启动前准备
 
 *   安装 docker、docker-compose 环境
-
-*   使用 vs 编译后台 Admin.NET 复制发布文件到 *docker/app/*
-
-*   如果服务器有 node 环境使用 build.sh 编译前端文件到 *docker/nginx/dist*。或者将编译结果放进 *docker/nginx/dist*
+*   使用 docker-compose -f docker-compose-builder.yml up  命令编译结果会直接被 docker-compose up使用  发布编译结果跟项目运行全部在linux docker环境 不再需要vs发布编译
+*   docker-compose.yml 虽然配置了mysql 跟tdengine环境默认是没启用的,需要的话自行配置数据库链接
 
 # 注意事项
 
 1.  *docker/app/Configuration/Database.json* 文件不需要修改,不要覆盖掉了
-2.  *app/Configuration/App.json* 主要配置了 api 端口 5050,如果你的端口也是这个可以覆盖
 2.  *Web/.env.production* 文件配置接口地址配置为 VITE\_API\_URL = '/prod-api'
 3.  nginx、mysql 配置文件无需修改
 4.  redis/redis.conf 中配置密码,如果不设密码 REDIS_PASSWORD 置空,app/Configuration/Cache.json中server=redis:6379,password 置空
 
 ***
+# 编译命令
+1. *docker-compose -f docker-compose-builder.yml up net-builder*    编译admin.net 项目
+2. *docker-compose -f docker-compose-builder.yml up web-builder*    编译前端
+3. *docker-compose -f docker-compose-builder.yml up down*           移除docker 容器方便下次编译
+
 
-# 启动命令
+# 启动命令 
 
 `docker-compose up -d`
 

+ 6 - 0
docker/app/Configuration/Database.json

@@ -23,6 +23,9 @@
           "EnableIncreSeed": false // 启用种子增量更新-特性[IncreSeed]
         }
       }
+
+
+
       //// 日志独立数据库配置
       //{
       //  "ConfigId": "1300000000002", // 日志库标识-禁止修改
@@ -61,6 +64,9 @@
       //    "EnableIncreSeed": false // 启用种子增量更新-特性[IncreSeed]
       //  }
       //}
+
+
+
     ]
   }
 }

+ 16 - 0
docker/app/Configuration/EventBus.json

@@ -0,0 +1,16 @@
+{
+  "$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
+
+  "EventBus": {
+    // 事件源存储器类型,默认内存存储(Redis则需要配合缓存相关配置)
+    "EventSourceType": "Memory", // Memory、Redis、RabbitMQ、Kafka
+    "RabbitMQ": {
+      "UserName": "adminnet",
+      "Password": "adminnet++123456",
+      "HostName": "127.0.0.1",
+      "Port": 5672
+    },
+    "Kafka": {
+    }
+  }
+}

+ 49 - 0
docker/app/Configuration/Logging.json

@@ -0,0 +1,49 @@
+{
+  "$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
+
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft.AspNetCore": "Warning",
+      "Microsoft.EntityFrameworkCore": "Information",
+      "AspNetCoreRateLimit": "None",
+      "System.Net.Http.HttpClient": "Warning"
+    },
+    "File": {
+      "Enabled": true, // 启用文件日志
+      "FileName": "logs/{0:yyyyMMdd}_{1}.log", // 日志文件
+      "Append": true, // 追加覆盖
+      "MinimumLevel": "Error", // 日志级别
+      "FileSizeLimitBytes": 10485760, // 10M=10*1024*1024
+      "MaxRollingFiles": 30 // 只保留30个文件
+    },
+    "Database": {
+      "Enabled": true, // 启用数据库日志
+      "MinimumLevel": "Information" // 日志级别
+    },
+    "ElasticSearch": {
+      "Enabled": false, // 启用ES日志
+      "AuthType": "Basic", // ES认证类型,可选 Basic、ApiKey、Base64ApiKey
+      "User": "admin", // Basic认证的用户名,使用Basic认证类型时必填
+      "Password": "123456", // Basic认证的密码,使用Basic认证类型时必填
+      "ApiId": "", // 使用ApiKey认证类型时必填
+      "ApiKey": "", // 使用ApiKey认证类型时必填
+      "Base64ApiKey": "TmtrOEszNEJuQ0NyaWlydGtROFk6SG1RZ0w3YzBTc2lCanJTYlV3aXNzZw==", // 使用Base64ApiKey认证类型时必填
+      "Fingerprint": "37:08:6A:C6:06:CC:9A:43:CF:ED:25:A2:1C:A4:69:57:90:31:2C:06:CA:61:56:39:6A:9C:46:11:BD:22:51:DA", // ES使用Https时的证书指纹
+      "ServerUris": [ "http://192.168.1.100:9200" ], // 地址
+      "DefaultIndex": "adminnet" // 索引
+    },
+    "Monitor": {
+      "GlobalEnabled": true, // 启用全局拦截日志(建议生产环境关闭,否则对性能有影响)
+      "IncludeOfMethods": [], // 拦截特定方法,当GlobalEnabled=false有效
+      "ExcludeOfMethods": [], // 排除特定方法,当GlobalEnabled=true有效
+      "BahLogLevel": "Information", // Oops.Oh 和 Oops.Bah 业务日志输出级别
+      "WithReturnValue": true, // 是否包含返回值,默认true
+      "ReturnValueThreshold": 0, // 返回值字符串阈值,默认0全量输出
+      "JsonBehavior": "None", // 是否输出Json,默认None(OnlyJson、All)
+      "JsonIndented": false, // 是否格式化Json
+      "UseUtcTimestamp": false, // 时间格式UTC、LOCAL
+      "ConsoleLog": true // 是否显示控制台日志
+    }
+  }
+}

+ 14 - 0
docker/app/Configuration/OAuth.json

@@ -0,0 +1,14 @@
+{
+  "$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
+
+  "OAuth": {
+    "Weixin": {
+      "ClientId": "xxx",
+      "ClientSecret": "xxx"
+    },
+    "Gitee": {
+      "ClientId": "xxx",
+      "ClientSecret": "xxx"
+    }
+  }
+}

+ 29 - 0
docker/app/Configuration/Upload.json

@@ -0,0 +1,29 @@
+{
+  "$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
+
+  "Upload": {
+    "Path": "upload/{yyyy}/{MM}/{dd}", // 文件上传目录
+    "MaxSize": 51200, // 文件最大限制KB:1024*50
+    "ContentType": [ "image/jpg", "image/png", "image/jpeg", "image/gif", "image/bmp", "text/plain", "text/xml", "application/pdf", "application/msword", "application/vnd.ms-excel", "application/vnd.ms-powerpoint", "application/vnd.openxmlformats-officedocument.presentationml.presentation", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "video/mp4", "application/wps-office.docx", "application/wps-office.xlsx", "application/wps-office.pptx", "application/vnd.android.package-archive" ],
+    "EnableMd5": false // 启用文件MDF5验证-防止重复上传
+  },
+  "OSSProvider": {
+    "Enabled": false,
+    "Provider": "Minio", // OSS提供者 Invalid/Minio/Aliyun/QCloud/Qiniu/HuaweiCloud
+    "Endpoint": "xxx.xxx.xxx.xxx:8090", // 节点/API地址(在腾讯云OSS中表示AppId)
+    "Region": "xxx.xxx.xxx.xxx", // 地域
+    "AccessKey": "",
+    "SecretKey": "",
+    "IsEnableHttps": false, // 是否启用HTTPS
+    "IsEnableCache": true, // 是否启用缓存
+    "Bucket": "admin.net",
+    "CustomHost": "" // 自定义Host:拼接外链的Host,若空则使用Endpoint拼接
+  },
+  "SSHProvider": {
+    "Enabled": false,
+    "Host": "127.0.0.1",
+    "Port": 8222,
+    "Username": "sshuser",
+    "Password": "Password.1"
+  }
+}

+ 0 - 7
docker/build.sh

@@ -1,7 +0,0 @@
-#/bin/bash
-home=$(dirname `readlink -f $0`)
-\cp -f $home/.env.production  $home/../Web/.env.production
-cd $home/../Web
-cnpm i
-cnpm run build
-\cp -rf dist $home/nginx/

+ 21 - 0
docker/docker-compose-builder.yml

@@ -0,0 +1,21 @@
+version: "3"
+
+services:
+  web-builder:
+     image: node:22-alpine  # 官方Node.js v22镜像(Alpine版仅约180MB):ml-citation{ref="3,4" data="citationList"}
+     volumes:
+       - ../Web/:/app         # 挂载项目代码目录
+       - ./.env.production:/app/.env.production
+     working_dir: /app
+     environment:
+       NODE_ENV: development
+     command: sh -c "npm install --legacy-peer-deps --registry=https://registry.npmmirror.com && npm run build"
+  net-builder:
+    image: mcr.microsoft.com/dotnet/sdk:9.0
+    volumes:
+      - ../Admin.NET/:/app
+    working_dir: /app
+    command: dotnet build Admin.NET.sln -c Release
+
+
+

+ 47 - 4
docker/docker-compose.yml

@@ -9,7 +9,7 @@ services:
     environment:
       - TZ=Asia/Shanghai
     volumes:
-      - "./nginx/dist:/usr/share/nginx/html"
+      - ../Web/dist:/usr/share/nginx/html
       - "./nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro"
       - "./nginx/key:/etc/nginx/key/"
     links:
@@ -51,16 +51,59 @@ services:
     command: ['redis-server','/usr/local/etc/redis/redis.conf']
     environment: # 设置环境变量,例如密码
       - REDIS_PASSWORD=123456
+  minio:
+    image: minio/minio:RELEASE.2025-04-22T22-12-26Z
+    container_name: minio
+    restart: always
+    environment:
+      - MINIO_ROOT_USER=admin
+      - MINIO_ROOT_PASSWORD=admin123456
+    volumes:
+      - ./minio/data:/data
+      - ./minio/config:/root/.minio
+    ports:
+      - "9104:9000"  # API端口
+      - "9105:9001"  # 控制台端口
+    command: server /data --console-address ":9001"
+  tdengine:
+    image: tdengine/tdengine:3.3.6.13
+    volumes:
+      - ./tdengine/taos/dnode/data:/var/lib/taos
+      - ./tdengine/taos/dnode/log:/var/log/taos      
+    hostname: tdengine
+    container_name: tdengine
+    privileged: true
+    environment:
+      TAOS_FQDN: "tdengine"
+      TAOS_FIRST_EP: "tdengine"  # 指向首个节点主机名
+      TAOS_SECOND_EP: "tdengine" # 可选备用节点 
+
+
+    ports:
+     - 6030:6030
+     - 6041:6041
+     - 6044-6049:6044-6049
+     - 6044-6045:6044-6045/udp
+     - 6060:6060
+
+
+
+  
+
+
   adminNet:
-    image: mcr.microsoft.com/dotnet/aspnet:6.0
+    image: mcr.microsoft.com/dotnet/aspnet:9.0
     ports:
       - "9102:5050"
     environment:
       - TZ=Asia/Shanghai
     volumes:
-      - "./app:/app"
+      - ../Admin.NET/Admin.NET.Web.Entry/bin/Release/net9.0/:/app
+      - ./app/Configuration/:/app/Configuration/
+      - ./app/wait-for-it.sh:/app/wait-for-it.sh
     working_dir: /app
-    command: ["/app/wait-for-it.sh", "mysql:3306", "-t", "120", "--","dotnet", "Admin.NET.Web.Entry.dll", "--content-root", "/app/wwwroot"]
+    command: ["/bin/bash", "-c", "/app/wait-for-it.sh mysql:3306 -t 120 && dotnet Admin.NET.Web.Entry.dll --content-root /app/wwwroot"]
+
     depends_on:
       - mysql
       - redis

+ 2 - 2
docker/nginx/conf/nginx.conf

@@ -40,7 +40,7 @@ http {
 		
 
 		location /prod-api/hubs { 
-			proxy_pass http://adminNet:5050/hubs; #启用http长连接支持websocket 
+			proxy_pass http://adminNet:5005/hubs; #启用http长连接支持websocket 
 			proxy_http_version 1.1; 
 			proxy_set_header Upgrade $http_upgrade; 
 			proxy_set_header Connection "upgrade"; 
@@ -53,7 +53,7 @@ http {
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header REMOTE-HOST $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-            proxy_pass http://adminNet:5050/;
+            proxy_pass http://adminNet:5005/;
         }