Markdown blog on Flask with Vite-built assets and WeasyPrint PDF export, rewritten from the Wagtail build that preceded it.
blogdockerflaskmarkdownpythonself-hostedvite
1FROM python:3.13-alpine
2
3COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
4COPY --from=oven/bun:alpine /usr/local/bin/bun /usr/local/bin/bun
5
6RUN apk add --update --no-cache \
7 libstdc++ libgcc \
8 pango fontconfig font-noto font-jetbrains-mono
9
10WORKDIR /app
11
12COPY pyproject.toml uv.lock package.json bun.lock ./
13RUN bun install --frozen-lockfile && uv sync --frozen --no-dev
14
15COPY . .
16
17ENV PATH="/app/.venv/bin:/app/node_modules/.bin:$PATH"
18
19RUN bun run build
20
21RUN addgroup -S -g 1000 app && \
22 adduser -S -h /app -s /sbin/nologin -u 1000 -G app app && \
23 chown -R app:app /app
24USER app