372 lines
8.9 KiB
Markdown
372 lines
8.9 KiB
Markdown
# 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 <your-namespace>
|
|
```
|
|
|
|
### 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 <your-namespace>
|
|
```
|
|
|
|
### 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 <your-namespace>
|
|
```
|
|
|
|
### 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 <your-namespace>
|
|
|
|
# Method 2: Delete pods (akan auto-recreate)
|
|
kubectl delete pods -l app=antrean -n <your-namespace>
|
|
|
|
# Method 3: Scale down then up
|
|
kubectl scale deployment antrean-app --replicas=0 -n <your-namespace>
|
|
kubectl scale deployment antrean-app --replicas=2 -n <your-namespace>
|
|
```
|
|
|
|
### 4.7. Verifikasi di Kubernetes
|
|
|
|
```bash
|
|
# Cek ConfigMap
|
|
kubectl get configmap antrean-config -n <namespace> -o yaml
|
|
|
|
# Cek Secret (values akan di-encode base64)
|
|
kubectl get secret antrean-secrets -n <namespace> -o yaml
|
|
|
|
# Cek Ingress
|
|
kubectl get ingress antrean-ingress -n <namespace>
|
|
|
|
# Cek pods environment
|
|
kubectl exec -it <pod-name> -n <namespace> -- env | grep AUTH_ORIGIN
|
|
|
|
# Cek logs
|
|
kubectl logs -f deployment/antrean-app -n <namespace>
|
|
```
|
|
|
|
---
|
|
|
|
## 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
|
|
|