FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base USER root # Install FreeRADIUS, PostgreSQL module, and utility packages RUN apt-get update && apt-get install -y --no-install-recommends \ freeradius \ freeradius-postgresql \ freeradius-utils \ ca-certificates \ && rm -rf /var/lib/apt/lists/* # Create symlink so both /etc/raddb and /etc/freeradius/3.0 work RUN ln -sf /etc/freeradius/3.0 /etc/raddb WORKDIR /app EXPOSE 8080 EXPOSE 1812/udp EXPOSE 1813/udp FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build ARG BUILD_CONFIGURATION=Release WORKDIR /src COPY ["radiuscontroller/radiuscontroller.csproj", "radiuscontroller/"] RUN dotnet restore "radiuscontroller/radiuscontroller.csproj" COPY . . WORKDIR "/src/radiuscontroller" RUN dotnet build "./radiuscontroller.csproj" -c $BUILD_CONFIGURATION -o /app/build FROM build AS publish ARG BUILD_CONFIGURATION=Release RUN dotnet publish "./radiuscontroller.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false FROM base AS final WORKDIR /app # Copy pre-configured FreeRADIUS PostgreSQL rules & EAP authentication config COPY raddb/clients.conf /etc/freeradius/3.0/clients.conf COPY raddb/mods-enabled/sql /etc/freeradius/3.0/mods-enabled/sql COPY raddb/sites-enabled/default /etc/freeradius/3.0/sites-enabled/default COPY raddb/sites-enabled/inner-tunnel /etc/freeradius/3.0/sites-enabled/inner-tunnel # Copy published application and entrypoint script COPY --from=publish /app/publish . COPY radiuscontroller/entrypoint.sh /app/entrypoint.sh RUN chmod +x /app/entrypoint.sh ENTRYPOINT ["/app/entrypoint.sh"]