mirror of
https://github.com/dartdavros/chatballs.git
synced 2026-10-06 01:24:59 +03:00
Раньше 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>
19 lines
1.4 KiB
Docker
19 lines
1.4 KiB
Docker
# 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
|