# 🚀 PANDUAN DEPLOYMENT KE SERVER PRODUCTION
## Domain: https://qc.suwastama.com/

---

## 📋 CHECKLIST DEPLOYMENT

### 1. FILE YANG HARUS DI-UPLOAD KE SERVER

Upload semua file dari folder `codeigniter4` ke server (via FTP/cPanel File Manager):
- **app/** - Semua file aplikasi
- **public/** - File public (index.php, css, js, uploads)
- **writable/** - Folder untuk cache, logs, session (pastikan permission 755 atau 777)
- **system/** - CodeIgniter system files
- **vendor/** - Dependencies (jika belum ada, jalankan `composer install` di server)
- **.env.production** - File konfigurasi production

**PENTING:** Jangan upload folder `codeigniter4` itu sendiri. Upload ISI folder `codeigniter4`.

---

### 2. STRUKTUR FOLDER DI SERVER

```
/home/ratz2143/
├── public_html/            # Document root (arahkan ke sini)
│   ├── index.php           # File dari codeigniter4/public/
│   ├── .htaccess
│   ├── css/
│   ├── js/
│   └── uploads/
├── qc_app/                 # Folder aplikasi (di luar public_html untuk keamanan)
│   ├── app/
│   ├── system/
│   ├── vendor/
│   ├── writable/           # Permission 755 atau 777
│   └── .env
```

**CATATAN:** Pisahkan folder `public` dan folder aplikasi untuk keamanan.

---

### 3. SETUP DATABASE DI SERVER

#### A. Buat Database (jika belum ada)
Database sudah tersedia:
- **Nama:** ratz2143_qc
- **Username:** ratz2143_qc
- **Password:** Suwastama97

#### B. Import Database
1. Login ke phpMyAdmin atau cPanel MySQL
2. Pilih database `ratz2143_qc`
3. Import file `database_structure.sql` (struktur tabel)
4. Import file `database_users_roles.sql` (data users dan roles)

#### C. Verifikasi Import
Pastikan tabel berikut sudah ada:
- users, roles, permissions, role_permissions
- company_info
- products, suppliers, buyers, categories
- quotations, quotation_items
- inspections, inspection_forms
- approval_history

---

### 4. KONFIGURASI FILE .ENV DI SERVER

Setelah upload, rename file `.env.production` menjadi `.env`:

```bash
mv .env.production .env
```

Atau edit manual file `.env` dengan konfigurasi:

```
CI_ENVIRONMENT = production

app.baseURL = "https://qc.suwastama.com/"
app.timezone = 'Asia/Jakarta'
app.forceGlobalSecureRequests = true

database.default.hostname = localhost
database.default.database = ratz2143_qc
database.default.username = ratz2143_qc
database.default.password = Suwastama97
database.default.DBDriver = MySQLi
database.default.port = 3306
```

---

### 5. SETUP FOLDER PUBLIC

#### Jika menggunakan cPanel/Shared Hosting:

**Option A: Document Root ke folder public**
1. Di cPanel, set Document Root ke: `/home/ratz2143/public_html`
2. Upload semua file dari `codeigniter4/public/` ke `/home/ratz2143/public_html/`
3. Upload folder aplikasi (app, system, vendor, writable) ke `/home/ratz2143/qc_app/`
4. Edit `public_html/index.php`, ubah path:

```php
// Line 16-20, ganti menjadi:
$pathsPath = realpath(FCPATH . '../qc_app/app/Config/Paths.php')
    ?: realpath(FCPATH . '../qc_app/app/Config/Paths.php');
```

**Option B: Root ke folder codeigniter4** (mudah tapi kurang aman)
1. Upload semua file ke `/home/ratz2143/qc_app/`
2. Set Document Root ke: `/home/ratz2143/qc_app/public/`

---

### 6. FILE PERMISSIONS

Set permission folder berikut (via FTP atau File Manager):

```bash
chmod 755 writable/
chmod 755 writable/cache/
chmod 755 writable/logs/
chmod 755 writable/session/
chmod 755 writable/uploads/
chmod 755 public/uploads/
chmod 755 public/uploads/inspections/
chmod 755 public/uploads/products/
```

Jika masih error permission, coba:
```bash
chmod 777 writable/
chmod 777 public/uploads/
```

---

### 7. FILE .htaccess

Pastikan file `.htaccess` ada di folder `public/`:

```apache
# Disable directory browsing
Options -Indexes

# Deny access to hidden files
<FilesMatch "^\.">
    Order allow,deny
    Deny from all
</FilesMatch>

# Redirect to index.php
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    
    # Redirect to HTTPS (uncomment if SSL active)
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
    # Remove index.php from URL
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

# Prevent access to CI system files
<FilesMatch "(^#.*#|\.(bak|conf|dist|fla|in[ci]|log|orig|psd|sh|sql|sw[op])|~)$">
    Order allow,deny
    Deny from all
</FilesMatch>
```

---

### 8. TESTING SETELAH DEPLOYMENT

#### A. Test Akses Website
1. Buka: https://qc.suwastama.com/
2. Seharusnya redirect ke: https://qc.suwastama.com/login

#### B. Test Login
Login dengan akun yang sudah ada:
- **Username:** (cek di database `users`)
- **Password:** (password yang sudah di-set)

#### C. Test Fitur Utama
- [ ] Dashboard loading
- [ ] Menu navigasi berfungsi
- [ ] Upload file (inspections, products)
- [ ] Create quotation
- [ ] Create inspection
- [ ] Export PDF

#### D. Check Logs jika Error
Jika ada error, cek log di:
```
writable/logs/log-YYYY-MM-DD.log
```

---

### 9. TROUBLESHOOTING

#### Error "500 Internal Server Error"
- Cek permission folder `writable/` (set 755 atau 777)
- Cek file `.env` sudah benar
- Cek error_log di cPanel

#### Error "Database Connection Failed"
- Pastikan hostname, database name, username, password benar
- Cek apakah IP server diizinkan akses ke database (whitelist di cPanel)
- Test koneksi database via phpMyAdmin

#### Error "404 Not Found" untuk URL
- Pastikan `.htaccess` ada di folder `public/`
- Cek `mod_rewrite` sudah aktif di Apache
- Cek `app.baseURL` di `.env` sudah benar

#### Upload File Gagal
- Cek permission folder `public/uploads/` dan `writable/uploads/`
- Cek `php.ini`: `upload_max_filesize` dan `post_max_size`
- Cek disk space masih cukup

#### Session Error / Logout Terus
- Set `app.sessionDriver = 'CodeIgniter\Session\Handlers\DatabaseHandler'`
- Atau pastikan folder `writable/session/` permission 777

---

### 10. KEAMANAN POST-DEPLOYMENT

#### A. Disable Debug Mode
Pastikan di `.env`:
```
CI_ENVIRONMENT = production
toolbar.enabled = false
```

#### B. Ubah Encryption Key
Generate key baru:
```bash
php spark key:generate
```

#### C. Setup SSL Certificate
- Install SSL certificate (Let's Encrypt via cPanel)
- Force HTTPS di `.htaccess`
- Set `app.forceGlobalSecureRequests = true`

#### D. Backup Berkala
- Setup auto backup database (cPanel Backup)
- Backup folder `writable/uploads/`
- Backup file `.env`

---

## 📞 SUPPORT

Jika ada masalah saat deployment:
1. Cek error log: `writable/logs/`
2. Cek error_log cPanel
3. Enable debug temporary: `CI_ENVIRONMENT = development`
4. Check database connection dengan script test

---

## ✅ DEPLOYMENT CHECKLIST

- [ ] Upload semua file ke server
- [ ] Set permission folder writable/ dan uploads/
- [ ] Import database structure dan data
- [ ] Rename/edit file .env dengan konfigurasi production
- [ ] Set document root ke folder public/
- [ ] Test akses https://qc.suwastama.com/
- [ ] Test login
- [ ] Test upload file
- [ ] Test create quotation & inspection
- [ ] Disable debug toolbar
- [ ] Setup backup berkala

---

**Deployment Date:** February 12, 2026  
**Environment:** Production  
**Domain:** https://qc.suwastama.com/
