mirror of
https://github.com/dartdavros/chatballs.git
synced 2026-10-05 01:14:58 +03:00
Переход на запуск без .env (41a4b0d) не был доведён: в дереве остались файл
`env.example`, чтение instance .env во всём deploy/cli и CI, который этот .env
сам же и создавал из `env.example`. Из-за остатков ломались две вещи.
`chatballs deploy` не работал на установке без .env: _normalize_schema_ownership
брал POSTGRES_USER и POSTGRES_DB из файла и падал с «POSTGRES_USER not set»,
хотя установка исправна. Теперь берёт те же значения по умолчанию, что compose.
`chatballs doctor` выдавал пять ложных ошибок подряд: искал в .env домены,
ACME-почту, POSTGRES_PASSWORD и CHATBALLS_SECRET_KEY. Первое задаёт владелец
в «Настройках», второе генерирует в том с секретами первый старт стека —
снаружи, с хоста, этого не видно, и проверки убраны.
Убрано: env.example (из репозитория, release bundle и README); instance_env_file()
и все его чтения в common/compose/deploy/doctor/status; --env-file instance .env
из вызова compose — остаётся только release.env с digest-пинами образов от CI;
создание .env в gateway:validate. Профиль calls и его адреса читаются из
переменных окружения — оттуда же, откуда их берёт сам compose.
Тесты CLI переведены с фиктивного .env на переменные окружения; три проверки
удалённого поведения doctor убраны. Девять оставшихся проходят вообще без .env
— это и есть проверка, что установка теперь обслуживается. Заодно у
test_custocrm_cli.py выправлены окончания строк: в файле были одиночные CR
внутри кода, отчего diff по нему больше содержательной правки.
Проверено: pytest tests/cli — 9 passed; docker compose config валиден с пустым
каталогом инстанса; bash -n чист по всем скриптам CLI.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
41 lines
1.6 KiB
Docker
41 lines
1.6 KiB
Docker
FROM python:3.12-slim
|
||
|
||
ENV PYTHONDONTWRITEBYTECODE=1 \
|
||
PYTHONUNBUFFERED=1 \
|
||
PIP_NO_CACHE_DIR=1
|
||
|
||
WORKDIR /app
|
||
|
||
RUN addgroup --system hub && adduser --system --ingroup hub hub
|
||
|
||
COPY apps/backend/requirements.txt /app/apps/backend/requirements.txt
|
||
RUN pip install --no-cache-dir -r /app/apps/backend/requirements.txt
|
||
|
||
COPY apps/backend /app/apps/backend
|
||
COPY content /app/content
|
||
|
||
# collectstatic в образе (ADR-HUB-0028): STATIC_ROOT испечён, runtime-шаг не нужен.
|
||
# Build-time secret нужен только чтобы settings загрузились в production-режиме;
|
||
# collectstatic не обращается к БД/Redis/S3. whitenoise раздаёт static в runtime.
|
||
# Build-time dummy values satisfy C04 runtime guards (distinct DB users in
|
||
# settings_database, S3 bucket in settings_storage) that only matter at runtime;
|
||
# collectstatic touches neither. В runtime секреты приходят из тома
|
||
# (deploy/secrets), остальное человек задаёт в интерфейсе.
|
||
RUN cd apps/backend && CHATBALLS_SECRET_KEY=collectstatic-build CHATBALLS_DEBUG=false CHATBALLS_ENV=production \
|
||
CHATBALLS_DELIVERY_MODE=CLOUD \
|
||
CHATBALLS_APP_ALLOWED_HOSTS=collectstatic.invalid \
|
||
CHATBALLS_HELP_PUBLIC_IPV4=127.0.0.1 \
|
||
POSTGRES_APP_USER=build-app \
|
||
POSTGRES_PLATFORM_USER=build-platform \
|
||
POSTGRES_MIGRATION_USER=build-migration \
|
||
python manage.py collectstatic --noinput
|
||
|
||
RUN chown -R hub:hub /app
|
||
|
||
WORKDIR /app/apps/backend
|
||
|
||
USER hub
|
||
EXPOSE 8000
|
||
|
||
CMD ["gunicorn", "chatballs_backend.wsgi_app:application", "--bind", "0.0.0.0:8000", "--workers", "3", "--timeout", "60"]
|