Docker Compose¶
compose.yaml
в корне репозитория запускает полноценный экземпляр на одном хосте:
| Сервис | Образ | Назначение |
|---|---|---|
api |
ghcr.io/koval01/telegram-me (или локальная сборка) |
API на ${APP_PORT:-8000} |
valkey |
valkey/valkey:9.1-alpine |
Общий кэш (совместим с Redis), только в памяти, вытеснение LRU |
worker |
тот же, что api, command: worker |
Необязательный рефрешер ленты (профиль worker) |
Использование¶
docker compose up -d --wait # published image
docker compose up -d --build --wait # build from the checkout
PRESET=full docker compose up -d --wait # enable the feed
docker compose --profile worker up -d --wait # + standalone feed worker
docker compose logs -f api
docker compose down
--wait возвращает управление, когда все сервисы здоровы.
Конфигурация¶
Настройки накладываются слоями, более поздний важнее:
deploy/presets/${PRESET:-standard}.env.envрядом сcompose.yaml(необязательно)REDIS_URLпо умолчанию указывает на встроенный Valkey (redis://valkey:6379/0), если вы не задали его в окружении оболочки.
Полезные переменные для самого compose:
| Переменная | По умолчанию | Значение |
|---|---|---|
PRESET |
standard |
standard, full или minimal |
APP_PORT |
8000 |
Порт на хосте |
APP_IMAGE |
ghcr.io/koval01/telegram-me:latest |
Запускаемый образ |
VALKEY_MAXMEMORY |
256mb |
Размер кэша |
Усиление защиты¶
Оба сервиса приложения работают с корневой файловой системой только для
чтения, tmpfs на /tmp, без каких-либо Linux capabilities, с
no-new-privileges, ротацией логов (5 × 20 МБ) и restart: unless-stopped.
Valkey не хранит данные на диске: после перезапуска кэш заново наполняется с
t.me.