3.0 KiB
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/<nama-app> 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:
https://github.com/asepharyana/asepharyana-hub-<nama-app>.git
Lalu tambahkan ke root hub sebagai submodule:
git submodule add https://github.com/asepharyana/asepharyana-hub-<nama-app>.git apps/<nama-app>
git submodule update --init --recursive
2. Tambahkan Dockerfile
Tambahkan Dockerfile runtime di infra/docker/<nama-app>.Dockerfile.
Gunakan root repo sebagai build context agar Dockerfile bisa mengakses submodule path:
docker build -f infra/docker/<nama-app>.Dockerfile -t <nama-app>:local .
3. Tambahkan Compose file
Buat infra/compose/<nama-app>.yml:
services:
<nama-app>:
container_name: <nama-app>
image: ghcr.io/asepharyana/asepharyana-hub/<nama-app>:sha-<short-sha>
restart: always
networks:
app-shared-net:
aliases:
- <nama-app>
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.
4. Tambahkan route Traefik
Update infra/traefik/dynamic/apps.yaml:
http:
routers:
<nama-app>:
rule: 'Host(`<subdomain>.asepharyana.my.id`) || Host(`<subdomain>.asepharyana.web.id`)'
entryPoints:
- websecure
tls: {}
middlewares:
- common-chain@file
service: <nama-app>-service
services:
<nama-app>-service:
loadBalancer:
servers:
- url: 'http://<nama-app>:<port>'
5. Update workflow build
Update .github/workflows/docker-build-push.yml:
- Tambahkan path detection untuk
apps/<nama-app>daninfra/docker/<nama-app>.Dockerfile. - Tambahkan service ke matrix build.
- Tambahkan mapping Dockerfile di step
Docker metadata. - 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:
infra/compose/<nama-app>.yml
7. Update dokumentasi
Update file berikut bila service baru mengubah arsitektur publik:
README.mdARCHITECTURE.mdinfra/README.md.gitmodules
8. Validasi
Jalankan validasi YAML dan compose rendering:
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