|
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"] |