Runtime Manual/Ecosystem & Tooling/Automated Deployment & Orchestration (amber deploy)

Automated Deployment & Orchestration (amber deploy)

One-command generation of production multi-stage Dockerfiles, standalone SEA binaries, and Kubernetes manifests

1. Why amber deploy?

Shipping code from local machines to production often introduces friction:

  • Cumbersome Dockerfiles: Misconfigured image layers, bloated multi-gigabyte images, or missing non-root security principles.
  • Environment Fragmentation: Different delivery targets (Docker containers, standalone binaries, Kubernetes clusters) require disparate configuration templates.
  • Missing Reliability Best Practices: Forgetting readiness probes, liveness probes, or CPU/memory limits in Kubernetes manifests.

Amber provides built-in amber deploy: automatically inspects your project layout and generates hardened, production-ready configurations.


2. Basic Usage & Options

code
# Default: generate Dockerfile and docker-compose.yml
amber deploy

# Specify listening port and entry file
amber deploy --port 3000 --entry server.ts

# Target specific deployment model: docker, compile, or k8s
amber deploy --target docker
amber deploy --target compile
amber deploy --target k8s

Command Flags

FlagDescriptionDefault
-t, --target <target>Target type: docker, compile, or k8sdocker
-e, --entry <file>Application entry file (server.ts, app.ts, index.ts)Auto-inferred
-p, --port <port>Service port for container/k8s exposure3000
-o, --output-dir <dir>Directory to emit configuration filesCurrent directory

3. Deployment Modes

1. Hardened Multi-Stage Docker (--target docker)

Running amber deploy --target docker creates:

  1. Dockerfile: Multi-stage build running under an unprivileged non-root user (amberjs:10001), keeping image footprint minimal.
  2. .dockerignore: Excludes node_modules, .git, temporary test files, and local logs.
  3. docker-compose.yml: Pre-configured health check probes, port bindings, and restart policies.

Generated Dockerfile example:

code
# Build stage
FROM ghcr.io/zh30/amberjs:latest AS builder
WORKDIR /app
COPY . .
RUN amber bundle --minify --outfile dist/server.js server.ts

# Production runner stage
FROM debian:bookworm-slim
RUN useradd -m -u 10001 amberjs
WORKDIR /app
COPY --from=builder /usr/local/bin/amber /usr/local/bin/amber
COPY --from=builder /app/dist/server.js ./dist/server.js
USER amberjs
EXPOSE 3000
CMD ["amber", "run", "dist/server.js"]

2. Standalone SEA Application (--target compile)

For air-gapped systems, IoT devices, or single-binary CLI distribution, compile directly into a Single Executable Application:

code
amber deploy --target compile --entry app.ts

This compiles your TypeScript source, bundled assets, and the Amber V8 runtime into a single, dependency-free binary. The target environment requires zero installations of Node.js, Rust, or Amber.


3. Cloud-Native Kubernetes Manifests (--target k8s)

Running amber deploy --target k8s emits production-ready specs into k8s/:

  • deployment.yaml: 3 replicas, RollingUpdate strategy, non-root security context, and strict resource quotas.
  • service.yaml: Standard ClusterIP service definition.
  • hpa.yaml: Horizontal Pod Autoscaler targeting 80% CPU utilization (2 to 10 pods).

Deploy instantly:

code
kubectl apply -f k8s/