Skip to content

Commit b653e79

Browse files
wolfieschclaude
andcommitted
feat(docker): add multi-stage Dockerfile for browser daemon
- Stage 1: Rust builder with slim bookworm - Stage 2: Runtime with Chromium installed - Non-root user for security - Health check via daemon health command - Volume for socket sharing Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 8e82b88 commit b653e79

1 file changed

Lines changed: 69 additions & 0 deletions

File tree

Dockerfile

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# FGP Browser Daemon Docker Image
2+
#
3+
# Provides fast browser automation via Chrome DevTools Protocol.
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/browser-gateway
23+
24+
# Copy actual source and build
25+
COPY src ./src
26+
RUN touch src/main.rs && cargo build --release
27+
28+
# Stage 2: Runtime image with Chrome
29+
FROM debian:bookworm-slim
30+
31+
# Install Chrome and runtime dependencies
32+
RUN apt-get update && apt-get install -y \
33+
chromium \
34+
chromium-sandbox \
35+
ca-certificates \
36+
fonts-liberation \
37+
libnss3 \
38+
libxss1 \
39+
libasound2 \
40+
libatk-bridge2.0-0 \
41+
libgtk-3-0 \
42+
&& rm -rf /var/lib/apt/lists/*
43+
44+
# Create non-root user for security
45+
RUN useradd -m -s /bin/bash fgp
46+
47+
# Copy binary from builder
48+
COPY --from=builder /app/target/release/browser-gateway /usr/local/bin/
49+
50+
# Set up FGP directory structure
51+
RUN mkdir -p /home/fgp/.fgp/services/browser/logs \
52+
&& chown -R fgp:fgp /home/fgp/.fgp
53+
54+
USER fgp
55+
WORKDIR /home/fgp
56+
57+
# Set Chrome path for the daemon
58+
ENV CHROME_PATH=/usr/bin/chromium
59+
ENV FGP_SOCKET_DIR=/home/fgp/.fgp/services
60+
61+
# Health check
62+
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \
63+
CMD browser-gateway health || exit 1
64+
65+
# Expose the socket via volume mount (UNIX sockets can't be exposed as ports)
66+
VOLUME ["/home/fgp/.fgp/services"]
67+
68+
ENTRYPOINT ["browser-gateway"]
69+
CMD ["start", "--foreground"]

0 commit comments

Comments
 (0)