feat: add Docker infrastructure for 8-node cluster topology (2 central + 3 sites)
Multi-stage Dockerfile with NuGet restore layer caching, per-node appsettings with Docker hostnames, shared bridge network with infra services, and build/deploy/teardown scripts. Ports use 90xx block to avoid conflicts.
This commit is contained in:
46
docker/Dockerfile
Normal file
46
docker/Dockerfile
Normal file
@@ -0,0 +1,46 @@
|
||||
# Stage 1: Restore (cached when .csproj/.slnx files don't change)
|
||||
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS restore
|
||||
WORKDIR /src
|
||||
|
||||
# Copy all .csproj files first (rarely change) for restore layer caching
|
||||
COPY src/ScadaLink.Commons/ScadaLink.Commons.csproj src/ScadaLink.Commons/
|
||||
COPY src/ScadaLink.Host/ScadaLink.Host.csproj src/ScadaLink.Host/
|
||||
COPY src/ScadaLink.TemplateEngine/ScadaLink.TemplateEngine.csproj src/ScadaLink.TemplateEngine/
|
||||
COPY src/ScadaLink.DeploymentManager/ScadaLink.DeploymentManager.csproj src/ScadaLink.DeploymentManager/
|
||||
COPY src/ScadaLink.SiteRuntime/ScadaLink.SiteRuntime.csproj src/ScadaLink.SiteRuntime/
|
||||
COPY src/ScadaLink.DataConnectionLayer/ScadaLink.DataConnectionLayer.csproj src/ScadaLink.DataConnectionLayer/
|
||||
COPY src/ScadaLink.Communication/ScadaLink.Communication.csproj src/ScadaLink.Communication/
|
||||
COPY src/ScadaLink.StoreAndForward/ScadaLink.StoreAndForward.csproj src/ScadaLink.StoreAndForward/
|
||||
COPY src/ScadaLink.ExternalSystemGateway/ScadaLink.ExternalSystemGateway.csproj src/ScadaLink.ExternalSystemGateway/
|
||||
COPY src/ScadaLink.NotificationService/ScadaLink.NotificationService.csproj src/ScadaLink.NotificationService/
|
||||
COPY src/ScadaLink.CentralUI/ScadaLink.CentralUI.csproj src/ScadaLink.CentralUI/
|
||||
COPY src/ScadaLink.Security/ScadaLink.Security.csproj src/ScadaLink.Security/
|
||||
COPY src/ScadaLink.HealthMonitoring/ScadaLink.HealthMonitoring.csproj src/ScadaLink.HealthMonitoring/
|
||||
COPY src/ScadaLink.SiteEventLogging/ScadaLink.SiteEventLogging.csproj src/ScadaLink.SiteEventLogging/
|
||||
COPY src/ScadaLink.ClusterInfrastructure/ScadaLink.ClusterInfrastructure.csproj src/ScadaLink.ClusterInfrastructure/
|
||||
COPY src/ScadaLink.InboundAPI/ScadaLink.InboundAPI.csproj src/ScadaLink.InboundAPI/
|
||||
COPY src/ScadaLink.ConfigurationDatabase/ScadaLink.ConfigurationDatabase.csproj src/ScadaLink.ConfigurationDatabase/
|
||||
COPY src/ScadaLink.ManagementService/ScadaLink.ManagementService.csproj src/ScadaLink.ManagementService/
|
||||
|
||||
# Restore NuGet packages via Host project (follows ProjectReferences to all 17 dependencies)
|
||||
# This layer is cached until any .csproj changes — source-only changes skip restore entirely
|
||||
RUN dotnet restore src/ScadaLink.Host/ScadaLink.Host.csproj
|
||||
|
||||
# Stage 2: Build + Publish
|
||||
FROM restore AS build
|
||||
COPY src/ src/
|
||||
RUN dotnet publish src/ScadaLink.Host/ScadaLink.Host.csproj \
|
||||
-c Release -o /app/publish --no-restore
|
||||
|
||||
# Stage 3: Runtime (minimal image, no SDK)
|
||||
FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime
|
||||
WORKDIR /app
|
||||
|
||||
# Create data directory for SQLite databases (site nodes)
|
||||
RUN mkdir -p /app/data /app/logs
|
||||
|
||||
COPY --from=build /app/publish .
|
||||
|
||||
EXPOSE 5000 8081 8082
|
||||
|
||||
ENTRYPOINT ["dotnet", "ScadaLink.Host.dll"]
|
||||
Reference in New Issue
Block a user