| |
| FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build |
| ARG BUILD_CONFIGURATION=Release |
| WORKDIR /src |
|
|
| |
| COPY ["RoslynStone.sln", "./"] |
| COPY ["src/RoslynStone.Api/RoslynStone.Api.csproj", "src/RoslynStone.Api/"] |
| COPY ["src/RoslynStone.Core/RoslynStone.Core.csproj", "src/RoslynStone.Core/"] |
| COPY ["src/RoslynStone.Infrastructure/RoslynStone.Infrastructure.csproj", "src/RoslynStone.Infrastructure/"] |
| COPY ["src/RoslynStone.ServiceDefaults/RoslynStone.ServiceDefaults.csproj", "src/RoslynStone.ServiceDefaults/"] |
| COPY ["src/RoslynStone.GradioModule/RoslynStone.GradioModule.csproj", "src/RoslynStone.GradioModule/"] |
|
|
| |
| RUN dotnet restore "src/RoslynStone.Api/RoslynStone.Api.csproj" |
|
|
| |
| COPY . . |
|
|
| |
| WORKDIR "/src/src/RoslynStone.Api" |
| |
| RUN dotnet build "RoslynStone.Api.csproj" \ |
| -c $BUILD_CONFIGURATION \ |
| --no-restore |
|
|
| |
| FROM build AS publish |
| ARG BUILD_CONFIGURATION=Release |
|
|
| |
| RUN dotnet tool install --global CSnakes.Stage |
| ENV PATH="/root/.dotnet/tools:${PATH}" |
|
|
| |
| |
| RUN setup-python --python 3.12 --venv /app/.venv --verbose |
|
|
| |
| RUN curl -LsSf https://astral.sh/uv/install.sh | sh |
| ENV PATH="/root/.local/bin:${PATH}" |
|
|
| |
| |
| |
| |
| WORKDIR "/src/src/RoslynStone.GradioModule" |
| RUN uv pip install \ |
| "gradio>=6.0.0" \ |
| "httpx>=0.27.0" \ |
| "pygments>=2.17.0" \ |
| "openai>=1.0.0" \ |
| "anthropic>=0.25.0" \ |
| "google-generativeai>=0.3.0" \ |
| "huggingface_hub>=0.20.0" \ |
| --python /app/.venv/bin/python \ |
| --prerelease=allow |
|
|
| |
| RUN /app/.venv/bin/python3 -c "import gradio; print(f'Gradio {gradio.__version__} installed successfully')" |
|
|
| |
| |
| |
| WORKDIR "/src/src/RoslynStone.Api" |
| RUN dotnet publish "RoslynStone.Api.csproj" \ |
| -c $BUILD_CONFIGURATION \ |
| -o /app/publish \ |
| --no-restore \ |
| --no-build \ |
| /p:UseAppHost=false \ |
| /p:PublishReadyToRun=true \ |
| /p:PublishSingleFile=false \ |
| /p:PublishTrimmed=false |
|
|
| |
| FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS final |
| WORKDIR /app |
|
|
| |
| RUN groupadd -r appuser && useradd -r -g appuser -m -d /home/appuser appuser |
|
|
| |
| COPY --from=publish /app/publish . |
| COPY src/RoslynStone.Api/entrypoint.sh . |
| RUN chmod +x entrypoint.sh |
|
|
| |
| COPY --from=publish /root/.config/CSnakes /home/appuser/.config/CSnakes |
|
|
| |
| |
| |
| |
| RUN mkdir -p /root/.config \ |
| && ln -s /home/appuser/.config/CSnakes /root/.config/CSnakes || true |
|
|
| |
| COPY --from=publish /app/.venv .venv |
|
|
| |
| RUN test -f /app/.venv/bin/python3 && test -f /app/.venv/bin/pip || \ |
| (echo "ERROR: Virtual environment not copied correctly!" && exit 1) |
|
|
| |
| RUN ln -s /app/.venv /app/venv |
| |
| RUN chown -R appuser:appuser /app /home/appuser/.config |
|
|
| |
| |
| |
| |
| |
| ENV DOTNET_ENVIRONMENT=Production \ |
| MCP_TRANSPORT=stdio \ |
| ASPNETCORE_URLS= \ |
| DOTNET_EnableDiagnostics=0 \ |
| DOTNET_RUNNING_IN_CONTAINER=true \ |
| LD_LIBRARY_PATH=/home/appuser/.config/CSnakes/python3.12.9/python/install/lib \ |
| PYTHONHOME=/home/appuser/.config/CSnakes/python3.12.9/python/install |
|
|
| |
| USER appuser |
|
|
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
|
|
| ENTRYPOINT ["./entrypoint.sh"] |
|
|
|
|