From db68a15cc404c336457f5e2cfb4f3722d3362212 Mon Sep 17 00:00:00 2001 From: bot-backend Date: Sat, 15 Aug 2026 22:38:53 +0300 Subject: [PATCH] =?UTF-8?q?chore(ops):=20=D0=BF=D0=BE=D1=87=D1=82=D0=B0=20?= =?UTF-8?q?GlitchTip=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=B0=D0=B8=D0=B2?= =?UTF-8?q?=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D0=B8=D0=B7=20=D0=BE=D0=BA?= =?UTF-8?q?=D1=80=D1=83=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B8=20=D0=BD?= =?UTF-8?q?=D0=B0=20worker'=D0=B5=20=D1=82=D0=BE=D0=B6=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit EMAIL_URL был захардкожен как consolemail:// — письма печатались в stdout и никуда не уходили. Теперь адрес приходит из файла окружения на сервере (GLITCHTIP_EMAIL_URL), пароль почтового ящика в репозиторий не попадает. Главное здесь не web, а worker: письма и веб-хуки шлёт celery, а у glitchtip-worker почтовых переменных не было вовсе. Настройка одного web-сервиса не дала бы ни одного отправленного письма. Схема DSN зафиксирована комментарием: для 465 нужен smtp+ssl://, а не smtps:// — вторая помечена deprecated и включает STARTTLS, с которым Beget рвёт соединение на 465. --- docker-compose.prod.yml | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index f12276f2..17d1a79c 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -341,9 +341,19 @@ services: REDIS_URL: redis://redis:6379/2 SECRET_KEY: ${GLITCHTIP_SECRET} PORT: "8080" - EMAIL_URL: consolemail:// + # Почта отключена по умолчанию: consolemail:// печатает письмо в stdout и + # никуда его не отправляет. Реальный адрес приходит из /opt/gendesign/.env + # (GLITCHTIP_EMAIL_URL) — в репозитории пароля почтового ящика быть не должно. + # + # ВАЖНО про схему DSN (django-environ, парсер GlitchTip): для порта 465 с + # implicit SSL нужна схема smtp+ssl://, а НЕ smtps:// — вторая помечена + # deprecated и включает STARTTLS (EMAIL_USE_TLS), то есть 465 с ней рвёт + # соединение. Для 587/STARTTLS схема — smtp+tls://. + # smtp+ssl://alerts%40meraocenka.ru:ПАРОЛЬ@smtp.beget.com:465 + # Логин — почтовый адрес целиком, @ в нём кодируется как %40. + EMAIL_URL: ${GLITCHTIP_EMAIL_URL:-consolemail://} GLITCHTIP_DOMAIN: https://errors.gendsgn.ru - DEFAULT_FROM_EMAIL: errors@gendsgn.ru + DEFAULT_FROM_EMAIL: ${GLITCHTIP_FROM_EMAIL:-errors@gendsgn.ru} ENABLE_USER_REGISTRATION: "true" ENABLE_ORGANIZATION_CREATION: "false" restart: always @@ -375,6 +385,15 @@ services: REDIS_URL: redis://redis:6379/2 SECRET_KEY: ${GLITCHTIP_SECRET} CELERY_WORKER_AUTOSCALE: "1,3" + # Письма и веб-хуки шлёт celery, то есть ИМЕННО этот контейнер, а не web. + # До этой правки почтовых переменных здесь не было вовсе: настройка одного + # glitchtip-web не дала бы ни одного отправленного письма — worker брал + # умолчания образа. Значения обязаны совпадать с web (см. комментарий там). + EMAIL_URL: ${GLITCHTIP_EMAIL_URL:-consolemail://} + DEFAULT_FROM_EMAIL: ${GLITCHTIP_FROM_EMAIL:-errors@gendsgn.ru} + # Нужен для абсолютных ссылок внутри писем и веб-хуков: без него + # уведомление приходит со ссылкой в никуда. + GLITCHTIP_DOMAIN: https://errors.gendsgn.ru restart: always mem_limit: 384m networks: [default]