Deckbook
Личный self-hosted трекер задач, у которого MCP — основной интерфейс: задачисоздают и меняют AI-агенты наравне с владельцем. См. CONTEXT.md и docs/adr/.
Два compose-файла: docker-compose.yml — деплой (только приложение, базавнешняя), docker-compose.local.yml — всё своё, вместе с Postgres.
Запуск у себя
cp .env.example .env # задать OWNER_PASSWORD и SESSION_SECRET
docker compose -f docker-compose.local.yml up -d
Поднимаются два контейнера — приложение и Postgres, больше ничего не требуется.Схема накатывается на старте (prisma db push), бэкап — обычный дамп Postgres.
Переменные окружения:
| Переменная | Смысл |
|---|---|
OWNER_PASSWORD |
пароль владельца; при первом входе сохраняется хешем |
SESSION_SECRET |
ключ подписи cookie сессии |
DATABASE_URL |
адрес Postgres (в local-compose проставлен автоматически) |
APP_PORT |
порт на хосте, по умолчанию 3000 |
Деплой в Coolify
docker-compose.yml — тот же образ, но без Postgres: база уже поднятав Coolify, её адрес приходит переменной DATABASE_URL.
- New Resource → Docker Compose, репозиторий этот, файл
docker-compose.yml. - Задать переменные:
DATABASE_URL,OWNER_PASSWORD,SESSION_SECRET. - В домене сервиса
appуказать свой хост — Coolify сам проставит еговSERVICE_FQDN_APP_3000и настроит роутинг на порт 3000.
Подключение агента
- Завести проект в UI.
- На странице «Токены» выпустить токен — значение показывается один раз.
- Скопировать адрес MCP-сервера проекта:
https://<хост>/mcp/<slug-проекта>. - В конфиге агента указать этот адрес и заголовок
Authorization: Bearer <токен>.
Токен действует только на свой проект: обращение к чужому адресу отвергается,и ни один инструмент не принимает проект параметром (ADR-0003).
Разработка
docker compose -f docker-compose.local.yml up -d db # только база
pnpm install
pnpm db:push # схема в dev-базу
DATABASE_URL=$TEST_DATABASE_URL pnpm db:push # схема в тестовую базу
pnpm dev
Тесты идут против настоящего Postgres (TEST_DATABASE_URL), каждый тестначинается с чистой схемы:
pnpm test # весь набор
pnpm typecheck
pnpm build
Потолок памяти
4 ГБ — позиция, а не пожелание: из неё следует отсутствие Elasticsearch,брокера очередей, фоновых воркеров и планировщика.
Замер под простоем сразу после деплоя (docker stats, 2026-07-31):
| Контейнер | Память |
|---|---|
| приложение | 103 МиБ |
| Postgres | 61 МиБ |
| всего | 164 МиБ |
Запас до потолка — примерно 25×.