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>
40 lines
1.7 KiB
Bash
40 lines
1.7 KiB
Bash
#!/usr/bin/env sh
|
|
# Локальный запуск Chatballs из исходников (Linux/macOS).
|
|
#
|
|
# Это путь разработчика: стек собирается из репозитория. Установка продукта
|
|
# выглядит иначе и этого скрипта не требует — там один compose.yaml со
|
|
# страницы релиза и `docker compose up -d --wait` (см. README).
|
|
#
|
|
# Ни одной переменной задавать не нужно и негде: .env у продукта нет. Секреты
|
|
# инстанса генерирует первый старт (сервис secrets), всё остальное —
|
|
# организацию, владельца, домены, почту, интеграции — человек настраивает в UI.
|
|
#
|
|
# Режим поставки: --mode cloud (по умолчанию) или --mode self-hosted.
|
|
set -eu
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
mode="CLOUD"
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
--mode)
|
|
shift
|
|
case "${1:-}" in
|
|
cloud|CLOUD) mode="CLOUD" ;;
|
|
self-hosted|SELF_HOSTED|selfhosted) mode="SELF_HOSTED" ;;
|
|
*) echo "Неизвестный режим: ${1:-}. Допустимо: cloud, self-hosted" >&2; exit 2 ;;
|
|
esac
|
|
shift
|
|
;;
|
|
-h|--help)
|
|
echo "Использование: $0 [--mode cloud|self-hosted]" >&2
|
|
exit 0
|
|
;;
|
|
*) echo "Неизвестный аргумент: $1" >&2; exit 2 ;;
|
|
esac
|
|
done
|
|
|
|
echo "Сборка из исходников, режим поставки: $mode."
|
|
CHATBALLS_DELIVERY_MODE="$mode" \
|
|
exec docker compose -f compose.yaml -f compose.dev.yaml up --build
|