Files
chatballs/deploy/docker/postgres.Dockerfile
T
AndreyandClaude Opus 5 8fe66385d6 ✨ feat(release): установка на чистый хост одной командой
Раньше compose монтировал с хоста Caddyfile, init-скрипты базы и генератор
секретов. Из-за этого установка требовала рядом распакованный репозиторий, а
файл, забытый при сборке релиза, Docker молча подменял пустым каталогом — и
стек падал на первом старте у человека. Плюс production-образ backend вообще
не собирался: COPY content ссылался на каталог, которого в репозитории нет,
так что релиза не существовало ни на GitHub, ни на GitLab.

Теперь весь дистрибутив — один compose.yaml со страницы релиза:

  curl -fsSL .../compose.yaml -o compose.yaml
  docker compose up -d --wait

- Caddyfile переехал в свой образ шлюза (caddy validate — в сборке),
  init-скрипты базы — в свой образ postgres, генератор секретов — в
  backend-образ. Bind-mount'ов в production-манифесте не осталось.
- Состояние установки — именованные тома вместо каталогов рабочего каталога.
  Заодно чинит загрузку файлов на Linux: том наследует владельца из образа
  (hub), тогда как bind-mount доставался контейнеру как root:root.
- scripts/pin-release-compose.py закрепляет ссылки на образы по digest и
  падает, если хоть один ключ остался подстановкой.
- GitHub-workflow собирает четыре образа и прикладывает к релизу compose.yaml
  (основной путь) и release.env (для `chatballs deploy`).
- tests/cli/test_release_compose.py держит свойство: манифест без bind-mount'ов
  и полностью закрепляем по digest.
- Из окружения шлюза убраны CHATBALLS_APP_DOMAIN и CHATBALLS_ACME_EMAIL —
  Caddyfile их не читает.

Dev-контур не меняется по смыслу: compose.dev.yaml по-прежнему собирает всё
из исходников и держит состояние в ./data.

AUDIT-TODO.md — временный список остального из аудита; удаляется целиком,
когда закрыт последний пункт.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-09 04:55:17 +03:00

19 lines
1.4 KiB
Docker
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PostgreSQL Chatballs: тот же pgvector, но со своими init-скриптами внутри.
#
# Раньше compose монтировал эти файлы с хоста. Из-за этого установка требовала
# рядом распакованный репозиторий, а забытый в релизе файл превращался в
# молча созданный Docker'ом пустой каталог — и стек падал на первом старте.
# Теперь всё, что нужно базе, лежит в образе.
ARG CHATBALLS_POSTGRES_BASE_IMAGE=pgvector/pgvector:pg16
FROM ${CHATBALLS_POSTGRES_BASE_IMAGE}
# Роли app/platform/migration и расширение vector — при инициализации кластера.
COPY deploy/postgres/init-runtime-roles.sh /docker-entrypoint-initdb.d/20-chatballs-runtime-roles.sh
# Нормализация владельца public-схемы: вызывается вручную из `chatballs deploy`.
COPY deploy/postgres/reassign-schema-ownership.sql /chatballs-reassign-ownership.sql
# Бит исполнения не переживает checkout на Windows, а без него entrypoint
# источает скрипт вместо запуска — и `exit 1` внутри убивает инициализацию.
RUN chmod 0755 /docker-entrypoint-initdb.d/20-chatballs-runtime-roles.sh \
&& chmod 0644 /chatballs-reassign-ownership.sql