EduRuang
Panduan instalasi & pengelolaan
PHP 8.2 · MySQL · phpMyAdmin
Mulai dengan database kosong dan akun admin milik Anda sendiri. Paket tidak berisi akun default maupun materi contoh. Nama aplikasi, institusi, slogan, dan email kontak dapat diganti melalui panel admin.
1. Persyaratan hosting
- PHP 8.2 atau lebih baru; MySQL 8.0+ atau MariaDB 10.6+.
- Ekstensi PHP: pdo_mysql, mbstring, fileinfo, openssl, zip; sesi PHP aktif.
- Apache 2.4 atau Nginx, HTTPS aktif pada hosting publik.
- Akses phpMyAdmin serta akun SMTP. Tidak membutuhkan Composer, npm, framework, atau CDN.
- Folder penyimpanan dapat ditulis oleh proses PHP. Gunakan izin minimum yang sesuai kepemilikan (umumnya 755/750 untuk direktori, bukan 777).
2. Pilih susunan folder
Pilihan A — subdomain / document root khusus (disarankan)
Unggah folder eduruang ke lokasi privat akun hosting, lalu arahkan document root subdomain ke eduruang/public. Folder app, config, database, dan storage menjadi saudara folder public, di luar jangkauan web.
/home/AKUN/eduruang/app
/home/AKUN/eduruang/config
/home/AKUN/eduruang/database
/home/AKUN/eduruang/storage
/home/AKUN/eduruang/public ← document root belajar.domain.id
URL konfigurasi: https://belajar.domain.id
Pilihan B — hosting hanya menyediakan public_html
Letakkan keseluruhan paket pada public_html/lms. Akses melalui https://domain.id/lms/public/ dan isi base_url dengan https://domain.id/lms/public. File .htaccess di folder root dan folder privat wajib ikut terunggah; Apache harus mengizinkan AllowOverride dan mod_rewrite. Jangan menyalin index.php saja ke root karena path akan terputus.
Wajib periksa URL /lms/storage/, /lms/database/schema.sql, /lms/README.md, dan /lms/config/config.example.php: harus ditolak (403/404). Jika hosting tidak menjalankan .htaccess, gunakan Pilihan A. Nginx harus memakai document root public; contoh tersedia di deploy/nginx.conf.example.
3. Buat dan impor database di phpMyAdmin
- Buat database, contoh
akun_eduruang, melalui menu MySQL Database hosting. - Buat pengguna database dengan kata sandi kuat dan berikan hak pada database tersebut. Aplikasi membutuhkan SELECT, INSERT, UPDATE, DELETE setelah skema selesai dibuat.
- Buka phpMyAdmin, pilih database tadi, masuk tab Import, pilih
database/schema.sql, klik Import/Go. - Pastikan 10 tabel terbentuk: users, settings, tokens, resources, attachments, reactions, comments, rate_limits, mail_outbox, audit_logs.
SQL menggunakan InnoDB dan utf8mb4. Jangan memasangnya pada database Moodle yang sudah ada. File skema tidak berisi perintah DROP dan bukan berkas migrasi versi mendatang.
4. Isi konfigurasi aplikasi
Salin config/config.example.php menjadi config/config.php. Ubah nilai berikut memakai editor teks, pertahankan struktur PHP.
| Kunci | Isi |
|---|
| base_url | URL publik aplikasi, tanpa / di akhir. Harus alamat tetap milik situs Anda, bukan hasil header permintaan. |
| db.host / port | Host database dari penyedia hosting; biasanya localhost/127.0.0.1 dan 3306. |
| db.name / user / pass | Database dan akun yang baru dibuat. Nama hosting sering memakai awalan akun_. |
| setup_token | String acak rahasia minimal 32 karakter. Ganti nilai contoh. Bisa dibuat dengan password manager atau perintah di bawah. |
| require_admin_approval | true: verifikasi email lalu persetujuan admin. false: akun langsung aktif setelah verifikasi email. |
| moderate_resources | true: materi anggota ditinjau admin; perubahan materi terbit kembali menunggu peninjauan. Admin dapat menerbitkan langsung. |
| storage_path | Path absolut privat penyimpanan. Default folder storage sejajar public. |
| max_upload_mb / user_quota_mb | Batas per berkas dan kuota per akun, default 20 dan 500 MB. |
php -r 'echo bin2hex(random_bytes(24)), PHP_EOL;'
Jangan membagikan config.php, memasukkannya ke repositori publik, atau mengirim screenshot kata sandi SMTP/database. Base URL HTTPS membuat cookie sesi secure; untuk localhost gunakan http://localhost.
5. Buat administrator pertama
- Buka
https://alamat-aplikasi/install.php. - Masukkan setup_token yang Anda simpan di config.php.
- Isi nama, email admin yang aktif, dan kata sandi minimal 10 karakter.
- Selesaikan instalasi lalu login. Akun admin pertama langsung aktif; emailnya tidak melalui alur verifikasi pengguna.
- Hapus
public/install.php. Installer juga terkunci setelah admin pertama terbentuk. - Lengkapi Pengaturan: nama aplikasi, institusi, slogan, dan kontak pengelola.
6. Aktifkan email
Atur blok mail pada config.php. Gunakan kredensial SMTP yang diberikan penyedia hosting/email.
'driver' => 'smtp',
'host' => 'smtp.domain-anda.id',
'port' => 587,
'encryption' => 'tls',
'username' => 'noreply@domain-anda.id',
'password' => 'KATA_SANDI_SMTP_ANDA',
'from_email' => 'noreply@domain-anda.id',
'from_name' => 'EduRuang',
Untuk SMTP port 465 gunakan encryption => ssl. Dukungan autentikasi SMTP di paket ini menggunakan AUTH LOGIN; OAuth2-only memerlukan relay SMTP yang kompatibel. Jika penyedia mewajibkan App Password, gunakan kata sandi aplikasi tersebut. Mode mail hanya untuk hosting yang telah mengonfigurasi PHP mail(). Verifikasi sertifikat TLS selalu aktif.
Panel admin → Email → Kirim email uji ke akun saya. Status terkirim berarti server email menerima pesan. Periksa inbox/spam dan pengaturan SPF/DKIM/DMARC pada penyedia email bila pesan tidak tiba. Kredensial SMTP tidak dapat disetel melalui browser; simpan di config.php.
Alur pendaftaran
- Pengguna mengisi formulir daftar.
- Pengguna menerima tautan verifikasi yang berlaku 24 jam, membukanya, lalu menekan konfirmasi.
- Admin menerima email pemberitahuan berisi tautan panel pengguna.
- Admin login, meninjau pengguna terverifikasi, dan menekan Setujui/aktifkan.
- Pengguna menerima pemberitahuan persetujuan dan dapat login.
Persetujuan tidak terjadi hanya dengan membuka email, sehingga pemindai tautan email tidak dapat mengaktifkan akun tanpa tindakan admin. Tautan reset kata sandi berlaku 1 jam, sekali pakai. Kata sandi menggunakan hash; perubahan kata sandi dan penonaktifan akun mencabut sesi lama.
Antrean dan cron
Jika SMTP gagal, pesan tetap berada di antrean. Admin dapat mencoba ulang 5 pesan melalui panel. Tambahkan cron setiap 5 menit untuk pemrosesan otomatis:
*/5 * * * * /usr/local/bin/php /home/AKUN/eduruang/app/cron.php >/dev/null 2>&1
Sesuaikan path PHP 8.2 dan folder aplikasi. Cron mencoba maksimal 20 pesan tiap eksekusi, maksimum 10 kegagalan per pesan. Pesan/token yang kedaluwarsa harus diminta ulang. Cron juga membersihkan pembatasan kedaluwarsa, token kedaluwarsa, email berumur 30 hari, dan log administrasi berumur 180 hari.
7. Pengaturan unggahan
Ubah pengaturan PHP hosting (MultiPHP INI Editor atau panel sejenis):
upload_max_filesize = 20M
post_max_size = 110M
max_file_uploads = 5
max_execution_time = 120
display_errors = Off
log_errors = On
File public/.user.ini disertakan, tetapi tidak semua hosting membacanya. Jika mengubah max_upload_mb, sesuaikan juga upload_max_filesize dan post_max_size, termasuk batas body Nginx. Untuk 5 berkas × 20 MB, post_max_size harus lebih besar dari 100 MB.
Berkas disimpan dengan nama acak berekstensi .bin di luar document root dan hanya dilayani melalui download.php setelah pengecekan izin. Maksimum 5 lampiran. Tautan sumber wajib HTTPS. Jenis file dideteksi dengan Fileinfo; dokumen OOXML diperiksa struktur dan makronya. Pemeriksaan ini bukan pemindai antivirus; gunakan layanan pemindaian hosting bila menerima berkas dari komunitas besar.
8. Hak akses dan publikasi
| Keadaan materi | Pengunjung | Anggota aktif | Pemilik / admin |
|---|
| Terbit + Publik | Baca & unduh | Baca, unduh, like, simpan, selesai, komentar | Kelola sesuai peran |
| Terbit + Anggota | Tidak terlihat dan unduhan ditolak | Baca dan berinteraksi | Kelola sesuai peran |
| Draf / Ditinjau / Perbaikan | Tidak terlihat | Tidak terlihat bagi anggota lain | Baca, unduh, edit; admin meninjau yang diajukan |
Semua anggota aktif dapat menyumbang materi. Role yang tersedia: admin dan member. Materi yang sudah terbit tetap tersedia bila akun pembuatnya dinonaktifkan; admin dapat menariknya melalui Minta perbaikan atau menghapus materi tersebut. Materi publik dan komentarnya tidak memerlukan login untuk dibaca.
9. Lokal dengan XAMPP
- Gunakan XAMPP dengan PHP 8.2 dan aktifkan Apache serta MySQL/MariaDB.
- Letakkan folder eduruang di htdocs. Buat database eduruang di phpMyAdmin dan impor schema.sql.
- Isi base_url:
http://localhost/eduruang/public; database sesuai XAMPP. - Untuk uji tanpa SMTP, isi mail.driver = log. Hanya diizinkan untuk hostname localhost/127.0.0.1/::1.
- Buka install.php, buat admin, lakukan pendaftaran uji. Tautan email ada di
storage/logs/mail.log, hanya dibaca melalui filesystem lokal. - Ganti mode log menjadi smtp saat dipasang di hosting.
10. Cadangan dan pemeliharaan
Cadangkan database dari menu Export phpMyAdmin, folder storage/uploads, dan config.php secara privat. Simpan salinan sebelum pembaruan. Jangan mengganti config.php atau storage ketika memperbarui kode. Untuk migrasi server, impor SQL cadangan, salin unggahan, dan sesuaikan base_url serta database. ID lampiran harus tetap sesuai database.
Admin saat ini tidak mempunyai tombol hapus akun massal. Permintaan penghapusan akun ditangani pengelola setelah memastikan kepemilikan, membuat cadangan, dan meninjau materi terkait. Jangan menjalankan pengujian otomatis pada database produksi.
11. Jika terjadi kendala
| Gejala | Periksa |
|---|
| Halaman gangguan / kode error | Log error PHP hosting; kredensial database; impor skema; PHP 8.2 dan ekstensi. |
| Masuk selalu kembali ke login | base_url sesuai http/https; cookie browser; izin folder sesi PHP; email dan status aktif. |
| Email tidak tiba | Panel Email, SMTP host/port/TLS, username/password, akses outbound hosting, spam dan konfigurasi domain email. |
| 419 sesi berakhir | Muat ulang formulir. Jangan mengirim formulir dari tab lama setelah login/logout. |
| Unggahan gagal | Batas PHP, kuota akun, MIME/ekstensi berkas, folder storage writable. |
| Materi hilang dari publik | Status harus terbit, akses publik. Edit materi oleh anggota mengembalikan status ke ditinjau bila moderasi aktif. |
| 403 pada folder public | Gunakan URL diakhiri /public/ dan pastikan DocumentRoot atau aturan Apache sesuai panduan. |
12. Batas lingkup dan pengujian
EduRuang berfokus pada berbagi sumber belajar. Belum tersedia kelas, kuis, penilaian tugas, SCORM, sertifikat, atau integrasi plugin Moodle. Bahasa kode kompatibel PHP 8.2; laporan versi runtime pengujian tersedia di docs/HASIL_PENGUJIAN.md. Pengiriman email ke penyedia SMTP milik Anda harus diuji setelah pemasangan karena paket tidak memuat kredensial SMTP.
Rujukan teknis: hash kata sandi, PDO prepared statements, unggahan PHP.