diff --git a/.github/workflows/publish-backend.yml b/.github/workflows/publish-backend.yml new file mode 100644 index 0000000..cd24c29 --- /dev/null +++ b/.github/workflows/publish-backend.yml @@ -0,0 +1,50 @@ +name: Publish Backend Container + +on: + push: + branches: [ "main" ] + paths: + - 'backend/**' + - '.github/workflows/publish-backend.yml' + workflow_dispatch: + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-and-push: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=raw,value=latest,enable={{is_default_branch}} + type=sha,format=short + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: ./backend + file: ./backend/Dockerfile_build_and_publish + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + diff --git a/backend/Dockerfile_build_and_publish b/backend/Dockerfile_build_and_publish new file mode 100644 index 0000000..5c6ddae --- /dev/null +++ b/backend/Dockerfile_build_and_publish @@ -0,0 +1,50 @@ +# Builder stage +FROM rust:1.91-slim AS builder + +# Install build dependencies +RUN apt-get update && apt-get install -y \ + git \ + curl \ + gcc \ + g++ \ + cmake \ + pkg-config \ + libssl-dev \ + libclang-dev \ + libzstd-dev \ + libhugetlbfs-dev \ + && rm -rf /var/lib/apt/lists/* + +# Set working directory +WORKDIR /usr/src/app + +# Copy all source files +COPY . . + +# Build the binary +RUN cargo build --release --bin backend + +# Runtime stage +FROM debian:bookworm-slim AS runtime + +# Install runtime dependencies +RUN apt-get update && apt-get install -y \ + libssl3 \ + libzstd1 \ + libhugetlbfs0 \ + ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +# Set working directory +WORKDIR /usr/src/app + +# Copy the compiled binary from the builder stage +COPY --from=builder /usr/src/app/target/release/backend /usr/local/bin/backend + +# Expose WebSocket port +EXPOSE 8443 + +# Set entrypoint +ENTRYPOINT ["backend"] +CMD ["--server-addr", "0.0.0.0:8443"] +