diff --git a/WeiCloud.Fusion/.dockerignore b/WeiCloud.Fusion/.dockerignore
new file mode 100644
index 0000000..fe1152b
--- /dev/null
+++ b/WeiCloud.Fusion/.dockerignore
@@ -0,0 +1,30 @@
+**/.classpath
+**/.dockerignore
+**/.env
+**/.git
+**/.gitignore
+**/.project
+**/.settings
+**/.toolstarget
+**/.vs
+**/.vscode
+**/*.*proj.user
+**/*.dbmdl
+**/*.jfm
+**/azds.yaml
+**/bin
+**/charts
+**/docker-compose*
+**/Dockerfile*
+**/node_modules
+**/npm-debug.log
+**/obj
+**/secrets.dev.yaml
+**/values.dev.yaml
+LICENSE
+README.md
+!**/.gitignore
+!.git/HEAD
+!.git/config
+!.git/packed-refs
+!.git/refs/heads/**
\ No newline at end of file
diff --git a/WeiCloud.Fusion/AlarmService/Alarm.DomainService/DahAlarm/DahuaGeneralCtlService.cs b/WeiCloud.Fusion/AlarmService/Alarm.DomainService/DahAlarm/DahuaGeneralCtlService.cs
index 8075153..4b1713c 100644
--- a/WeiCloud.Fusion/AlarmService/Alarm.DomainService/DahAlarm/DahuaGeneralCtlService.cs
+++ b/WeiCloud.Fusion/AlarmService/Alarm.DomainService/DahAlarm/DahuaGeneralCtlService.cs
@@ -17,6 +17,7 @@ namespace Alarm.DomainService.DahAlarm
private readonly MQTTClient _mqttClient;
private readonly IMqttClientService _mqttClientService;
private readonly ITokenProviderService _tokenProviderService;
+ private readonly HttpClient _http;
private string mqttHostIp;
private int mqttHostPort;
private int mqttTimeout;
@@ -32,7 +33,7 @@ namespace Alarm.DomainService.DahAlarm
///
///
///
- public DahuaGeneralCtlService(ILogger logger, IConfiguration configuration, MQTTClient mQTTClient, IMqttClientService mqttClientService, ITokenProviderService tokenProviderService)
+ public DahuaGeneralCtlService(ILogger logger, IConfiguration configuration, MQTTClient mQTTClient, IMqttClientService mqttClientService, ITokenProviderService tokenProviderService, HttpClient http)
{
_logger = logger;
_configuration = configuration;
@@ -47,15 +48,16 @@ namespace Alarm.DomainService.DahAlarm
topicName = _configuration["SubscribeMQTT:TopicName"]!;
_mqttClientService = mqttClientService;
_tokenProviderService = tokenProviderService;
+ _http = http;
}
- ///
- /// 开发测试的时候,忽略证书
- ///
- private static readonly HttpClient _http = new(new HttpClientHandler
- {
- ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator,
- });
+ /////
+ ///// 开发测试的时候,忽略证书
+ /////
+ //private static readonly HttpClient _http = new(new HttpClientHandler
+ //{
+ // ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator,
+ //});
///
/// 新增报警事件订阅
diff --git a/WeiCloud.Fusion/AlarmService/AlarmService.API/AlarmService.API.csproj b/WeiCloud.Fusion/AlarmService/AlarmService.API/AlarmService.API.csproj
index c867cbb..8b7c00c 100644
--- a/WeiCloud.Fusion/AlarmService/AlarmService.API/AlarmService.API.csproj
+++ b/WeiCloud.Fusion/AlarmService/AlarmService.API/AlarmService.API.csproj
@@ -5,6 +5,9 @@
enable
enable
True
+ 73a07bbb-9adc-481b-9e17-d583da60d474
+ Linux
+ ..\..
@@ -17,6 +20,7 @@
+
diff --git a/WeiCloud.Fusion/AlarmService/AlarmService.API/Dockerfile b/WeiCloud.Fusion/AlarmService/AlarmService.API/Dockerfile
new file mode 100644
index 0000000..6cde330
--- /dev/null
+++ b/WeiCloud.Fusion/AlarmService/AlarmService.API/Dockerfile
@@ -0,0 +1,52 @@
+# ===== build 阶段 =====
+FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
+WORKDIR /src
+
+# 只拷贝 .csproj 做还原,最大化缓存命中
+COPY ["AlarmService/AlarmService.API/AlarmService.API.csproj", "AlarmService/AlarmService.API/"]
+COPY ["Common.SharedService/Common.Shared.Application/Common.Shared.Application.csproj", "Common.SharedService/Common.Shared.Application/"]
+COPY ["WeiCloud.Core/WeiCloud.Core.csproj", "WeiCloud.Core/"]
+COPY ["WeiCloud.Utils/WeiCloud.Utils.csproj", "WeiCloud.Utils/"]
+COPY ["AlarmService/Alarm.Application/Alarm.Application.csproj", "AlarmService/Alarm.Application/"]
+COPY ["AlarmService/Alarm.DomainService/Alarm.DomainService.csproj", "AlarmService/Alarm.DomainService/"]
+COPY ["Common.SharedService/Common.Shared.DomainService/Common.Shared.DomainService.csproj", "Common.SharedService/Common.Shared.DomainService/"]
+
+RUN dotnet restore "AlarmService/AlarmService.API/AlarmService.API.csproj"
+
+# 再拷贝全部源码并发布(一次 publish 即可)
+COPY . .
+RUN dotnet publish "AlarmService/AlarmService.API/AlarmService.API.csproj" \
+ -c Release -o /app \
+ /p:PublishReadyToRun=true \
+ /p:UseAppHost=false
+
+# ===== runtime 阶段 =====
+FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final
+WORKDIR /app
+
+# 健康检查工具
+RUN apt-get update && apt-get install -y --no-install-recommends curl \
+ && rm -rf /var/lib/apt/lists/*
+
+# 创建非 root 账户(存在则跳过,避免重复构建报错)
+RUN set -eux; \
+ if ! getent group app >/dev/null; then groupadd -g 64198 app; fi; \
+ if ! id -u appuser >/dev/null 2>&1; then useradd -r -u 64198 -g app appuser; fi
+
+# 拷贝发布产物并赋权
+COPY --from=build /app ./
+RUN chown -R appuser:app /app
+
+# 对外只走 8080,TLS 在 Nginx 统一终止
+ENV ASPNETCORE_URLS=http://+:8080 \
+ ASPNETCORE_ENVIRONMENT=Production
+EXPOSE 8080
+
+# 健康检查:你的服务需提供 /healthz
+HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
+ CMD curl -fsS http://localhost:8080/healthz || exit 1
+
+# 以非 root 运行
+USER appuser
+
+ENTRYPOINT ["dotnet", "AlarmService.API.dll"]
diff --git a/WeiCloud.Fusion/AlarmService/AlarmService.API/Program.cs b/WeiCloud.Fusion/AlarmService/AlarmService.API/Program.cs
index 357545a..cd8821f 100644
--- a/WeiCloud.Fusion/AlarmService/AlarmService.API/Program.cs
+++ b/WeiCloud.Fusion/AlarmService/AlarmService.API/Program.cs
@@ -117,6 +117,8 @@ namespace AlarmService.API
app.UseAuthorization();
app.MapControllers();
+ app.MapGet("/healthz", () => Results.Ok("OK"));
+
// Startup ʵ
var startup = new Startup(builder.Configuration);
startup.Configure(app, app.Environment, builder.Configuration);
diff --git a/WeiCloud.Fusion/AlarmService/AlarmService.API/Properties/launchSettings.json b/WeiCloud.Fusion/AlarmService/AlarmService.API/Properties/launchSettings.json
index b4be839..d00ee37 100644
--- a/WeiCloud.Fusion/AlarmService/AlarmService.API/Properties/launchSettings.json
+++ b/WeiCloud.Fusion/AlarmService/AlarmService.API/Properties/launchSettings.json
@@ -1,33 +1,24 @@
-{
- "$schema": "http://json.schemastore.org/launchsettings.json",
- "iisSettings": {
- "windowsAuthentication": false,
- "anonymousAuthentication": true,
- "iisExpress": {
- "applicationUrl": "http://localhost:49511",
- "sslPort": 44376
- }
- },
+{
"profiles": {
"http": {
"commandName": "Project",
- "dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
- "applicationUrl": "http://localhost:5283",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
- }
+ },
+ "dotnetRunMessages": true,
+ "applicationUrl": "http://localhost:5283"
},
"https": {
"commandName": "Project",
- "dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
- "applicationUrl": "https://localhost:7230;http://localhost:5283",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
- }
+ },
+ "dotnetRunMessages": true,
+ "applicationUrl": "https://localhost:7230;http://localhost:5283"
},
"IIS Express": {
"commandName": "IISExpress",
@@ -36,6 +27,26 @@
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
+ },
+ "Container (Dockerfile)": {
+ "commandName": "Docker",
+ "launchBrowser": true,
+ "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger",
+ "environmentVariables": {
+ "ASPNETCORE_HTTPS_PORTS": "8081",
+ "ASPNETCORE_HTTP_PORTS": "8080"
+ },
+ "publishAllPorts": true,
+ "useSSL": true
+ }
+ },
+ "$schema": "http://json.schemastore.org/launchsettings.json",
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:49511",
+ "sslPort": 44376
}
}
}
\ No newline at end of file
diff --git a/WeiCloud.Fusion/ParkingLotService/ParkingLotService.API/Dockerfile b/WeiCloud.Fusion/ParkingLotService/ParkingLotService.API/Dockerfile
new file mode 100644
index 0000000..6cde330
--- /dev/null
+++ b/WeiCloud.Fusion/ParkingLotService/ParkingLotService.API/Dockerfile
@@ -0,0 +1,52 @@
+# ===== build 阶段 =====
+FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
+WORKDIR /src
+
+# 只拷贝 .csproj 做还原,最大化缓存命中
+COPY ["AlarmService/AlarmService.API/AlarmService.API.csproj", "AlarmService/AlarmService.API/"]
+COPY ["Common.SharedService/Common.Shared.Application/Common.Shared.Application.csproj", "Common.SharedService/Common.Shared.Application/"]
+COPY ["WeiCloud.Core/WeiCloud.Core.csproj", "WeiCloud.Core/"]
+COPY ["WeiCloud.Utils/WeiCloud.Utils.csproj", "WeiCloud.Utils/"]
+COPY ["AlarmService/Alarm.Application/Alarm.Application.csproj", "AlarmService/Alarm.Application/"]
+COPY ["AlarmService/Alarm.DomainService/Alarm.DomainService.csproj", "AlarmService/Alarm.DomainService/"]
+COPY ["Common.SharedService/Common.Shared.DomainService/Common.Shared.DomainService.csproj", "Common.SharedService/Common.Shared.DomainService/"]
+
+RUN dotnet restore "AlarmService/AlarmService.API/AlarmService.API.csproj"
+
+# 再拷贝全部源码并发布(一次 publish 即可)
+COPY . .
+RUN dotnet publish "AlarmService/AlarmService.API/AlarmService.API.csproj" \
+ -c Release -o /app \
+ /p:PublishReadyToRun=true \
+ /p:UseAppHost=false
+
+# ===== runtime 阶段 =====
+FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final
+WORKDIR /app
+
+# 健康检查工具
+RUN apt-get update && apt-get install -y --no-install-recommends curl \
+ && rm -rf /var/lib/apt/lists/*
+
+# 创建非 root 账户(存在则跳过,避免重复构建报错)
+RUN set -eux; \
+ if ! getent group app >/dev/null; then groupadd -g 64198 app; fi; \
+ if ! id -u appuser >/dev/null 2>&1; then useradd -r -u 64198 -g app appuser; fi
+
+# 拷贝发布产物并赋权
+COPY --from=build /app ./
+RUN chown -R appuser:app /app
+
+# 对外只走 8080,TLS 在 Nginx 统一终止
+ENV ASPNETCORE_URLS=http://+:8080 \
+ ASPNETCORE_ENVIRONMENT=Production
+EXPOSE 8080
+
+# 健康检查:你的服务需提供 /healthz
+HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
+ CMD curl -fsS http://localhost:8080/healthz || exit 1
+
+# 以非 root 运行
+USER appuser
+
+ENTRYPOINT ["dotnet", "AlarmService.API.dll"]
diff --git a/WeiCloud.Fusion/VideoService/Video.API/Dockerfile b/WeiCloud.Fusion/VideoService/Video.API/Dockerfile
new file mode 100644
index 0000000..726177d
--- /dev/null
+++ b/WeiCloud.Fusion/VideoService/Video.API/Dockerfile
@@ -0,0 +1,52 @@
+# ===== build 阶段 =====
+FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
+WORKDIR /src
+
+# 仅拷贝 csproj 提升缓存命中
+COPY ["VideoService/Video.API/Video.API.csproj", "VideoService/Video.API/"]
+COPY ["Common.SharedService/Common.Shared.Application/Common.Shared.Application.csproj", "Common.SharedService/Common.Shared.Application/"]
+COPY ["WeiCloud.Core/WeiCloud.Core.csproj", "WeiCloud.Core/"]
+COPY ["WeiCloud.Utils/WeiCloud.Utils.csproj", "WeiCloud.Utils/"]
+COPY ["VideoService/Video.Application/Video.Application.csproj", "VideoService/Video.Application/"]
+COPY ["VideoService/Video.DomainService/Video.DomainService.csproj", "VideoService/Video.DomainService/"]
+COPY ["Common.SharedService/Common.Shared.DomainService/Common.Shared.DomainService.csproj", "Common.SharedService/Common.Shared.DomainService/"]
+
+RUN dotnet restore "VideoService/Video.API/Video.API.csproj"
+
+# 再拷贝全部源码并发布
+COPY . .
+RUN dotnet publish "VideoService/Video.API/Video.API.csproj" \
+ -c Release -o /app \
+ /p:PublishReadyToRun=true \
+ /p:UseAppHost=false
+
+# ===== runtime 阶段 =====
+FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final
+WORKDIR /app
+
+# 健康检查用 curl
+RUN apt-get update && apt-get install -y --no-install-recommends curl \
+ && rm -rf /var/lib/apt/lists/*
+
+# 创建非 root 账户(存在则跳过)
+RUN set -eux; \
+ if ! getent group app >/dev/null; then groupadd -g 64198 app; fi; \
+ if ! id -u appuser >/dev/null 2>&1; then useradd -r -u 64198 -g app appuser; fi
+
+# 拷贝发布产物并赋权
+COPY --from=build /app ./
+RUN chown -R appuser:app /app
+
+# 对外只走 8080,TLS 在 Nginx 统一终止
+ENV ASPNETCORE_URLS=http://+:8080 \
+ ASPNETCORE_ENVIRONMENT=Production
+EXPOSE 8080
+
+# 健康检查:需要你的服务实现 /healthz
+HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
+ CMD curl -fsS http://localhost:8080/healthz || exit 1
+
+# 以非 root 运行
+USER appuser
+
+ENTRYPOINT ["dotnet", "Video.API.dll"]
diff --git a/WeiCloud.Fusion/VideoService/Video.API/Program.cs b/WeiCloud.Fusion/VideoService/Video.API/Program.cs
index f91072e..45bc79b 100644
--- a/WeiCloud.Fusion/VideoService/Video.API/Program.cs
+++ b/WeiCloud.Fusion/VideoService/Video.API/Program.cs
@@ -113,6 +113,20 @@ namespace Video.API
#endregion CAPע
+ // ɲԣս
+ builder.Services.AddCors(options =>
+ {
+ options.AddPolicy("DevCors", policy =>
+ {
+ // Cookie/Ȩ
+ policy
+ .AllowAnyOrigin()
+ .AllowAnyHeader()
+ .AllowAnyMethod()
+ .SetPreflightMaxAge(TimeSpan.FromHours(1));
+ });
+ });
+
// ȫĬС
builder.WebHost.ConfigureKestrel(options =>
{
@@ -139,6 +153,7 @@ namespace Video.API
app.UseHttpsRedirection();
app.UseAuthorization();
+ app.MapGet("/healthz", () => Results.Ok("OK"));
app.MapControllers();
// Startup ʵ
diff --git a/WeiCloud.Fusion/VideoService/Video.API/Video.API.csproj b/WeiCloud.Fusion/VideoService/Video.API/Video.API.csproj
index 77b0250..556bbe6 100644
--- a/WeiCloud.Fusion/VideoService/Video.API/Video.API.csproj
+++ b/WeiCloud.Fusion/VideoService/Video.API/Video.API.csproj
@@ -5,6 +5,9 @@
enable
enable
True
+ 90a4021f-e10a-4236-abb4-4bac4779e5d1
+ Linux
+ ..\..
@@ -12,6 +15,7 @@
+
diff --git a/WeiCloud.Fusion/VideoService/Video.DomainService/Dahvision/DahuaGeneralCtlService.cs b/WeiCloud.Fusion/VideoService/Video.DomainService/Dahvision/DahuaGeneralCtlService.cs
index bebad90..15f957c 100644
--- a/WeiCloud.Fusion/VideoService/Video.DomainService/Dahvision/DahuaGeneralCtlService.cs
+++ b/WeiCloud.Fusion/VideoService/Video.DomainService/Dahvision/DahuaGeneralCtlService.cs
@@ -13,24 +13,25 @@ namespace Video.DomainService
private readonly ILogger _logger;
private readonly IConfiguration _configuration;
private readonly ITokenProviderService _tokenProviderService;
- // private readonly HttpClient _http;
+ private readonly HttpClient _http;
- public DahuaGeneralCtlService(ILogger logger, IConfiguration configuration, ITokenProviderService tokenProviderService)
+ public DahuaGeneralCtlService(ILogger logger, IConfiguration configuration, ITokenProviderService tokenProviderService, HttpClient http)
{
_logger = logger;
_configuration = configuration;
_tokenProviderService = tokenProviderService;
- //_http = http;
+ _http = http;
+ _http = http;
}
- ///
- /// 开发测试的时候,忽略证书
- ///
- private static readonly HttpClient _http = new HttpClient(new HttpClientHandler
- {
- ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
- });
+ /////
+ ///// 开发测试的时候,忽略证书
+ /////
+ //private static readonly HttpClient _http = new HttpClient(new HttpClientHandler
+ //{
+ // ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
+ //});
///
/// hls等录像回放