Skip to content

Commit 863d53f

Browse files
wolfieschclaude
andcommitted
feat(docker): add multi-stage Dockerfile for github daemon
- Stage 1: Rust builder (uses rustls-tls, no OpenSSL) - Stage 2: Minimal runtime with CA certs only (~50MB) - Non-root user for security - Token passed via GITHUB_TOKEN env var Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent b474d66 commit 863d53f

1 file changed

Lines changed: 59 additions & 0 deletions

File tree

Dockerfile

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# FGP GitHub Daemon Docker Image
2+
#
3+
# Provides fast GitHub operations via GraphQL and REST API.
4+
# Uses multi-stage build for minimal image size.
5+
6+
# Stage 1: Build the Rust binary
7+
FROM rust:1.75-slim-bookworm AS builder
8+
9+
WORKDIR /app
10+
11+
# Install build dependencies
12+
RUN apt-get update && apt-get install -y \
13+
pkg-config \
14+
libssl-dev \
15+
&& rm -rf /var/lib/apt/lists/*
16+
17+
# Copy manifests first for better layer caching
18+
COPY Cargo.toml Cargo.lock ./
19+
20+
# Create dummy src to build dependencies
21+
RUN mkdir src && echo "fn main() {}" > src/main.rs
22+
RUN cargo build --release && rm -rf src target/release/fgp-github
23+
24+
# Copy actual source and build
25+
COPY src ./src
26+
RUN touch src/main.rs && cargo build --release
27+
28+
# Stage 2: Minimal runtime image
29+
FROM debian:bookworm-slim
30+
31+
# Install only CA certificates for HTTPS
32+
RUN apt-get update && apt-get install -y \
33+
ca-certificates \
34+
&& rm -rf /var/lib/apt/lists/*
35+
36+
# Create non-root user for security
37+
RUN useradd -m -s /bin/bash fgp
38+
39+
# Copy binary from builder
40+
COPY --from=builder /app/target/release/fgp-github /usr/local/bin/
41+
42+
# Set up FGP directory structure
43+
RUN mkdir -p /home/fgp/.fgp/services/github/logs \
44+
&& chown -R fgp:fgp /home/fgp/.fgp
45+
46+
USER fgp
47+
WORKDIR /home/fgp
48+
49+
ENV FGP_SOCKET_DIR=/home/fgp/.fgp/services
50+
51+
# Health check
52+
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \
53+
CMD fgp-github health || exit 1
54+
55+
# Mount point for socket (token passed via env var GITHUB_TOKEN)
56+
VOLUME ["/home/fgp/.fgp/services"]
57+
58+
ENTRYPOINT ["fgp-github"]
59+
CMD ["start", "--foreground"]

0 commit comments

Comments
 (0)