rubis/apps/api/start/env.ts
ordinarthur 4a6c778e7c chore(api): docker-compose dev (PG/Redis/MinIO/Mailhog) + bascule sur Postgres
- docker-compose.dev.yml à la racine : PG 16, Redis 7, MinIO + bucket auto, Mailhog. Ports décalés (5433, 6380, 9100…) pour éviter les collisions locales.
- apps/api/config/database.ts : Postgres en default, SQLite reste accessible via DB_CONNECTION=sqlite.
- start/env.ts : validation des nouvelles vars (PG, Redis, S3, Mail, OCR, refresh tokens).
- .env.example complété, scripts pnpm dev:up/down/logs/reset à la racine.
- docs/tech/dev-setup.md pour expliquer la stack locale.
2026-05-06 12:57:42 +02:00

68 lines
2.4 KiB
TypeScript

/*
|--------------------------------------------------------------------------
| Environment variables service
|--------------------------------------------------------------------------
|
| The `Env.create` method creates an instance of the Env service. The
| service validates the environment variables and also cast values
| to JavaScript data types.
|
*/
import { Env } from '@adonisjs/core/env'
export default await Env.create(new URL('../', import.meta.url), {
// Node
NODE_ENV: Env.schema.enum(['development', 'production', 'test'] as const),
PORT: Env.schema.number(),
HOST: Env.schema.string({ format: 'host' }),
LOG_LEVEL: Env.schema.string(),
// App
APP_KEY: Env.schema.secret(),
APP_URL: Env.schema.string({ format: 'url', tld: false }),
// Session
SESSION_DRIVER: Env.schema.enum(['cookie', 'memory', 'database'] as const),
// Database
DB_CONNECTION: Env.schema.enum.optional(['postgres', 'sqlite'] as const),
PG_HOST: Env.schema.string.optional({ format: 'host' }),
PG_PORT: Env.schema.number.optional(),
PG_USER: Env.schema.string.optional(),
PG_PASSWORD: Env.schema.string.optional(),
PG_DB_NAME: Env.schema.string.optional(),
// Redis (BullMQ + cache)
REDIS_HOST: Env.schema.string.optional({ format: 'host' }),
REDIS_PORT: Env.schema.number.optional(),
REDIS_PASSWORD: Env.schema.string.optional(),
// Storage (MinIO via S3 driver)
DRIVE_DISK: Env.schema.enum.optional(['s3', 'fs'] as const),
S3_ENDPOINT: Env.schema.string.optional({ format: 'url', tld: false }),
S3_REGION: Env.schema.string.optional(),
S3_BUCKET: Env.schema.string.optional(),
S3_ACCESS_KEY: Env.schema.string.optional(),
S3_SECRET_KEY: Env.schema.string.optional(),
S3_FORCE_PATH_STYLE: Env.schema.boolean.optional(),
// Mail
MAIL_FROM_ADDRESS: Env.schema.string.optional(),
MAIL_FROM_NAME: Env.schema.string.optional(),
MAIL_DRIVER: Env.schema.enum.optional(['smtp', 'resend'] as const),
SMTP_HOST: Env.schema.string.optional({ format: 'host' }),
SMTP_PORT: Env.schema.number.optional(),
RESEND_API_KEY: Env.schema.string.optional(),
// OCR
OCR_PROVIDER: Env.schema.enum.optional(['mock', 'mistral'] as const),
MISTRAL_API_KEY: Env.schema.string.optional(),
// Auth
ACCESS_TOKEN_TTL_MINUTES: Env.schema.number.optional(),
REFRESH_TOKEN_TTL_DAYS: Env.schema.number.optional(),
COOKIE_DOMAIN: Env.schema.string.optional(),
COOKIE_SECURE: Env.schema.boolean.optional(),
})