Infrastructure as Code Β· SaaS B2B para nutricionistas Β· Entorno de producciΓ³n
{
"apiVersion"
: "v1",
"spec"
: {
"kind"
: "Workflow",
"spec"
: {
"type"
: "sequential",
"steps"
: [
// ββ 1. BUILD API βββββββββββββββββββββββββββββββββββββββββ
{
"kind"
: "BuildService",
"spec"
: {
"name"
: "api-build",
"billing"
: { "deploymentPlan"
: "nf-compute-20" },
"vcsData"
: {
"projectUrl"
: "https://github.com/nutritrack-org/api",
"projectType"
: "github",
"projectBranch"
: "main"
},
"buildpack"
: { "builder"
: "NIXPACKS" }
}
},
// ββ 2. DEPLOY API (2 instancias, HA) βββββββββββββββββββββ
{
"kind"
: "DeploymentService",
"spec"
: {
"name"
: "nutritrack-api",
"billing"
: { "deploymentPlan"
: "nf-compute-20" },
"deployment"
: {
"instances"
: 2 ,
"internal"
: {
"id"
: "api-build",
"branch"
: "main",
"buildSHA"
: "latest"
}
},
"ports"
: [{
"name"
: "http", "internalPort"
: 4000 ,
"public"
: true , "protocol"
: "HTTP",
"domains"
: ["api.nutritrack.es"]
}],
"healthChecks"
: [{
"protocol"
: "HTTP", "path"
: "/health",
"port"
: 4000 , "initialDelaySeconds"
: 15 ,
"periodSeconds"
: 30
}],
"runtimeEnvironment"
: {
"NODE_ENV"
: "production",
"DATABASE_URL"
: "${main-db.HOST}",
"REDIS_URL"
: "${session-cache.HOST}"
}
}
},
// ββ 3. POSTGRESQL 16 + backups βββββββββββββββββββββββββββ
{
"kind"
: "Addon",
"spec"
: {
"name"
: "main-db", "type"
: "postgresql", "version"
: "16",
"billing"
: { "deploymentPlan"
: "nf-compute-20",
"storageClass"
: "ssd", "storage"
: 10240 },
"backups"
: {
"enabled"
: true , "schedule"
: "0 3 * * *"
}
}
},
// ββ 4. REDIS 7 para sesiones βββββββββββββββββββββββββββββ
{
"kind"
: "Addon",
"spec"
: {
"name"
: "session-cache", "type"
: "redis", "version"
: "7",
"billing"
: { "deploymentPlan"
: "nf-compute-10",
"storageClass"
: "ssd", "storage"
: 1024 }
}
},
// ββ 5. CRON JOB β informes diarios ββββββββββββββββββββββ
{
"kind"
: "CronJob",
"spec"
: {
"name"
: "daily-report-job",
"billing"
: { "deploymentPlan"
: "nf-compute-10" },
"runOnSourceChange"
: "never",
"schedule"
: "0 6 * * *",
"activeDeadlineSeconds"
: 1800 ,
"backoffLimit"
: 2 ,
"vcsData"
: {
"projectUrl"
: "https://github.com/nutritrack-org/api",
"projectBranch"
: "main"
},
"runCommand"
: "node scripts/reports.js"
}
},
// ββ 6. MANUAL JOB β migraciones Prisma ββββββββββββββββββ
{
"kind"
: "ManualJob",
"spec"
: {
"name"
: "db-migrate-job",
"billing"
: { "deploymentPlan"
: "nf-compute-10" },
"runCommand"
: "npx prisma migrate deploy",
"runtimeEnvironment"
: {
"DATABASE_URL"
: "${main-db.HOST}"
}
}
}
]
}
}
}nutritrack-secrets| Variable | Valor (enmascarado) | Servicios que la usan | Grupo | Estado |
|---|---|---|---|---|
| OPENAI_API_KEY | sk-β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’4f9a | nutritrack-api, daily-report-job | ai-services | β activo |
| STRIPE_SECRET_KEY | sk_live_β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’7b2c | nutritrack-api | billing | β activo |
| JWT_SECRET | β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’ | nutritrack-api, nutritrack-frontend | auth | β activo |
| SENDGRID_API_KEY | SG.β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’β’3e1d | nutritrack-api, daily-report-job | notifications | β activo |