# Checklist Perubahan Domain Ketika mengubah domain aplikasi, ikuti checklist berikut: ## 1. File Environment (.env) **Ubah `AUTH_ORIGIN` sesuai domain baru:** ### Development: ```env AUTH_ORIGIN="https://antrean.dev.rssa.id" ``` ### Production: ```env AUTH_ORIGIN="https://antrean.rssa.id" ``` **Lokasi:** `.env` (atau `.env.development` / `.env.production`) --- ## 2. Keycloak Configuration **Di Keycloak Admin Console → Clients → [Your Client] → Settings:** ### Valid Redirect URIs: Tambahkan: - `https://antrean.dev.rssa.id/api/auth/keycloak-callback` (development) - `https://antrean.rssa.id/api/auth/keycloak-callback` (production) ### Valid Post Logout Redirect URIs: Tambahkan: - `https://antrean.dev.rssa.id/LoginPage*` (development) - `https://antrean.rssa.id/LoginPage*` (production) ### Web Origins: Tambahkan: - `https://antrean.dev.rssa.id` (development) - `https://antrean.rssa.id` (production) **Catatan:** Gunakan wildcard `*` untuk post logout redirect agar bisa handle query parameters. --- ## 3. nuxt.config.ts (Opsional) **Jika menggunakan IP address untuk development:** ```typescript devServer: { port: 3000, host: '0.0.0.0' // atau IP address jika perlu } ``` **Untuk production dengan domain, biasanya tidak perlu diubah.** --- ## 4. Kubernetes Configuration ### 4.1. ConfigMap (untuk non-sensitive environment variables) **Buat atau update ConfigMap:** ```yaml apiVersion: v1 kind: ConfigMap metadata: name: antrean-config namespace: default # atau namespace Anda data: AUTH_ORIGIN: "https://antrean.rssa.id" # atau https://antrean.dev.rssa.id untuk dev KEYCLOAK_ISSUER: "https://auth.rssa.top/realms/sandbox" KEYCLOAK_CLIENT_ID: "akbar-test" ``` **Atau gunakan kubectl:** ```bash kubectl create configmap antrean-config \ --from-literal=AUTH_ORIGIN=https://antrean.rssa.id \ --from-literal=KEYCLOAK_ISSUER=https://auth.rssa.top/realms/sandbox \ --from-literal=KEYCLOAK_CLIENT_ID=akbar-test \ -n ``` ### 4.2. Secret (untuk sensitive data) **Buat Secret untuk credentials:** ```yaml apiVersion: v1 kind: Secret metadata: name: antrean-secrets namespace: default type: Opaque stringData: KEYCLOAK_CLIENT_SECRET: "your-secret-here" NUXT_AUTH_SECRET: "your-super-secret-string-of-at-least-32-characters" ``` **Atau gunakan kubectl:** ```bash kubectl create secret generic antrean-secrets \ --from-literal=KEYCLOAK_CLIENT_SECRET=your-secret \ --from-literal=NUXT_AUTH_SECRET=your-auth-secret \ -n ``` ### 4.3. Ingress (untuk domain routing) **Update Ingress dengan domain baru:** ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: antrean-ingress namespace: default annotations: cert-manager.io/cluster-issuer: "letsencrypt-prod" # atau issuer Anda nginx.ingress.kubernetes.io/ssl-redirect: "true" spec: ingressClassName: nginx # atau ingress class Anda tls: - hosts: - antrean.rssa.id - antrean.dev.rssa.id secretName: antrean-tls-secret rules: - host: antrean.rssa.id http: paths: - path: / pathType: Prefix backend: service: name: antrean-service port: number: 3000 - host: antrean.dev.rssa.id http: paths: - path: / pathType: Prefix backend: service: name: antrean-dev-service port: number: 3000 ``` ### 4.4. Deployment (update environment variables) **Update Deployment untuk menggunakan ConfigMap dan Secret:** ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: antrean-app namespace: default spec: replicas: 2 selector: matchLabels: app: antrean template: metadata: labels: app: antrean spec: containers: - name: antrean image: your-registry/antrean:latest ports: - containerPort: 3000 env: # Dari ConfigMap - name: AUTH_ORIGIN valueFrom: configMapKeyRef: name: antrean-config key: AUTH_ORIGIN - name: KEYCLOAK_ISSUER valueFrom: configMapKeyRef: name: antrean-config key: KEYCLOAK_ISSUER - name: KEYCLOAK_CLIENT_ID valueFrom: configMapKeyRef: name: antrean-config key: KEYCLOAK_CLIENT_ID # Dari Secret - name: KEYCLOAK_CLIENT_SECRET valueFrom: secretKeyRef: name: antrean-secrets key: KEYCLOAK_CLIENT_SECRET - name: NUXT_AUTH_SECRET valueFrom: secretKeyRef: name: antrean-secrets key: NUXT_AUTH_SECRET envFrom: # Atau load semua dari ConfigMap (opsional) # - configMapRef: # name: antrean-config ``` **Atau update dengan kubectl:** ```bash kubectl set env deployment/antrean-app \ AUTH_ORIGIN=https://antrean.rssa.id \ --from=configmap/antrean-config \ -n ``` ### 4.5. Service (biasanya tidak perlu diubah) Service biasanya tidak perlu diubah karena hanya routing internal. ### 4.6. Rollout/Restart Deployment **Setelah update ConfigMap/Secret, restart pods:** ```bash # Method 1: Rolling restart kubectl rollout restart deployment/antrean-app -n # Method 2: Delete pods (akan auto-recreate) kubectl delete pods -l app=antrean -n # Method 3: Scale down then up kubectl scale deployment antrean-app --replicas=0 -n kubectl scale deployment antrean-app --replicas=2 -n ``` ### 4.7. Verifikasi di Kubernetes ```bash # Cek ConfigMap kubectl get configmap antrean-config -n -o yaml # Cek Secret (values akan di-encode base64) kubectl get secret antrean-secrets -n -o yaml # Cek Ingress kubectl get ingress antrean-ingress -n # Cek pods environment kubectl exec -it -n -- env | grep AUTH_ORIGIN # Cek logs kubectl logs -f deployment/antrean-app -n ``` --- ## 5. Server/Deployment Configuration (Non-Kubernetes) ### Nginx/Reverse Proxy (jika ada): - Update `server_name` dengan domain baru - Update SSL certificate untuk domain baru - Pastikan proxy_pass mengarah ke aplikasi yang benar ### Docker (jika ada): - Update environment variables di docker-compose.yml atau Dockerfile - Update port mapping jika perlu --- ## 6. DNS Configuration - Pastikan domain sudah pointing ke IP server yang benar - Pastikan A record atau CNAME sudah dikonfigurasi - Tunggu DNS propagation (bisa beberapa menit sampai 24 jam) --- ## 7. SSL Certificate - Pastikan SSL certificate sudah diinstal untuk domain baru - Pastikan certificate valid dan tidak expired - Untuk production, gunakan Let's Encrypt atau certificate resmi --- ## 8. Restart Server/Deployment **PENTING:** Setelah mengubah `.env`: 1. Stop server (Ctrl+C) 2. Start server lagi (`npm run dev` atau `npm run build && npm start`) Environment variables hanya dimuat saat server start! --- ## 9. Verifikasi Setelah semua perubahan, verifikasi: 1. **Cek log server saat login:** ``` 🔧 AUTH_ORIGIN from config: https://antrean.dev.rssa.id 🔗 Redirect URI being sent to Keycloak: https://antrean.dev.rssa.id/api/auth/keycloak-callback ``` 2. **Test login flow:** - Login harus redirect ke Keycloak - Setelah login, harus kembali ke aplikasi - Tidak ada error "Invalid redirect URI" 3. **Test logout flow:** - Logout harus redirect ke Keycloak - Setelah logout, harus kembali ke login page - Tidak ada error "Invalid redirect URI" --- ## File yang TIDAK Perlu Diubah ✅ **Kode aplikasi** - Sudah menggunakan `config.public.authUrl` dari environment variable ✅ **Server API handlers** - Sudah menggunakan `config.public.authUrl` ✅ **Components** - Tidak ada hardcoded domain --- ## Contoh Konfigurasi Lengkap ### Development (.env.development): ```env AUTH_ORIGIN="https://antrean.dev.rssa.id" KEYCLOAK_CLIENT_ID="akbar-test" KEYCLOAK_CLIENT_SECRET="your-secret" KEYCLOAK_ISSUER="https://auth.rssa.top/realms/sandbox" NUXT_AUTH_SECRET="your-super-secret-string-of-at-least-32-characters" ``` ### Production (.env.production): ```env AUTH_ORIGIN="https://antrean.rssa.id" KEYCLOAK_CLIENT_ID="akbar-test" KEYCLOAK_CLIENT_SECRET="your-secret" KEYCLOAK_ISSUER="https://auth.rssa.top/realms/sandbox" NUXT_AUTH_SECRET="your-super-secret-string-of-at-least-32-characters" ``` --- ## Troubleshooting ### Masih redirect ke domain lama? - ✅ Pastikan server sudah restart - ✅ Cek `.env` file sudah benar - ✅ Clear browser cache - ✅ Cek Keycloak configuration sudah benar ### Error "Invalid redirect URI"? - ✅ Pastikan URI sudah ditambahkan di Keycloak - ✅ Pastikan format URI sama persis (dengan/tanpa trailing slash) - ✅ Pastikan menggunakan HTTPS jika domain menggunakan HTTPS ### Session tidak tersimpan? - ✅ Pastikan cookie settings sesuai (secure: true untuk HTTPS) - ✅ Cek browser console untuk cookie errors - ✅ Pastikan domain di cookie sesuai dengan domain aplikasi