Skip to main content

Build y despliegue

Scripts (package.json)​

ScriptComandoNota
startng serveServidor de desarrollo (por defecto en el puerto 4200)
buildng buildBuild por defecto (sin optimizar; optimization: false, sourceMap: true); para producción usar --configuration=production
testng testKarma + Jasmine
lintng lintangular.json no define un target lint; el script no está operativo tal cual
preparehuskyInstala los hooks de Git
secrets:scangitleaks detect --source . --config .gitleaks.toml -v --redactEscaneo de secretos

La configuración production de angular.json activa fileReplacements del entorno, optimization, outputHashing: all, buildOptimizer, extractLicenses y desactiva sourceMap, con presupuestos de 9 MB.

Docker​

Dockerfile (multi-etapa, node:24-alpine):

  1. builder: acepta ARG API_URL y ARG SOCKET_URL (valores por defecto apuntando a localhost:3000), ejecuta npm ci --legacy-peer-deps, copia el código, reescribe con sed las URLs literales de src/environments/environment.prod.ts por los argumentos, y ejecuta npm run build -- --configuration=production.
  2. runner: npm install -g serve, copia dist/backoffice, expone el puerto 4200 y arranca serve -s . -l 4200 (modo SPA).

Como /src/environments/* está en .gitignore, el contexto de build necesita un environment.prod.ts ya presente (ver Entornos). .dockerignore excluye node_modules, dist, .angular, .git, .gitignore y *.md, pero no src/environments.

docker-compose.yml:

  • Servicio frontend, contenedor crm-frontend, restart: unless-stopped.
  • build.args con API_URL y SOCKET_URL de staging.
  • Publica 127.0.0.1:4205:4200 (solo accesible desde el propio host; se espera un proxy inverso delante).
  • Red externa crm-network (debe existir previamente).

nginx​

nginx.conf define un servidor en el puerto 80 con root /usr/share/nginx/html, try_files $uri $uri/ /index.html (fallback de SPA) y gzip para tipos de texto. El Dockerfile actual no usa nginx (usa serve), por lo que este archivo sirve como referencia para otros despliegues (por ejemplo, copiar dist/backoffice a una imagen nginx).

CI/CD (.github/workflows)​

WorkflowDisparadorQué hace
main.yml ("Front BackOffice ZGames")push a developmentConecta por SSH a un servidor (clave y host de secrets), hace git pull origin development, npm ci --force y npx ng build en /var/www/front-backoffice-angular
main-aws.yml ("Deploy BackOffice FrontEnd to AWS")workflow_dispatch, solo si la ref es mainNode 20; genera environment.prod.ts desde secrets, npm i --force, npx ng build --configuration=production, asume un rol de AWS, sincroniza dist/backoffice a S3 y crea una invalidación de CloudFront para /index.html

Observaciones:

  • main.yml ejecuta npx ng build sin --configuration=production, por lo que no aplica los reemplazos de entorno de producción.
  • Las versiones de Node difieren: 20 en el workflow de AWS y 24 en el Dockerfile.
  • Ver las diferencias del environment.prod.ts generado en Entornos.

Hook de pre-commit (.husky/pre-commit)​

Ver Testing y calidad.