# Multi-stage Docker build for EonaCat.Sync # Build stage FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /src # Copy project files COPY ["EonaCat.Sync/EonaCat.Sync.csproj", "EonaCat.Sync/"] # Restore packages RUN dotnet restore "EonaCat.Sync/EonaCat.Sync.csproj" # Copy source code COPY . . # Build application RUN dotnet build "EonaCat.Sync/EonaCat.Sync.csproj" -c Release -o /app/build # Publish stage FROM build AS publish RUN dotnet publish "EonaCat.Sync/EonaCat.Sync.csproj" -c Release -o /app/publish # Runtime stage FROM mcr.microsoft.com/dotnet/runtime:6.0 WORKDIR /app # Install additional tools if needed RUN apt-get update && \ apt-get install -y --no-install-recommends \ curl \ && rm -rf /var/lib/apt/lists/* # Copy published application COPY --from=publish /app/publish . # Create non-root user for security RUN useradd -m -u 1000 syncuser && \ chown -R syncuser:syncuser /app USER syncuser # Environment variables ENV DOTNET_URLS=http://+:80 \ ASPNETCORE_ENVIRONMENT=Production \ SYNC_DATA_PATH=/data/sync \ SYNC_BACKUP_PATH=/data/backups \ SYNC_LOG_PATH=/data/logs # Health check HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ CMD curl -f http://localhost:80/health || exit 1 # Expose ports EXPOSE 80 # Entry point ENTRYPOINT ["dotnet", "EonaCat.Sync.dll"]