# Containerization & Runtime Orchestration Dokumen ini menjelaskan strategi containerization (Docker / Podman) untuk seluruh aplikasi di KeluargaMart Monorepo. --- ## 1. Arsitektur Multi-Stage Dockerfile Setiap aplikasi memiliki Dockerfile mandiri yang dirancang menggunakan teknik *multi-stage build* untuk menghasilkan image produksi yang minimalis dan aman: ### A. Go Backend (`apps/backend/Dockerfile`) - **Stage 1 (Builder)**: Menggunakan `golang:1.23-alpine`, mengompilasi binary statis (`CGO_ENABLED=0`) dengan optimasi `-ldflags="-s -w"`. - **Stage 2 (Runtime)**: Menggunakan `alpine:3.20` atau `scratch`, hanya membawa binary `server`, sertifikat CA SSL, dan file konfigurasi runtime. - **Ukuran Image**: ~25 MB. ### B. ERP & POS (`apps/erp/Dockerfile`, `apps/pos/Dockerfile`) - **Stage 1 (Builder)**: Menggunakan `node:22-alpine` dengan pnpm, menjalankan `pnpm --filter @keluargamart/erp build`. - **Stage 2 (Runtime)**: Menggunakan `caddy:alpine` atau `nginx:alpine` untuk menyajikan file statis dari folder `dist/`. Dilengkapi konfigurasi SPA fallback (`try_files $uri $uri/ /index.html`). - **Ukuran Image**: ~15 MB. ### C. B2B Storefront (`apps/b2b/Dockerfile`) - **Stage 1 (Builder)**: Menjalankan `nuxt build` untuk menghasilkan output serverless/Node di `.output/`. - **Stage 2 (Runtime)**: Menggunakan `node:22-alpine`, menjalankan entry point Node `node .output/server/index.mjs`. - **Ukuran Image**: ~80 MB. ### D. NextReport (`apps/nextreport/Dockerfile`) - **Runtime**: `python:3.11-slim`, menginstal pustaka ReportLab, WeasyPrint, dan Pandas untuk rendering laporan. --- ## 2. Orkestrasi Compose Tersedia dua level konfigurasi Docker / Podman Compose: ### A. Development Stack (`apps/backend/docker-compose.dev.yml`) Dioptimalkan untuk pengujian integrasi lokal pengembang dengan volume mounting dan hot reloading: ```bash docker compose -f apps/backend/docker-compose.dev.yml up -d ``` Layanan yang dijalankan: - `db`: PostgreSQL 16 - `redis`: Redis 7 - `minio`: S3-compatible Object Storage - `mailpit`: Mock SMTP Server dengan Web UI di `:8025` - `backend`: Go server dengan live reloading - `pos`, `erp`, `b2b`: Frontend development servers ### B. Production & Production-Like Stack (`infra/containers/compose.yml`) Menjalankan container berbasis image terkompilasi yang di-pull dari registry atau dibangun secara lokal dengan reverse proxy Caddy sebagai gateway tunggal: ```bash podman compose -f infra/containers/compose.yml up -d ``` Layanan terhubung melalui internal bridge network `km-network` tanpa membuka port internal yang tidak perlu ke publik.