Ứng dụng web Node.js với Express framework, sẵn sàng triển khai lên Kubernetes với Helm Chart.
Dự án này bao gồm:
- Ứng dụng Node.js Express cơ bản
- Hỗ trợ build với Cloud Native Buildpacks (khuyến nghị) hoặc Dockerfile
- Helm Chart để triển khai trên Kubernetes
node-web/
├── index.js # Entry point của ứng dụng
├── package.json # Dependencies và scripts
├── Procfile # Process definition cho buildpack
├── project.toml # Buildpack configuration
├── .npmrc # NPM configuration
├── Dockerfile # Docker image definition (backup option)
├── .dockerignore # Docker ignore patterns
├── .gitignore # Git ignore patterns
├── scripts/
│ ├── build-with-buildpack.sh # Build script với Cloud Native Buildpacks
│ └── build-and-push.sh # Build và push image
└── helm/
└── node-web/ # Helm chart
├── Chart.yaml # Chart metadata
├── values.yaml # Default configuration
├── README.md # Chart documentation
└── templates/ # Kubernetes templates
├── _helpers.tpl
├── deployment.yaml
├── service.yaml
├── serviceaccount.yaml
├── ingress.yaml
└── hpa.yaml
- Node.js 18+ (cho local development)
- Docker (để build và run image)
- Pack CLI (để build với Cloud Native Buildpacks - khuyến nghị)
- Kubernetes cluster (để deploy)
- Helm 3.0+ (để deploy với Helm)
# macOS
brew install buildpacks/tap/pack
# Linux/WSL
curl -sSL "https://github.com/buildpacks/pack/releases/download/v0.32.1/pack-v0.32.1-linux.tgz" | sudo tar -C /usr/local/bin/ --no-same-owner -xzv pack
# Windows (Chocolatey)
choco install pack
# Hoặc tải từ: https://github.com/buildpacks/pack/releasesnpm installnpm startỨng dụng sẽ chạy tại http://localhost:3000
npm run devGET /- Welcome messageGET /health- Health check endpoint
Buildpacks tự động phát hiện và build ứng dụng Node.js mà không cần Dockerfile, áp dụng best practices và tối ưu hóa image.
# Build image cơ bản
./scripts/build-with-buildpack.sh node-web 1.0.0
# Build và push lên registry
./scripts/build-and-push.sh node-web 1.0.0 docker.io/youruser
# Hoặc dùng environment variables
REGISTRY=docker.io/youruser IMAGE_TAG=1.0.0 ./scripts/build-and-push.sh# Build với Paketo Node.js buildpack
pack build node-web:1.0.0 \
--builder paketobuildpacks/builder:base \
--buildpack paketo-buildpacks/nodejs \
--env BP_NODE_VERSION="18.*"
# Build với custom builder
pack build node-web:1.0.0 \
--builder paketobuildpacks/builder:base \
--descriptor project.toml- Không cần viết Dockerfile
- Tự động áp dụng best practices
- Tự động cập nhật base image và dependencies
- Tối ưu hóa layer caching
- Security scanning tích hợp
- Reproducible builds
# Build với Dockerfile
docker build -t node-web:1.0.0 .# Run với port mapping
docker run -p 3000:3000 node-web:1.0.0
# Run với environment variables
docker run -p 3000:3000 -e NODE_ENV=production node-web:1.0.0- Build và push Docker image lên registry của bạn:
Với Cloud Native Buildpacks (khuyến nghị):
./scripts/build-and-push.sh node-web 1.0.0 docker.io/youruserVới Dockerfile:
docker build -t docker.io/youruser/node-web:1.0.0 .
docker push docker.io/youruser/node-web:1.0.0- Deploy với Helm (image repository sẽ được override từ command line):
helm install my-node-web ./helm/node-web \
--set image.repository=docker.io/youruser/node-web \
--set image.tag=1.0.0Hoặc cập nhật helm/node-web/values.yaml và deploy:
helm install my-node-web ./helm/node-web# Xem status
helm status my-node-web
# Xem pods
kubectl get pods
# Xem services
kubectl get svc
# Test ứng dụng (nếu dùng ClusterIP)
kubectl port-forward svc/my-node-web 8080:80
curl http://localhost:8080Tạo file custom-values.yaml:
replicaCount: 3
image:
repository: your-registry/node-web
tag: "1.0.0"
ingress:
enabled: true
className: nginx
hosts:
- host: myapp.example.com
paths:
- path: /
pathType: Prefix
autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 10
targetCPUUtilizationPercentage: 80
env:
- name: NODE_ENV
value: productionDeploy với custom values:
helm install my-node-web ./helm/node-web -f custom-values.yamlhelm upgrade my-node-web ./helm/node-webhelm uninstall my-node-web- Auto-scaling: Horizontal Pod Autoscaler dựa trên CPU/Memory
- Health checks: Liveness và Readiness probes
- Security: Pod security context, non-root user
- Resource management: CPU và memory limits/requests
- Ingress: Hỗ trợ ingress controller
- Service Account: Tự động tạo service account
- Flexible configuration: Dễ dàng customize qua values.yaml
ISC