FossilRepo

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

Keyboard Shortcuts

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