A living almanac of seasons, soil, and the quiet knowledge that used to be common. Rust axum with minijinja and Vite.
agriculturealmanacaxumfolk-knowledgegardeningminijinjarustseasonalvite
1# syntax=docker/dockerfile:1
2# ----- builder -----
3FROM rust:alpine AS builder
4
5RUN apk add --no-cache musl-dev
6
7COPY --from=oven/bun:alpine /usr/local/bin/bun /usr/local/bin/bun
8
9WORKDIR /app
10
11COPY Cargo.toml Cargo.lock ./
12COPY src ./src
13COPY frontend ./frontend
14
15RUN cd frontend && bun install --frozen-lockfile && bun run build
16RUN --mount=type=cache,target=/usr/local/cargo/registry \
17 --mount=type=cache,target=/app/target \
18 cargo build --release && \
19 cp target/release/darkfurrow /app/darkfurrow
20
21# ----- runtime -----
22FROM alpine:3.23
23
24WORKDIR /app
25
26COPY --from=builder /app/darkfurrow ./darkfurrow
27COPY --from=builder /app/dist ./dist
28COPY templates ./templates
29COPY content ./content
30
31RUN addgroup -S -g 1000 app && \
32 adduser -S -h /app -s /sbin/nologin -u 1000 -G app app && \
33 chown -R app:app /app
34USER app
35
36ENV PORT=8000
37EXPOSE 8000
38
39CMD ["./darkfurrow"]