# Pemasangan baru PORSENI pada cPanel Rumahweb

Versi **2.6.1**, PHP **7.4**, MySQL/MariaDB. Seluruh pembaruan fitur PORSENI tetap termasuk. Tidak ada data peserta, akun bawaan, foto, atau logo pribadi di paket ini.

## Berkas yang dipakai

1. `Source_PORSENI_cPanel_v2.6.1.zip`: source aplikasi.
2. `Database_PORSENI_Kosong_v2.4.1.sql`: struktur database kosong, disediakan terpisah.
3. `Panduan_Hapus_PORSENI_STB_Cloudflare.md`: petunjuk menghapus pemasangan lama yang belum berisi data.

## 1. Subdomain dan SSL

Di cPanel → Domains → Create A New Domain, tambahkan subdomain baru, misalnya `porseni.namadomain.sch.id`. Jangan gunakan document root bersama domain utama. Arahkan document root ke **`public_html/porseni`**.

Arahkan record **A subdomain baru** ke IP hosting Rumahweb pada penyedia DNS yang aktif. Jika nameserver memakai Cloudflare, ubah DNS di Cloudflare; jika memakai Rumahweb, gunakan pengelolaan DNS Rumahweb/cPanel. Tidak perlu memindahkan nameserver seluruh domain untuk satu subdomain.

Pasang SSL/AutoSSL di cPanel dan pastikan HTTPS valid. Untuk pemasangan awal, DNS only memudahkan pemeriksaan. Jika memakai proxy Cloudflare setelahnya, gunakan Full (strict) dengan SSL hosting yang valid.

## 2. Unggah source

1. File Manager → buka **home akun** `/home/USERCPANEL`, bukan public_html.
2. Unggah ZIP source dan ekstrak **langsung di home tersebut**.
3. Hasil yang benar:

| Lokasi | Kegunaan |
|---|---|
| `/home/USERCPANEL/public_html/porseni/index.php` | Halaman aplikasi |
| `/home/USERCPANEL/public_html/porseni/pasang.php` | Pemasang awal |
| `/home/USERCPANEL/public_html/porseni/assets` | Aset publik |
| `/home/USERCPANEL/porseni-private` | Kode, konfigurasi, foto, sesi, dan backup privat |

Paket tidak mempunyai folder pembungkus tambahan. Jangan meletakkan porseni-private di dalam public_html. Folder privat menggunakan izin 700 dan file privat 600; berkas publik 644 dan folder publik 755. Sesuaikan ownership melalui bantuan Rumahweb bila diperlukan, tanpa memakai 777.

## 3. PHP

Pilih **PHP 7.4** untuk website PORSENI melalui pengaturan PHP yang tersedia. Periksa apakah Select PHP Version berlaku untuk seluruh akun jika akun juga menampung website lain.

Kebutuhan: PDO MySQL, mbstring, fileinfo, ctype, json, GD, session, zlib. Modul bawaan mungkin tidak memiliki kotak centang.

Sasaran batas server: memory_limit 128M, upload_max_filesize minimal 2M, post_max_size 64M, max_file_uploads 40, max_input_vars 2000. Aplikasi tetap membatasi tiap foto/dokumen maksimal 2 MB. Bila max_file_uploads terkunci di 20, minta Rumahweb menaikkannya jika ingin mengirim 12 foto sekaligus 12 dokumen. Jangan mengubah seluruh versi PHP website lain tanpa memeriksanya.

## 4. Database SQL terpisah

1. Buat database kosong melalui MySQL Databases / Database Wizard cPanel.
2. Buat user database dengan password kuat, hubungkan ke database PORSENI, dan berikan hak akses pada database tersebut.
3. Catat **nama database dan username lengkap dengan awalan akun cPanel**.
4. Buka phpMyAdmin → pilih database baru → Import → pilih **Database_PORSENI_Kosong_v2.4.1.sql** → jalankan.
5. Setelah impor, ada 12 tabel dan belum ada isi data. SQL tidak membuat database/user server dan tidak menyertakan akun admin atau password bawaan.

