env-master

Быстрый старт

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

1. Заведите аккаунт

Сервис работает на https://env.aistastudio.ru — ставить и обслуживать нечего. Зарегистрируйтесь, подтвердите почту по ссылке из письма и создайте организацию: она станет владельцем проектов, участников и тарифа.

Адрес API — тот же домен с префиксом /api:

export ENVMASTER_URL=https://env.aistastudio.ru

Дальше в примерах он подставляется как $ENVMASTER_URL.

2. Заведите проект и секрет

Через дашборд это три экрана, через API — три запроса:

BASE=$ENVMASTER_URL/api/v1
TOKEN=$(curl -s $BASE/auth/login -H 'content-type: application/json' \
  -d '{"email":"вы@example.com","password":"..."}' | jq -r .tokens.accessToken)

ORG=$(curl -s $BASE/orgs -H "authorization: Bearer $TOKEN" | jq -r .items[0].id)
PROJECT=$(curl -s $BASE/projects -H "authorization: Bearer $TOKEN" \
  -H 'content-type: application/json' \
  -d "{\"orgId\":\"$ORG\",\"name\":\"Billing API\",\"slug\":\"billing-api\"}" | jq -r .id)

curl -s $BASE/projects/$PROJECT/environments/production/entries \
  -H "authorization: Bearer $TOKEN" -H 'content-type: application/json' \
  -d '{"key":"DB_PASSWORD","kind":"secret","visibility":"masked","value":"..."}'

3. Выдайте сервису identity

curl -s $BASE/services/$SERVICE/identities -H "authorization: Bearer $TOKEN" \
  -H 'content-type: application/json' \
  -d '{"name":"prod worker","environmentId":"...","mode":"universal","allowedKeys":["DB_*"]}'

Ответ содержит clientSecret — он показывается ровно один раз. В базе остаётся только его хэш, поэтому потерянный секрет не восстанавливают, а выпускают заново.

4. Подключите сервис

import { EnvMasterClient } from "@env-master/sdk";

const em = new EnvMasterClient({
  baseUrl: process.env.ENVMASTER_URL!,
  project: "billing-api",
  environment: "production",
});

await em.loginMachine({
  clientId: process.env.ENVMASTER_CLIENT_ID!,
  clientSecret: process.env.ENVMASTER_CLIENT_SECRET!,
});

const password = await em.get("DB_PASSWORD");

Всё. Дальше значение можно менять в дашборде — сервис возьмёт актуальное при следующем старте, а с ротацией и вовсе без перезапуска.

Перенести существующий .env

ENVMASTER_TOKEN=... envmaster import .env \
  --project billing-api --env production --dry-run

Команда сама решит, что похоже на секрет, и покажет план до записи.