# Hoppscotch Fix - Step-by-Step Guide
## ๐ **Step-by-Step Fix Hoppscotch (Dari Error 502 โ Sukses)**
Berikut rangkuman lengkap langkah-langkah yang kita lakukan untuk memperbaiki Hoppscotch.
---
### ๐ **STEP 1: Identifikasi Masalah Awal**
**Gejala:**
- Co-worker tidak bisa load workspace list di Hoppscotch (loading terus)
- Error di log: `502 Bad Gateway`
**Diagnosa:**
```bash
# Cek log container hoppscotch
docker logs --tail=100 48fc01c8f9a2 2>&1 | grep -i error
Hasil:
dial tcp [::1]:8080: connect: connection refused
โ Caddy (reverse proxy) tidak bisa konek ke backend service.
๐ STEP 2: Cek Status Container & Port
# Cek container yang running
docker ps --filter "publish=8080"
docker ps -a | grep hoppscotch
Hasil: Container hoppscotch sudah running tapi backend-nya mati.
Cek apakah ada yang listen di port 9502:
sudo netstat -tulpn | grep 9502
Hasil: 0.0.0.0:9502 โ ada port mapping, tapi service di dalamnya mati.
๐ STEP 3: Cek Log Lengkap Container
docker logs -f af2efe1a9953
Dari log terlihat:
- โ
Backend server mulai jalan:
Backend Server | Port: 8080 - โ
Semua route terdaftar:
/graphql,/ping,/auth, dll. - โ
Ada request sukses:
POST /graphql 200 - โ Tapi Caddy masih error:
dial tcp [::1]:8080: connection refused
Kesimpulan: Backend jalan di 127.0.0.1:8080, tapi Caddy coba pake localhost:8080 (IPv6 ::1).
๐ STEP 4: Cek Konfigurasi Caddy
# Masuk ke container
docker exec -it af2efe1a9953 sh
# Lihat konfigurasi Caddy
cat /etc/caddy/aio-subpath-access.Caddyfile
Isi Caddyfile:
handle_path /backend* {
reverse_proxy localhost:8080 # <-- MASALAH: pake localhost (IPv6)
}
๐ง STEP 5: Perbaiki Konfigurasi Caddy
Ganti localhost menjadi 127.0.0.1 (IPv4):
docker exec af2efe1a9953 sed -i 's/localhost:8080/127.0.0.1:8080/g' /etc/caddy/aio-subpath-access.Caddyfile
Verifikasi:
docker exec af2efe1a9953 cat /etc/caddy/aio-subpath-access.Caddyfile | grep reverse_proxy
Hasil:
reverse_proxy 127.0.0.1:8080
๐ง STEP 6: Restart Container
docker restart af2efe1a9953
# Tunggu beberapa detik
sleep 10
๐ง STEP 7: Update Konfigurasi Nginx Host
Edit Nginx:
sudo nano /etc/nginx/sites-available/hoppscotch
Tambahkan location /backend/:
location /backend/ {
proxy_pass http://127.0.0.1:9500/backend/; # Lewat Caddy di container
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket support (penting untuk Hoppscotch)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
Test & Reload:
sudo nginx -t
sudo systemctl reload nginx
โ STEP 8: Test Endpoint
Test dari host (seharusnya 400 - CSRF error, bukan 502):
curl -v https://hoppscotch.konstruksi.ai/backend/graphql
Hasil:
< HTTP/2 400
< content-type: application/json
{"errors":[{"message":"This operation has been blocked as a potential Cross-Site Request Forgery (CSRF)..."}]}
โ SUKSES! Response 400 = backend sudah jalan.
โ STEP 9: Test dengan Request Valid
curl -X POST https://hoppscotch.konstruksi.ai/backend/graphql \
-H "Content-Type: application/json" \
-d '{"query":"{ __typename }"}'
Hasil:
{"data":{"__typename":"Query"}}
โ Backend benar-benar berfungsi!
๐ฏ STEP 10: Verifikasi Hoppscotch di Browser
- Buka
https://hoppscotch.konstruksi.ai - Login dengan GitHub
- Cek workspace list โ sudah bisa load!
๐ Ringkasan Root Cause & Fix
| Masalah | Penyebab | Solusi |
|---|---|---|
| 502 Bad Gateway | Caddy pake IPv6 ([::1]:8080), backend listen di IPv4 (127.0.0.1:8080) |
Ubah Caddyfile: localhost:8080 โ 127.0.0.1:8080 |
| Nginx 502 | Nginx gak ada konfigurasi /backend/* |
Tambahkan location /backend/ di Nginx |
| Port mapping | Backend listen di 8080, bukan 3170 | Biarkan mapping 9502:3170 (tidak dipakai) |
๐ Command Penting yang Digunakan
# Lihat log error
docker logs --tail=100 <container> 2>&1 | grep -i error
# Follow log live
docker logs -f <container>
# Masuk ke container
docker exec -it <container> sh
# Edit file di container
docker exec <container> sed -i 's/old/new/g' /path/to/file
# Restart container
docker restart <container>
# Edit Nginx
sudo nano /etc/nginx/sites-available/hoppscotch
# Reload Nginx
sudo nginx -t && sudo systemctl reload nginx
๐ Tips Debugging Kedepan
- Cek log dulu:
docker logs --tail=50 <container> - Cek dari dalam container:
docker exec <container> curl http://127.0.0.1:8080/graphql - Cek Nginx:
sudo nginx -t - Test endpoint langsung:
curl -v https://domain.com/path
๐ Arsitektur Akhir
Browser
โ
https://hoppscotch.konstruksi.ai
โ
Nginx (Host)
โโโ / โ http://127.0.0.1:9500 (Caddy โ Frontend)
โโโ /backend/* โ http://127.0.0.1:9500/backend/* (Caddy โ Backend)
โ
Container: hoppscotch (af2efe1a9953)
โโโ Caddy (port 9500)
โ โโโ /backend/* โ reverse_proxy 127.0.0.1:8080
โโโ Backend Server (port 8080)
โโโ /graphql, /ping, /auth, dll.
โ Status Akhir
- โ
Frontend Hoppscotch jalan di
https://hoppscotch.konstruksi.ai - โ
Backend GraphQL jalan di
https://hoppscotch.konstruksi.ai/backend/graphql - โ WebSocket support untuk realtime
- โ Co-worker bisa login dan load workspace list