# 📦 Panduan Deploy ke cPanel - Alert Command

## ✅ Checklist Pre-Deployment

- [x] Assets sudah di-build (`npm run build` selesai)
- [x] Semua file siap: public, app, config, routes, resources, storage, bootstrap, vendor
- [ ] Buat backup database lokal
- [ ] Buat file `.env` untuk production

---

## 🚀 Langkah-Langkah Deploy ke cPanel

### **1. Siapkan File Aplikasi**

Folder yang harus di-upload ke `public_html/` di cPanel:
```
sensors/
├── app/                    ✓ Upload semua
├── bootstrap/             ✓ Upload semua
├── config/                ✓ Upload semua  
├── database/              ✓ Upload semua (termasuk database.sqlite)
├── public/                ✓ Upload semua (assets sudah ada)
├── resources/             ✓ Upload semua (views, js, css)
├── routes/                ✓ Upload semua
├── storage/               ✓ Upload semua (writable: 777)
├── vendor/                ✓ Upload semua (dependencies)
├── .env                   ⚠️  Buat baru di cPanel
├── artisan                ✓ Upload
├── composer.json          ✓ Upload
└── composer.lock          ✓ Upload
```

### **2. Upload ke cPanel**

**Via File Manager cPanel:**
1. Buka cPanel → File Manager
2. Navigate ke `public_html/`
3. Upload semua folder & file di atas
4. Tunggu hingga selesai (~5-10 menit tergantung kecepatan)

**Via FTP/SFTP (Lebih cepat):**
```bash
# Gunakan FileZilla atau FTP client favorit
# Host: ftp.sensors.moscamp.site
# Username: cpanel-username
# Password: cpanel-password
# Port: 21 (FTP) atau 22 (SFTP)
```

**Via SSH:**
```bash
ssh user@sensors.moscamp.site
cd public_html/
# Clone atau upload files
git clone https://github.com/yourusername/sensors.git . # Jika using git
```

### **3. Setup Database**

Database sudah dalam bentuk SQLite (portable):

**Via cPanel Terminal/SSH:**
```bash
# Masuk ke SSH
ssh user@sensors.moscamp.site

# Navigate ke folder
cd public_html

# Pastikan database ada dan writable
touch storage/app/database.sqlite
chmod 666 storage/app/database.sqlite

# Run migrations jika diperlukan
php artisan migrate
```

### **4. Setup Environment File**

**Buat `.env` baru:**
```bash
# Via cPanel Terminal
cd public_html
cp .env.production .env
```

**Edit `.env` dengan data production:**
```env
APP_NAME=AlertCommand
APP_ENV=production
APP_DEBUG=false
APP_KEY=base64:RTRCJYEuAe/oHh7AMCOkVy/IAcwgvr0rbFkUhC5r38s=
APP_URL=https://sensors.moscamp.site

DB_CONNECTION=sqlite

BROADCAST_CONNECTION=reverb
REVERB_HOST=sensors.moscamp.site
REVERB_PORT=443
REVERB_SCHEME=https
```

### **5. Set File Permissions**

**Via cPanel Terminal:**
```bash
cd public_html

# Public folder: readable
chmod -R 755 public/

# Storage folder: writable  
chmod -R 775 storage/
chmod -R 775 bootstrap/cache/

# .env file: not world-readable
chmod 644 .env
chmod 644 .env.production
```

### **6. Setup Reverb Server**

⚠️ **PENTING:** Reverb memerlukan persistent connection. Pilih salah satu:

**Opsi A: Gunakan Supervisor (Recommended)**
```bash
# Via SSH, install Supervisor
# Buat config file di /etc/supervisor/conf.d/reverb.conf
[program:reverb]
process_name=%(program_name)s
command=php /home/username/public_html/artisan reverb:start
autostart=true
autorestart=true
numprocs=1
redirect_stderr=true
stdout_logfile=/home/username/public_html/storage/logs/reverb.log
```

**Opsi B: Gunakan Cloudflare Durable Objects / External Service**
- Deploy Reverb ke service terpisah
- Update `REVERB_HOST` ke service tersebut

**Opsi C: Manual SSH (Development Only)**
```bash
# Terminal SSH tetap terbuka
ssh user@sensors.moscamp.site
cd public_html
php artisan reverb:start
```

### **7. Update DNS & SSL**

Pastikan di cPanel:
- ✓ Domain pointing ke `public_html/`
- ✓ SSL Certificate aktif (Let's Encrypt)
- ✓ DNS records configured

### **8. Optimasi Production**

```bash
cd public_html

# Clear cache
php artisan config:cache
php artisan route:cache
php artisan view:cache

# Optimize autoloader
composer install --optimize-autoloader --no-dev
```

### **9. Test Deploy**

```bash
# Buka di browser
https://sensors.moscamp.site

# Check Admin Panel
https://sensors.moscamp.site/admin

# Check User Monitor  
https://sensors.moscamp.site/user
```

---

## ⚠️ Troubleshooting

**Error: "The stream or file /storage/logs/laravel.log could not be opened"**
```bash
chmod -R 777 storage/
chmod -R 777 bootstrap/cache/
```

**Error: "No application encryption key has been specified"**
```bash
php artisan key:generate
```

**Error: "CORS policy blocked"**
- Reverb domain harus sesuai dengan `APP_URL`
- Update `REVERB_HOST` di `.env`

**WebSocket tidak connect**
- Check Reverb server running: `php artisan reverb:start`
- Check firewall port 443 (HTTPS WebSocket)
- Verify `REVERB_SCHEME=https` di `.env`

---

## 📋 Checklist Akhir

- [ ] Semua file sudah ter-upload
- [ ] `.env` sudah dikonfigurasi production
- [ ] Database `database.sqlite` sudah ada
- [ ] File permissions sudah benar (storage 775, public 755)
- [ ] SSL certificate aktif
- [ ] Domain DNS configured
- [ ] Reverb server running/configured
- [ ] `php artisan config:cache` sudah dijalankan
- [ ] Admin & User panel bisa diakses
- [ ] Broadcasting test sudah berhasil

---

## 📞 Support

Jika ada error, cek:
1. **cPanel Error Logs**: `/home/username/public_html/storage/logs/laravel.log`
2. **Web Server Logs**: cPanel → Raw Access Logs
3. **Browser Console**: F12 → Console tab untuk JS errors

Semua setup sudah ready! 🎉