Jangan mengimpor SQL ke database Tabungan/Absensi. Jangan mengulangi impor pada database yang sudah dipakai. Jika impor terputus, ulangi pada database khusus PORSENI yang benar-benar kosong.

## 5. Buat konfigurasi dan akun admin

1. Melalui File Manager, edit `porseni-private/config/kunci-pemasangan.txt`.
2. Ganti placeholder dengan kunci acak pribadi **24–160 karakter**. Gunakan password generator; jangan memakai teks contoh GANTI_. Kunci ini terpisah dari password database/admin.
3. Buka **`https://SUBDOMAIN_BARU/pasang.php`** dan masukkan kunci tersebut.
4. Isi alamat HTTPS subdomain, koneksi database lengkap, serta username/password admin **baru**. Password admin minimal 12 dan maksimal 72 byte; konfirmasinya harus sama.
5. Simpan dan tunggu pemberitahuan berhasil. Pemasang memeriksa schema kosong, membuat akun admin dan pengaturan awal, membuat app_key baru, lalu mengunci pemasang.
6. Hapus `public_html/porseni/pasang.php` melalui File Manager. Masuk melalui **`https://SUBDOMAIN_BARU/?page=masuk`**.

Pemasang menerima tabel kosong hasil impor SQL di atas. Jika database belum memiliki tabel sama sekali, pemasang juga dapat membuat struktur internal yang sama. Database yang sudah berisi data atau tabel aplikasi lain akan ditolak, bukan dikosongkan otomatis.

## 6. Persiapan penggunaan

- Unggah logo resmi melalui Pengaturan. Logo STB tidak disalin karena ini pemasangan baru.
- Periksa jadwal pendaftaran. Pengaturan awal membuka sejak pemasangan sampai batas akhir 28 November 2026 WIB; sesuaikan dengan rencana panitia, termasuk uji coba atau jadwal resmi 23–28 November.
- Atur jumlah anggota regu, maksimal cabang per siswa bila diperlukan, jadwal kegiatan, akun/penugasan panitia, dan perhitungan juara umum.
- Kelas peserta baru II–V; usia maksimal 13 tahun pada 1 Juli 2027. Foto setiap peserta wajib.
- Madrasah tidak dibatasi dua peserta secara keseluruhan. Kuota dihitung per NSM/cabang/kategori/format: satu peserta/pasangan/regu putra dan satu putri.
- Uji pendaftaran, foto PDF, cek data, penilaian, klasemen, serta ekspor sebelum membagikan alamat website.

## 7. Backup harian

Cron Jobs cPanel dapat menjalankan `porseni-private/bin/backup.php` sekali sehari. Contoh, ganti path PHP sesuai akun dan USERCPANEL:

```text
/opt/alt/php74/usr/bin/php /home/USERCPANEL/porseni-private/bin/backup.php >> /home/USERCPANEL/porseni-private/backups/cron.log 2>&1
```

Untuk pukul **20.00 WIB**, cron menggunakan `0 20 * * *` bila zona server WIB, atau `0 13 * * *` bila UTC. Konfirmasikan zona scheduler dan path PHP CLI kepada Rumahweb. Cadangan SQL disimpan 30 hari; foto/logo perlu disalin terpisah dari folder privat storage atau melalui backup hosting.

## Sumber resmi

- [Document root Rumahweb](https://www.rumahweb.com/journal/cara-mengganti-document-root-addon-dan-subdomain-di-cpanel/)
- [PHP cPanel Rumahweb](https://www.rumahweb.com/journal/cara-mengganti-versi-php-di-cpanel/)
- [Import SQL cPanel](https://support.cpanel.net/hc/en-us/articles/360055713714-How-do-you-import-and-export-databases-via-phpMyAdmin)
- [AutoSSL Rumahweb](https://www.rumahweb.com/journal/cara-install-ssl-gratis-di-cpanel/)

Paket telah diuji pada lingkungan terisolasi. Pengaturan DNS/SSL dan pemasangan pada akun Rumahweb Bapak belum dijalankan dari percakapan ini.
