Static sites with Python, uv, Caddy, and Docker
Стек для Python-статики: uv + Caddy + Docker
Я почти полностью перешёл на uv — он быстрый, удобен и сам ставит нужный Python. Статические сайты собираю Python-скриптами, а раздаю через Caddy в многоступенчевом Docker-контейнере.
Пример на sus
Dockerfile (сжато):
FROM ghcr.io/astral-sh/uv:debian AS build
WORKDIR /src
COPY . .
RUN uv python install 3.13
RUN uv run --no-dev sus
FROM caddy:alpine
COPY Caddyfile /etc/caddy/Caddyfile
COPY --from=build /src/output /srv/
- Берём образ с uv, копируем код.
- uv ставит Python 3.13 и зависимости, запускает
sus
, который кладёт сайт в/output
. - Вторая стадия — лёгкий Caddy. Копируем конфиг и готовые статические файлы в
/srv
.
Caddyfile минимален:
:80
root * /srv
file_server
Запуск:
docker build -t sus .
docker run -p 80:80 sus
Итог: быстрая сборка, маленький образ, автоматический HTTPS при нужном домене.