Yomu
Deployment

Domain & TLS

DNS records, routing subdomain via Traefik Swarm labels, dan konfigurasi TLS/HTTPS

Platform Yomu dideploy di domain publik yomu.my.id dengan routing berbasis subdomain untuk production, staging, dan monitoring.

DNS Records

RecordTypeTargetKeterangan
yomu.my.idAVPS Public IP (GCP)Frontend production
java.yomu.my.idAVPS Public IP (GCP)Java backend production
rust.yomu.my.idAVPS Public IP (GCP)Rust backend production
staging.yomu.my.idAVPS Public IP (GCP)Frontend staging
java-staging.yomu.my.idAVPS Public IP (GCP)Java backend staging
rust-staging.yomu.my.idAVPS Public IP (GCP)Rust backend staging
monitoring.yomu.my.idAVPS Public IP (GCP)Grafana dashboard

Routing Matrix

Routing Subdomain Production

SubdomainRouterTarget ServiceTraefik Label
yomu.my.idfrontend-routerfrontendHost(\yomu.my.id`)`
java.yomu.my.idjava-routerjavaHost(\java.yomu.my.id`)`
rust.yomu.my.idrust-routerrustHost(\rust.yomu.my.id`)`

Routing Subdomain Staging

SubdomainRouterTarget ServiceTraefik Label
staging.yomu.my.idstaging-frontend-routerfrontend-stagingHost(\staging.yomu.my.id`)`
java-staging.yomu.my.idstaging-java-routerjava-stagingHost(\java-staging.yomu.my.id`)`
rust-staging.yomu.my.idstaging-rust-routerrust-stagingHost(\rust-staging.yomu.my.id`)`

Routing Monitoring

SubdomainRouterTarget ServiceTraefik Label
monitoring.yomu.my.idgrafana-routergrafanaHost(\monitoring.yomu.my.id`)`

Konfigurasi Traefik Labels

Routing dikonfigurasi via labels di docker-compose.swarm.yml:

services:
  frontend:
    deploy:
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.frontend.rule=Host(`yomu.my.id`)"
        - "traefik.http.routers.frontend.entrypoints=websecure"
        - "traefik.http.routers.frontend.tls=true"
        - "traefik.http.routers.frontend.tls.certresolver=letsencrypt"
  
  java:
    deploy:
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.java.rule=Host(`java.yomu.my.id`)"
        - "traefik.http.routers.java.entrypoints=websecure"
        - "traefik.http.routers.java.tls=true"
        - "traefik.http.routers.java.tls.certresolver=letsencrypt"
  
  rust:
    deploy:
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.rust.rule=Host(`rust.yomu.my.id`)"
        - "traefik.http.routers.rust.entrypoints=websecure"
        - "traefik.http.routers.rust.tls=true"
        - "traefik.http.routers.rust.tls.certresolver=letsencrypt"

Opsi TLS/HTTPS

Aktifkan TLS otomatis dengan konfigurasi di traefik.yml:

certificatesResolvers:
  letsencrypt:
    acme:
      tlsChallenge: {}
      email: admin@yomu.my.id
      storage: /etc/traefik/acme.json

Traefik akan secara otomatis:

  • Request sertifikat dari Let's Encrypt
  • Menyimpan ke /etc/traefik/acme.json
  • Renew otomatis saat mendekati kedaluwarsa

2. Cloudflare Origin Certificates

Download Cloudflare origin certificate dari dashboard Cloudflare, simpan ke traefik/certificates/, dan konfigurasi di dynamic config:

tls:
  certificates:
    - certFile: /etc/traefik/certs/origin.pem
      keyFile: /etc/traefik/certs/origin-key.pem

3. Self-Signed (Hanya Staging)

openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout traefik/certificates/staging-key.pem \
  -out traefik/certificates/staging.pem \
  -subj "/CN=staging.yomu.my.id"

Mount ke Traefik dan konfigurasi sebagai tls di router staging.

Keamanan

AspekKonfigurasi
Grafana sign-upDisabled (GF_USERS_ALLOW_SIGN_UP: false)
Grafana default useradmin + password dari .env
PrometheusVia Traefik subdomain (bisa tambahkan auth middleware)
Traefik dashboard:3001 — bind ke localhost atau tambahkan IP restriksi
DB passwordVia .env, tidak ter-commit ke repo
Internal API keyINTERNAL_API_KEY + JAVA_CORE_API_KEY di .env

On this page