# Menambahkan Aplikasi Baru ke Deployment Dokumen ini menjelaskan langkah menambahkan service baru ke `asepharyana-hub`. Root repo berfungsi sebagai hub: source aplikasi berada di `apps/` sebagai submodule, sedangkan Docker Compose, Traefik, dan workflow deploy tetap berada di root repo. ## 1. Buat repo aplikasi Buat repo baru di GitHub dengan pola nama: ```text https://github.com/asepharyana/asepharyana-hub-.git ``` Lalu tambahkan ke root hub sebagai submodule: ```bash git submodule add https://github.com/asepharyana/asepharyana-hub-.git apps/ git submodule update --init --recursive ``` ## 2. Tambahkan Dockerfile Tambahkan Dockerfile runtime di `infra/docker/.Dockerfile`. Gunakan root repo sebagai build context agar Dockerfile bisa mengakses submodule path: ```bash docker build -f infra/docker/.Dockerfile -t :local . ``` ## 3. Tambahkan Compose file Buat `infra/compose/.yml`: ```yaml services: : container_name: image: ghcr.io/asepharyana/asepharyana-hub/:sha- restart: always networks: app-shared-net: aliases: - env_file: - ../../.env networks: app-shared-net: name: app-shared-net external: true ``` Gunakan `app-shared-net` agar service dapat diakses oleh Traefik dan service lain. ## 3.5. Tambahkan Dapr sidecar (wajib untuk pub/sub) Setiap service yang ingin menggunakan Dapr pub/sub atau service invocation harus punya sidecar. Tambah di `infra/compose/.yml`: ```yaml -dapr: container_name: -dapr image: daprio/daprd:latest restart: always depends_on: dapr-placement: condition: service_healthy nats: condition: service_healthy networks: - app-shared-net command: - './daprd' - '--app-id=' - '--app-port=' - '--dapr-http-port=3500' - '--dapr-grpc-port=50001' - '--placement-host-address=dapr-placement:50005' - '--components-path=/components' volumes: - ../../infra/dapr/components:/components ``` Pastikan juga app container punya `depends_on` ke dapr-placement dan nats: ```yaml depends_on: dapr-placement: condition: service_healthy nats: condition: service_healthy ``` ## 4. Tambahkan route Traefik Update `infra/traefik/dynamic/apps.yaml`: ```yaml http: routers: : rule: 'Host(`.asepharyana.my.id`) || Host(`.asepharyana.web.id`)' entryPoints: - websecure tls: {} middlewares: - common-chain@file service: -service services: -service: loadBalancer: servers: - url: 'http://:' ``` ## 5. Update workflow build Update `.github/workflows/docker-build-push.yml`: 1. Tambahkan path detection untuk `apps/` dan `infra/docker/.Dockerfile`. 2. Tambahkan service ke matrix build. 3. Tambahkan mapping Dockerfile di step `Docker metadata`. 4. Tambahkan mapping compose file dan submodule path di step `Update tags and submodules`. ## 6. Update workflow deploy Tambahkan compose file baru ke `ALL_COMPOSE_FILES` di `.github/workflows/deploy-docker.yml`: ```bash infra/compose/.yml ``` ## 7. Update dokumentasi Update file berikut bila service baru mengubah arsitektur publik: - `README.md` - `ARCHITECTURE.md` - `infra/README.md` - `.gitmodules` ## 8. Validasi Jalankan validasi YAML dan compose rendering: ```bash python - <<'PY' import pathlib, yaml for path in pathlib.Path('infra').rglob('*.yml'): with path.open() as fh: yaml.safe_load(fh) print(f'OK {path}') for path in pathlib.Path('infra').rglob('*.yaml'): with path.open() as fh: yaml.safe_load(fh) print(f'OK {path}') PY for f in infra/compose/*.yml; do docker compose -f "$f" config >/dev/null && echo "OK $f" done ```