FossilRepo

fossilrepo / docker / Dockerfile.fossil
Source Blame History 81 lines
4ce269c… ragelink 1 # fossilrepo omnibus — Fossil + Caddy + Litestream
4ce269c… ragelink 2 #
4ce269c… ragelink 3 # Builds Fossil from source for version locking. Serves Fossil repos
4ce269c… ragelink 4 # with automatic SSL via Caddy and continuous S3 replication via Litestream.
4ce269c… ragelink 5 # Everything is compiled/pinned — no distro package dependencies at runtime.
4ce269c… ragelink 6
4ce269c… ragelink 7 # ── Stage 1: Build Fossil from source ──────────────────────────────────────
4ce269c… ragelink 8
4ce269c… ragelink 9 FROM debian:bookworm-slim AS fossil-builder
4ce269c… ragelink 10
4ce269c… ragelink 11 ARG FOSSIL_VERSION=2.24
4ce269c… ragelink 12
4ce269c… ragelink 13 RUN apt-get update && apt-get install -y --no-install-recommends \
4ce269c… ragelink 14 build-essential \
4ce269c… ragelink 15 curl \
4ce269c… ragelink 16 ca-certificates \
4ce269c… ragelink 17 zlib1g-dev \
4ce269c… ragelink 18 libssl-dev \
4ce269c… ragelink 19 tcl \
4ce269c… ragelink 20 && rm -rf /var/lib/apt/lists/*
4ce269c… ragelink 21
4ce269c… ragelink 22 WORKDIR /build
4ce269c… ragelink 23
4ce269c… ragelink 24 RUN curl -sSL "https://fossil-scm.org/home/tarball/version-${FOSSIL_VERSION}/fossil-src-${FOSSIL_VERSION}.tar.gz" \
4ce269c… ragelink 25 -o fossil.tar.gz \
4ce269c… ragelink 26 && tar xzf fossil.tar.gz \
4ce269c… ragelink 27 && cd fossil-src-${FOSSIL_VERSION} \
4ce269c… ragelink 28 && ./configure --prefix=/usr/local --with-openssl=auto --json \
4ce269c… ragelink 29 && make -j$(nproc) \
4ce269c… ragelink 30 && make install \
4ce269c… ragelink 31 && fossil version
4ce269c… ragelink 32
4ce269c… ragelink 33 # ── Stage 2: Runtime image ─────────────────────────────────────────────────
4ce269c… ragelink 34
4ce269c… ragelink 35 FROM python:3.12-slim AS base
4ce269c… ragelink 36
4ce269c… ragelink 37 # Version pins — change these to upgrade
4ce269c… ragelink 38 ARG LITESTREAM_VERSION=0.3.13
4ce269c… ragelink 39 ARG CADDY_VERSION=2.9
4ce269c… ragelink 40
4ce269c… ragelink 41 # Runtime deps only (no build tools)
4ce269c… ragelink 42 RUN apt-get update && apt-get install -y --no-install-recommends \
4ce269c… ragelink 43 zlib1g \
4ce269c… ragelink 44 libssl3 \
4ce269c… ragelink 45 curl \
4ce269c… ragelink 46 ca-certificates \
4ce269c… ragelink 47 && rm -rf /var/lib/apt/lists/*
4ce269c… ragelink 48
4ce269c… ragelink 49 # Copy Fossil binary from builder
4ce269c… ragelink 50 COPY --from=fossil-builder /usr/local/bin/fossil /usr/local/bin/fossil
4ce269c… ragelink 51
4ce269c… ragelink 52 # Install Caddy (pinned)
4ce269c… ragelink 53 RUN curl -sSL "https://caddyserver.com/api/download?os=linux&arch=amd64&version=v${CADDY_VERSION}" \
4ce269c… ragelink 54 -o /usr/local/bin/caddy \
4ce269c… ragelink 55 && chmod +x /usr/local/bin/caddy
4ce269c… ragelink 56
4ce269c… ragelink 57 # Install Litestream (pinned)
4ce269c… ragelink 58 RUN curl -sSL "https://github.com/benbjohnson/litestream/releases/download/v${LITESTREAM_VERSION}/litestream-v${LITESTREAM_VERSION}-linux-amd64.tar.gz" \
4ce269c… ragelink 59 | tar -xz -C /usr/local/bin/
4ce269c… ragelink 60
4ce269c… ragelink 61 # Verify all binaries
4ce269c… ragelink 62 RUN fossil version && caddy version && litestream version
4ce269c… ragelink 63
4ce269c… ragelink 64 # Create data directories
4ce269c… ragelink 65 RUN mkdir -p /data/repos /data/trash /etc/caddy
4ce269c… ragelink 66
4ce269c… ragelink 67 # Copy configuration files
4ce269c… ragelink 68 COPY Caddyfile /etc/caddy/Caddyfile
4ce269c… ragelink 69 COPY litestream.yml /etc/litestream.yml
4ce269c… ragelink 70
4ce269c… ragelink 71 # Copy and install the fossilrepo package
4ce269c… ragelink 72 COPY .. /app
4ce269c… ragelink 73 WORKDIR /app
4ce269c… ragelink 74 RUN pip install --no-cache-dir .
4ce269c… ragelink 75
4ce269c… ragelink 76 # Expose ports: Caddy HTTPS (443), Caddy HTTP (80), Fossil direct (8080)
4ce269c… ragelink 77 EXPOSE 80 443 8080
4ce269c… ragelink 78
4ce269c… ragelink 79 # Litestream wraps the fossil server process, replicating all .fossil
4ce269c… ragelink 80 # files to S3 continuously while the server runs.
4ce269c… ragelink 81 CMD ["litestream", "replicate", "-exec", "caddy run --config /etc/caddy/Caddyfile"]

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button