diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..67fdd99 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,23 @@ +services: + echohub-server: + build: + context: ./src + dockerfile: EchoHub.Server/Dockerfile + # image: ghcr.io/huebyte/echohub-server:latest # use this instead of build for pre-built images + container_name: echohub-server + restart: unless-stopped + ports: + - "5000:5000" + # - "6667:6667" # IRC gateway (enable Irc__Enabled=true first) + # - "6697:6697" # IRC TLS + volumes: + - echohub-data:/app/data + environment: + - Server__Name=My EchoHub Server + - Server__Description=A self-hosted EchoHub chat server + # - Server__PublicServer=true + # - Server__PublicHost=echohub.example.com + # - Irc__Enabled=true + +volumes: + echohub-data: diff --git a/docs/changelog/v0.2.7.md b/docs/changelog/v0.2.7.md index 929c70c..687a90f 100644 --- a/docs/changelog/v0.2.7.md +++ b/docs/changelog/v0.2.7.md @@ -4,6 +4,10 @@ - Fix user list empty on initial connect — `FetchAndUpdateOnlineUsers` was called before `InvokeUI` set the current channel, causing an early return +## New Features + +- Add Docker support for EchoHub.Server — `docker compose up -d` for easy self-hosting with persistent volume for database, uploads, and logs + ## Infrastructure - Switch Terminal.Gui from local fork submodule back to NuGet package (`2.0.0-develop.5039`) — transparent color PR merged upstream diff --git a/src/EchoHub.Server/.dockerignore b/src/EchoHub.Server/.dockerignore new file mode 100644 index 0000000..f6cf303 --- /dev/null +++ b/src/EchoHub.Server/.dockerignore @@ -0,0 +1,6 @@ +bin/ +obj/ +.vs/ +*.user +*.suo +*.DotSettings.user diff --git a/src/EchoHub.Server/Dockerfile b/src/EchoHub.Server/Dockerfile new file mode 100644 index 0000000..2a71380 --- /dev/null +++ b/src/EchoHub.Server/Dockerfile @@ -0,0 +1,37 @@ +FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build +WORKDIR /src + +# Copy project files first for layer caching +COPY EchoHub.Core/EchoHub.Core.csproj EchoHub.Core/ +COPY EchoHub.Server.Irc/EchoHub.Server.Irc.csproj EchoHub.Server.Irc/ +COPY EchoHub.Server/EchoHub.Server.csproj EchoHub.Server/ +COPY Directory.Build.props . +RUN dotnet restore EchoHub.Server/EchoHub.Server.csproj + +# Copy everything and publish +COPY EchoHub.Core/ EchoHub.Core/ +COPY EchoHub.Server.Irc/ EchoHub.Server.Irc/ +COPY EchoHub.Server/ EchoHub.Server/ +RUN dotnet publish EchoHub.Server/EchoHub.Server.csproj -c Release -o /app/publish --no-restore + +# Runtime +FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime +WORKDIR /app + +RUN groupadd -r echohub && useradd -r -g echohub -d /app echohub \ + && mkdir -p /app/data \ + && chown -R echohub:echohub /app + +COPY --from=build --chown=echohub:echohub /app/publish . + +USER echohub + +ENV ASPNETCORE_ENVIRONMENT=Production \ + Urls=http://0.0.0.0:5000 \ + ConnectionStrings__DefaultConnection="Data Source=/app/data/echohub.db" \ + Storage__Path=/app/data/uploads \ + Serilog__WriteTo__1__Args__path=/app/data/logs/echohub-server-.log + +EXPOSE 5000 6667 6697 + +ENTRYPOINT ["dotnet", "EchoHub.Server.dll"]