Files
warehouse13/DEPLOYMENT.md
Mondo Diaz 872464dec2 Add air-gapped deployment option for restricted environments
Added support for air-gapped and enterprise environments where npm package access is restricted, specifically addressing esbuild platform binary download issues.

**New Files:**
- Dockerfile.frontend.prebuilt: Alternative Dockerfile that uses pre-built Angular files
- DEPLOYMENT.md: Comprehensive deployment guide with two options

**Changes:**
- package.json: Added optionalDependencies for esbuild platform binaries
  - @esbuild/darwin-arm64
  - @esbuild/darwin-x64
  - @esbuild/linux-arm64
  - @esbuild/linux-x64

**Deployment Options:**

**Option 1 - Standard Build (current default):**
- Builds Angular in Docker
- Requires npm registry access
- Best for cloud/development

**Option 2 - Pre-built (for air-gapped):**
1. Build Angular locally: npm run build:prod
2. Change dockerfile in docker-compose.yml to Dockerfile.frontend.prebuilt
3. Docker only needs to copy files, no npm required
- No npm registry access needed during Docker build
- Faster, more reliable builds
- Best for enterprise/air-gapped/CI-CD

**Troubleshooting:**
See DEPLOYMENT.md for full troubleshooting guide including:
- esbuild platform binary issues
- Custom npm registry configuration
- Environment-specific recommendations

This addresses npm package access issues in restricted environments while maintaining flexibility for standard deployments.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-15 12:36:07 -05:00

2.4 KiB

Deployment Options

This project supports two deployment strategies for the Angular frontend, depending on your environment's network access.

Option 1: Standard Build (Internet Access Required)

Use the standard Dockerfile.frontend which builds the Angular app inside Docker.

Requirements:

  • Internet access to npm registry
  • Docker build environment

Usage:

./quickstart.sh
# or
docker-compose up -d --build

This uses Dockerfile.frontend which:

  1. Installs npm dependencies in Docker
  2. Builds Angular app in Docker
  3. Serves with nginx

Option 2: Pre-built Deployment (Air-Gapped/Restricted Environments)

Use Dockerfile.frontend.prebuilt for environments with restricted npm access or when esbuild platform binaries cannot be downloaded.

Requirements:

  • Node.js 24+ installed locally
  • npm installed locally
  • No internet required during Docker build

Usage:

Step 1: Build Angular app locally

cd frontend
npm install  # Only needed once or when dependencies change
npm run build:prod
cd ..

Step 2: Update docker-compose.yml

Edit docker-compose.yml and change the frontend dockerfile:

  frontend:
    build:
      context: .
      dockerfile: Dockerfile.frontend.prebuilt  # <-- Change this line
    ports:
      - "4200:80"
    depends_on:
      - api

Step 3: Build and deploy

docker-compose up -d --build

This uses Dockerfile.frontend.prebuilt which:

  1. Copies pre-built Angular files from frontend/dist/
  2. Serves with nginx
  3. No npm/node required in Docker

Troubleshooting

esbuild Platform Binary Issues

If you see errors like:

Could not resolve "@esbuild/darwin-arm64"

Solution 1: Use Option 2 (Pre-built) above

Solution 2: Add platform binaries to package.json (already included):

"optionalDependencies": {
  "@esbuild/darwin-arm64": "^0.25.4",
  "@esbuild/darwin-x64": "^0.25.4",
  "@esbuild/linux-arm64": "^0.25.4",
  "@esbuild/linux-x64": "^0.25.4"
}

Solution 3: Use custom npm registry with cached esbuild binaries

Custom NPM Registry

For both options, you can use a custom npm registry:

# Set in .env file
NPM_REGISTRY=http://your-npm-proxy:8081/repository/npm-proxy/

# Or inline
NPM_REGISTRY=http://your-proxy ./quickstart.sh

Recommendation

  • Development/Cloud: Use Option 1 (standard)
  • Air-gapped/Enterprise: Use Option 2 (pre-built)
  • CI/CD: Use Option 2 for faster, more reliable builds