Руководства
Как установить Seed и запустить его локально
Опубликовано · 3 мин чтения· Anton Shubin
Коротко
- Нужны Deno 2 и Docker. GitHub CLI — по желанию.
- Четыре команды: создать репозиторий, перейти в него, deno task init, deno task dev.
- Потом откройте http://app.localhost и зарегистрируйтесь. В разработке код из письма лежит в логе воркера.
- На моём ноутбуке стек поднялся за 36 секунд и в покое занял 1,6 ГБ памяти.
Чтобы установить Seed и запустить его локально, нужны Deno 2 и Docker. Создайте свой репозиторий из
шаблона, выполните deno task init, чтобы записать файл окружения со свежими секретами, затем
deno task dev, чтобы поднять стек, и откройте http://app.localhost. Вот и вся установка; дальше —
что делает каждый шаг и что делать, если какой-то из них ругается.
Все команды ниже я выполнил 3 ноября 2026 года в пустой папке, на main Seed того дня, так что вывод
здесь настоящий, а не по памяти.
Что нужно заранее?
- Deno 2. На нём работают задачи, которые настраивают стек.
- Docker с Compose. Каждый сервис работает в контейнере. Podman тоже подходит, с одной лишней строкой (ниже).
- По желанию GitHub CLI. Без него шаг 1 заменяют кнопка «Use this
template» на GitHub и
git clone.
Важны и свободные порты: стек публикует Postgres на 127.0.0.1:5432, Valkey на 6380, Grafana на
3000, а прокси на 80 и 443, и всё это только на локальном интерфейсе вашей машины.
Шаг 1: создайте свой репозиторий
gh repo create my-product --template spy4x/seed --private --clone
cd my-product
Так появляется ваш приватный репозиторий my-product с файлами Seed и чистой историей. С этого
момента это ваш код: переименовывайте, удаляйте ненужное.
Шаг 2: deno task init
deno task init
Команда спрашивает название проекта, копирует infra/envs/.env.example в infra/envs/.env, меняет
каждый секрет-заглушку на случайный и записывает ключи веб-пушей в infra/configs/vapid.json. Вот
что она напечатала у меня (я передал --yes, и она взяла имя папки вместо вопроса):
Created infra/envs/.env
Set PROJECT, KV_PASSWORD, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, GARAGE_RPC_SECRET, GRAFANA_PASS, AUTH_COOKIE_SECRET, AUTH_PEPPER, SEED_PASSWORD in infra/envs/.env
Created the web push keys in infra/configs/vapid.json
Ready. Run: deno task dev
Then open http://app.localhost
Запускать её повторно безопасно: она меняет только секрет, в котором ещё стоит заглушка, поэтому никогда не подменит ключ, которым вы уже пользуетесь.
Шаг 3: deno task dev
deno task dev
Команда запускает Traefik (прокси, который отвечает на app.localhost), если он ещё не запущен,
затем Postgres, PgBouncer, Valkey, API, воркер, SPA, встроенное файловое хранилище и мониторинг.
Одноразовый контейнер migrate применяет миграции базы до старта API и воркера, так что руками
ничего запускать не нужно.
На моём ноутбуке, с уже скачанными базовыми образами Docker, команда закончила за 36 секунд и оставила работать 16 контейнеров. Первый запуск скачивает и собирает образы, так что сделайте себе кофе.
Шаг 4: откройте приложение
Откройте http://app.localhost и зарегистрируйтесь на любой адрес. В разработке письма не покидают вашу машину: воркер пишет каждое письмо в свой лог, и код подтверждения лежит там:
deno task compose logs -f worker
Лень вводить адрес? «Попробовать без аккаунта» открывает гостевой аккаунт в один клик, а способ входа можно добавить позже, ничего не потеряв.
Проверить бэкенд отдельно:
curl -s http://app.localhost/api/health
У меня он ответил {"status":"ok","checks":{"database":true,"cache":true,"files":true}, …}.
Grafana с метриками и логами стека — на http://localhost:3000.
Сколько ресурсов он ест?
Сразу после старта, в покое и с пустой базой, 16 контейнеров заняли 1,6 ГБ памяти. Из них 700 МБ — dev-сервер Vite для SPA, которого в продакшене нет (там статические файлы), и 320 МБ — Grafana. База заняла 106 МБ, API и воркер — около 160 МБ каждый. Ноутбука с 8 ГБ хватает.
Что делать, если что-то пошло не так?
- Порт занят. Перед стартом команда на мгновение занимает каждый порт, который публикует
проект, и останавливается, если какой-то занят. Поменяйте этот порт в
infra/envs/.env(DB_HOST_PORT,KV_HOST_PORT,GRAFANA_HOST_PORT) и снова выполнитеdeno task dev. - У вас Podman. Укажите
CONTAINER_PROVIDER=podmanв файле окружения и запустите прокси командойdeno task proxy:start. - Нужны ещё админка или сайт. Добавьте
adminилиmpaвCOMPOSE_PROFILESв файле окружения. Админка тогда отвечает на http://admin.localhost (три приложения). - Нужны тестовые данные.
deno task db:seedнаполняет базу выдуманными людьми, группами и заметками, плюс администратором; какие значения ему нужны, написано в руководстве по разработке.
Остановить всё: deno task compose down. Данные остаются в .volumes/ до следующего раза.
Что дальше?
Поменяйте что-нибудь мелкое и посмотрите, как обновится страница, а потом сделайте свою фичу: заметки Seed — готовый пример, файл за файлом, в посте Your first feature: copy the notes aggregate (на английском). Когда продукт будет готов для людей, вам нужен От git clone до продакшена на одном сервере Hetzner. Застряли на каком-то шаге? Откройте задачу на github.com/spy4x/seed и напишите, где именно.