GuíasDespliegue reproducibleÍndice
Guías

Despliegue reproducible

Cada proyecto generado incluye deployment/, compose.yaml, compose.dev.yaml y .env.production.example. Las imágenes y los servicios se adaptan a las plantillas seleccionadas: un proyecto solo backend incluye API y migración; uno solo frontend incluye frontend y gateway; uno completo incluye ambos lados. El gateway TLS se genera cuando hay frontend. Una API sin frontend necesita un proxy TLS externo para su exposición pública.

Los comandos siguientes parten de la raíz del repositorio para usar la CLI. Los comandos de Docker Compose se ejecutan dentro de deployment/ del proyecto generado. Requieren Docker con Compose; la CLI requiere Node.js 20 o posterior. Consulta el catálogo de plantillas para elegir una combinación compatible y los modelos de producto para configurar las cuentas.

Desarrollo local

Genera, prepara los archivos de entorno y comprueba su configuración:

node packages/cli/bin/create-my-saas.js mi-saas --backend fastapi --frontend nextjs
node packages/cli/bin/create-my-saas.js setup ./mi-saas
node packages/cli/bin/create-my-saas.js doctor ./mi-saas --no-services

setup [proyecto] crea backend/.env, frontend/.env y deployment/.env según las plantillas presentes, genera un secreto local y conserva los archivos existentes. El directorio predeterminado de setup, doctor y seed es .. doctor comprueba los archivos y, salvo con --no-services, la conectividad TCP de las URL locales de PostgreSQL y Redis; no verifica sus credenciales.

Para el proyecto completo del ejemplo, entra en mi-saas/deployment/:

docker compose -f compose.yaml -f compose.dev.yaml --env-file .env up -d postgres redis
docker compose -f compose.yaml -f compose.dev.yaml --env-file .env --profile migrate run --rm migrate
docker compose -f compose.yaml -f compose.dev.yaml --env-file .env up --build api frontend

El frontend se publica por defecto en http://localhost:3000 y la API en http://127.0.0.1:8000. El override usa APP_ENV=development, PostgreSQL y Redis sin TLS. Sus datos se conservan en los volúmenes postgres-data y redis-data; down -v los elimina. No uses esta configuración en producción ni sobrescribas el .env creado por setup con el ejemplo de producción.

seed [proyecto] crea cuentas de demostración a través de una API local ya iniciada y guarda las credenciales en .env.demo, ignorado por Git. Exige APP_ENV=development, una URL local de PostgreSQL y EMAIL_DELIVERY_URL vacío. Usa los puertos locales de los starters: FastAPI 8000, NestJS 3001 y Fastify 3002. El Compose integrado publica la API en 8000 por defecto: para usar seed con NestJS o Fastify, ajusta API_PORT al puerto correspondiente en deployment/.env y vuelve a crear el servicio API. Los puertos publicados de Compose se configuran con API_PORT y FRONTEND_PORT.

Producción

Con backend, la receta mantiene PostgreSQL y Redis fuera de Compose para usar servicios gestionados con TLS. Copia deployment/.env.production.example a deployment/.env en el entorno de producción, sustituye todos los secretos y las URL de ejemplo y configura el envío de correo. OAuth y Stripe requieren configuración adicional cuando se utilizan. PRODUCT_MODEL debe coincidir con el modelo elegido al generar el proyecto.

Con frontend, entrega los certificados al gateway en certs/fullchain.pem y certs/privkey.pem, relativos a deployment/. Mantén GATEWAY_IP y TRUSTED_PROXY_IPS coherentes. Para un proyecto completo, ejecuta desde deployment/:

docker compose --env-file .env --profile migrate run --rm migrate
docker compose --env-file .env --profile production up -d --build

Ejecuta migrate como trabajo de publicación antes de arrancar las réplicas de la API. Una generación solo frontend no necesita ese servicio. En una generación solo backend, arranca api sin el perfil production y configura el proxy TLS externo sobre el puerto de loopback, o ajusta API_BIND_ADDRESS y API_PORT.

La API expone /health para comprobar que el proceso está vivo y /ready para comprobar PostgreSQL y Redis, este último cuando el límite distribuido está activo. Compose usa /ready como healthcheck; cuando hay API y gateway, el gateway espera a que la API esté saludable antes de enrutar tráfico.

El deployment/README.md generado detalla la receta según las plantillas seleccionadas. Revisa también las copias de seguridad, las pruebas de restauración y la rotación de secretos de los servicios gestionados antes de usar el despliegue con datos reales.

Preset Coolify

Los proyectos nuevos incluyen deployment/compose.coolify.yaml y deployment/COOLIFY.md. Este preset usa la aplicación Docker Compose desde Git de Coolify, con variables obligatorias validadas por interpolación. Coolify termina TLS; el gateway HTTP generado mantiene frontend y API bajo el mismo origen sin publicar puertos del host. PostgreSQL y Redis siguen siendo externos. El trabajo migrate se ejecuta manualmente una sola vez por versión antes de servir la API. El preset también cubre API sin frontend y Astro estático.

La receta Compose genérica sigue disponible. Al actualizar proyectos existentes, create-my-saas upgrade --dry-run muestra los archivos nuevos o los conflictos antes de escribir. El upgrade preserva .env y los archivos editados. Consulta la documentación de Compose de Coolify para configurar el archivo del repositorio, las variables y el dominio.

Requisitos para producción

Antes de poner un SaaS real en línea todavía hay que conectar las integraciones del producto final. No es código ausente de los starters: son servicios y credenciales que pertenecen a cada despliegue. Configura PostgreSQL, Redis con TLS, la entrega transaccional de correo y las credenciales OAuth de los proveedores que ofrezcas. Si vas a cobrar, configura también Stripe, los precios permitidos y el endpoint de webhooks.

FastAPI, NestJS y Fastify exigen explícitamente los servicios de los que dependen en staging y production y fallan de forma segura si faltan o no se pueden usar. En particular, los límites de petición requieren Redis mediante rediss:// y los flujos de cuenta requieren una entrega de correo autenticada. FastAPI y NestJS también dejan Checkout, Portal y webhooks de Stripe deshabilitados hasta que se proporcione una configuración válida. Consulta el README y el archivo .env.example del starter generado para los nombres de variables y los callbacks registrados.

Consulta el contrato operativo común para los detalles de infraestructura.

¿Ves algo mejorable en esta página?Propón un cambio directamente en GitHub.