# Troubleshooting: Service Gagal Start (exit-code, status=1/FAILURE)

## Gejala

```
Active: activating (auto-restart) (Result: exit-code)
Main PID: 793034 (code=exited, status=1/FAILURE)
```

Service crash atau exit dengan error code 1.

---

## Langkah Debugging

### 1. Cek Log Error Detail

```bash
sudo journalctl -u webhook-service -n 100 --no-pager
```

**Atau:**

```bash
sudo journalctl -u webhook-service --since "1 minute ago"
```

**Yang dicari:**
- Error message saat startup
- Database connection error
- Config error
- Missing file/directory

---

### 2. Test Binary Manual

**Jalankan binary langsung (bukan via systemd):**

```bash
cd /opt/webhook-service
sudo -u www-data ./webhook-service
```

**Ini akan menunjukkan error message yang sebenarnya.**

**Kemungkinan error:**
- `❌ DB Error: ...` → Database connection issue
- `❌ Server failed: ...` → Port sudah dipakai atau permission issue
- `panic: ...` → Runtime error

---

### 3. Cek File & Permission

```bash
# Cek apakah binary ada dan executable
ls -la /opt/webhook-service/webhook-service

# Cek apakah .env ada
ls -la /opt/webhook-service/.env

# Cek apakah folder data ada dan writable
ls -la /opt/webhook-service/data/
```

**Pastikan:**
- Binary executable: `-rwxr-xr-x` atau `-rwxrwxrwx`
- Owner: `www-data:www-data` atau `root:root`
- Folder `data/` ada dan writable oleh user yang menjalankan service

---

### 4. Cek Konfigurasi

```bash
# Cek .env
cat /opt/webhook-service/.env

# Pastikan semua required config ada:
# - PORT
# - DB_PATH
# - SHARED_HOSTING_URL
# - SHARED_HOSTING_SECRET
```

---

### 5. Cek Database Path

```bash
# Cek apakah path database benar
cat /opt/webhook-service/.env | grep DB_PATH

# Cek apakah folder data ada
ls -la /opt/webhook-service/data/

# Cek apakah bisa create file di folder data
sudo -u www-data touch /opt/webhook-service/data/test.txt
sudo -u www-data rm /opt/webhook-service/data/test.txt
```

**Jika gagal:** Permission issue → fix dengan:

```bash
sudo mkdir -p /opt/webhook-service/data
sudo chown -R www-data:www-data /opt/webhook-service/data
sudo chmod -R 755 /opt/webhook-service/data
```

---

### 6. Cek Port

```bash
# Cek apakah port sudah dipakai
netstat -tulpn | grep 9000

# Atau
ss -tulpn | grep 9000
```

**Jika port sudah dipakai:** Ganti PORT di `.env` atau stop service yang pakai port tersebut.

---

## Kemungkinan Penyebab & Solusi

### A. Database Connection Error

**Error:** `❌ DB Error: ...`

**Solusi:**
```bash
# Pastikan folder data ada dan writable
sudo mkdir -p /opt/webhook-service/data
sudo chown -R www-data:www-data /opt/webhook-service/data
sudo chmod -R 755 /opt/webhook-service/data

# Test manual
sudo -u www-data /opt/webhook-service/webhook-service
```

---

### B. Missing .env File

**Error:** Config tidak terbaca

**Solusi:**
```bash
# Pastikan .env ada
ls -la /opt/webhook-service/.env

# Jika tidak ada, copy dari backup atau buat baru
sudo nano /opt/webhook-service/.env
```

---

### C. Binary Architecture Mismatch

**Error:** `cannot execute binary file` atau `exec format error`

**Solusi:**
```bash
# Cek architecture binary
file /opt/webhook-service/webhook-service

# Expected: ELF 64-bit LSB executable, x86-64

# Jika tidak match, rebuild dengan GOARCH yang benar:
# Di Windows:
# $env:GOOS = "linux"
# $env:GOARCH = "amd64"  # atau "arm64" jika VPS ARM
# go build -o webhook-service .
```

---

### D. Permission Issue

**Error:** Permission denied

**Solusi:**
```bash
# Fix permission
sudo chmod +x /opt/webhook-service/webhook-service
sudo chown www-data:www-data /opt/webhook-service/webhook-service

# Fix folder permission
sudo chown -R www-data:www-data /opt/webhook-service
```

---

### E. Missing Dependencies (Unlikely untuk Go Binary)

**Error:** `libc.so.6 not found` atau sejenisnya

**Solusi:**
- Go binary biasanya statically linked, tidak perlu dependencies
- Jika error ini muncul, mungkin binary tidak di-build dengan benar

---

## Quick Fix Checklist

```bash
# 1. Cek log error
sudo journalctl -u webhook-service -n 100

# 2. Test manual
cd /opt/webhook-service
sudo -u www-data ./webhook-service

# 3. Fix permission jika perlu
sudo chmod +x /opt/webhook-service/webhook-service
sudo chown www-data:www-data /opt/webhook-service/webhook-service
sudo chown -R www-data:www-data /opt/webhook-service/data

# 4. Cek .env
cat /opt/webhook-service/.env

# 5. Cek port
netstat -tulpn | grep 9000

# 6. Restart service
sudo systemctl restart webhook-service
sudo systemctl status webhook-service
```

---

## Setelah Fix

**Verifikasi:**

```bash
# Cek status
sudo systemctl status webhook-service

# Expected: Active: active (running)

# Cek log
sudo journalctl -u webhook-service -n 20

# Expected: ✅ SQLite connected, ✅ Worker started, 🚀 Server listening
```

---

**Mulai dari langkah 1 (cek log error)** - itu yang paling penting untuk tahu penyebabnya!
