Skip to content

Vận hành

Không DB, không migration, không worker. Vận hành = triển khai proxy + portal, theo dõi metrics Traefik, và tinh chỉnh resilience.

1. Triển khai

ArtifactImagePortBuild từ
Traefiktraefik:v3.6:80 web, :8080 dashboard/metricsconfig/traefik.yml + config/dynamic/ được mount
Portalbuild tĩnh → nginxinc/nginx-unprivileged:1.27-alpine:8080portal/Dockerfile
Gateway dev cục bộnginx:1.27-alpine (local-nx-gateway):80 (host net)local/docker-compose.yml + local/nginx.conf

Build & chạy Portal

bash
cd packages/gateway/portal
bun install        # cây phụ thuộc riêng với gốc monorepo
bun run dev        # Astro dev server trên :3003
bun run rebuild    # clean + build tĩnh production
bun run lint       # scripts/lint.sh

Config Traefik và Nginx không cần bước build — chúng được mount trực tiếp. Dịch vụ backend tự đăng ký với Traefik qua Docker labels; không cần redeploy gateway khi thêm một dịch vụ (xem Routing).

Gateway dev native

bash
# Chỉ Linux — host networking cho phép Nginx tiếp cận 127.0.0.1:31xx và bind :80
docker compose -f packages/gateway/local/docker-compose.yml up -d
curl http://localhost/__gateway_health   # → {"status":"ok","gateway":"local-nx-gateway"}

2. Observability

Tín hiệuNguồnXem ở đâu
Access logsTraefik JSON access log (Authorization/Cookie bị bỏ)container stdout / Loki
App logsTraefik JSON log, level: INFOcontainer stdout
MetricsPrometheus trên Traefik :8080Prometheus + Grafana
DashboardTraefik dashboard :8080 (basic-auth)/dashboard/
Sức khỏe theo dịch vụgateway-portaltrang Monitor của portal

Danh sách metric đầy đủ, config scrape Prometheus, và provisioning Grafana: xem Observability. Metric chính: traefik_service_requests_total, traefik_service_request_duration_seconds, traefik_service_server_up.

3. Bảo mật

Mối quan tâmGiảm thiểuNguồn
TLSKết thúc tại edge Nginx — Traefik không có HTTPS entrypointconfig/traefik.yml
Rate limit (chung)rate-limit 200/s, burst 400, theo IPmiddlewares.yml
Rate limit (auth)rate-limit-auth 30/min, burst 60, theo IPmiddlewares.yml
Circuit breakerNetworkErrorRatio() > 0.10 || LatencyAtQuantileMS(95.0) > 3000middlewares.yml
Security headersXSS filter, nosniff, frame deny; strip Server/X-Powered-Bymiddlewares.yml
Truy cập Dashboard / portalbasic auth (dashboard-auth)middlewares.yml
Docker socketmount read-only; exposedByDefault: falseconfig/traefik.yml
IP client thựcipStrategy.depth=1 đọc X-Forwarded-For phía sau Nginxmiddlewares.yml

Rate limiting theo IP chỉ hoạt động đúng vì ipStrategy.depth=1 trích IP client thực — nếu không, mọi request sẽ dùng chung bucket IP của Nginx. Xem Resilience.

4. Runbook

4.1 Phân loại cảnh báo (khuyến nghị — chưa triển khai)

Cảnh báoKích hoạtKiểm traSửa
GatewayHighErrorRatetỷ lệ 5xx > 5% trong 5mTraefik access logs, sức khỏe dịch vụ đíchKiểm tra backend lỗi; circuit breaker có thể đã mở
GatewayHighLatencyp99 > 2s trong 5mhistogram latency theo dịch vụBackend chậm; kiểm tra DB / downstream
BackendDowntraefik_service_server_up == 0/health dịch vụRestart/scale backend; Traefik tự thêm lại khi hồi phục

Ví dụ PromQL + quy tắc cảnh báo: xem Observability §8.

4.2 Thao tác thường gặp

Thao tácLệnh / hành động
Tail log Traefikdocker logs -f <traefik-container>
Xác minh một route được đăng kýTraefik dashboard /dashboard/ → HTTP Routers
Reload middleware dùng chungsửa config/dynamic/middlewares.yml — file provider hot-reload (không restart)
Thêm một route backend (prod)thêm Traefik labels vào compose dịch vụ; tự khám phá
Thêm một route backend (dev)thêm upstream + location /v1/api/<svc>/ vào local/nginx.conf, restart local-nx-gateway
Thêm một dịch vụ vào portalthêm một mục vào portal/src/constants/services.constant.ts, rebuild portal
Kiểm tra liveness gateway devcurl http://localhost/__gateway_health
Kiểm tra một circuit đã tripdashboard → middleware router; theo dõi NetworkErrorRatio / p95 latency

5. Trang liên quan

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.