Build y despliegue
Scripts (package.json)
| Script | Comando | Nota |
|---|---|---|
start | ng serve | Servidor de desarrollo (por defecto en el puerto 4200) |
build | ng build | Build por defecto (sin optimizar; optimization: false, sourceMap: true); para producción usar --configuration=production |
test | ng test | Karma + Jasmine |
lint | ng lint | angular.json no define un target lint; el script no está operativo tal cual |
prepare | husky | Instala los hooks de Git |
secrets:scan | gitleaks detect --source . --config .gitleaks.toml -v --redact | Escaneo 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):
- builder: acepta
ARG API_URLyARG SOCKET_URL(valores por defecto apuntando alocalhost:3000), ejecutanpm ci --legacy-peer-deps, copia el código, reescribe consedlas URLs literales desrc/environments/environment.prod.tspor los argumentos, y ejecutanpm run build -- --configuration=production. - runner:
npm install -g serve, copiadist/backoffice, expone el puerto4200y arrancaserve -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, contenedorcrm-frontend,restart: unless-stopped. build.argsconAPI_URLySOCKET_URLde 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)
| Workflow | Disparador | Qué hace |
|---|---|---|
main.yml ("Front BackOffice ZGames") | push a development | Conecta 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 main | Node 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.ymlejecutanpx ng buildsin--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.tsgenerado en Entornos.
Hook de pre-commit (.husky/pre-commit)
Ver Testing y calidad.