Перейти к содержимому

Руководства

Как установить 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 и напишите, где именно.

Следующий пост — на почту

Короткое письмо, когда выходит новый пост или что-то запускается. Подписка подтверждается один раз по почте, отписаться можно в один клик.

Все посты