Skip to content

Repository files navigation

DewaDrive — FINAL Build (PHP + MySQL + S3)

Tanggal: 2025-11-05

Mini “Google Drive” siap-deploy: auth, folder, upload, preview (PDF.js, Office Viewer, XLSX via SheetJS+Handsontable), share publik (file/folder), permission per-folder (viewer/editor) dengan inheritance + override allow/deny, quota per user, S3-compatible storage, Audit Logs, Analytics (Chart.js), Email Notifikasi (throttle & daily digest).


0) Ringkasan Fitur (Siap Pakai)

  • Auth: register/login, password_hash().
  • File/Folder: struktur folder, upload multi-file, delete, quota per-user.
  • Preview: PDF (PDF.js), Office (via Microsoft Office Web Viewer), XLSX (SheetJS+Handsontable).
  • Share/Permission:
    • Publik: token link file/folder.
    • Private share: per-folder ke user (email), role viewer/editor, inheritance ke subfolder, override allow/deny.
  • S3-compatible: upload besar dengan MultipartUploader, unduh via pre-signed URL.
  • Admin: set quota & role, Audit Logs (filter + CSV), Analytics (Top Users, Top Files, Heatmap).
  • Notifikasi: email saat share & akses (throttle), daily digest via cron.

1) Struktur Direktori

/public           -> web root (wajib jadi Document Root)
/assets           -> CSS/JS statis
/lib              -> helper, auth, DB, storage, mailer
/storage          -> file lokal (jika driver=local), sudah dilindungi .htaccess
config.php
db.sql            -> semua schema dan alter yang diperlukan
composer.json     -> aws-sdk, phpmailer
digest_daily.php  -> cron digest harian
s3_lifecycle.php  -> contoh set lifecycle bucket
README.md         -> panduan ini

Note: Semua file sudah disiapkan—cukup upload ZIP ke node PHP kamu dan ikuti langkah di bawah.


2) Prasyarat

  • PHP 8.0+ (disarankan 8.1/8.2)
  • MySQL/MariaDB
  • Composer terpasang pada node PHP (untuk install dependency)
  • (Opsional) S3-compatible storage (AWS S3/MinIO/Wasabi/dll)
  • (Opsional) SMTP untuk email notifikasi

3) Deploy di DewaCloud (FINAL, tinggal pakai)

Target: bisa login, upload, preview, share, izin editor, analytics, notifikasi—tanpa modifikasi kode.

A. Buat Environment

  1. Create Environment → pilih PHP 8.x + MySQL/MariaDB.
  2. Aktifkan Public IP / Load Balancer bila perlu.

B. Set Document Root

  1. Buka Config node PHP → atur Document Root ke:
    /public

C. Database

  1. Buat database (nama bebas).
  2. Import db.sql (via phpMyAdmin/CLI).
    • Script ini sudah mencakup CREATE dan ALTER (quota, role, public_token, shares, logs, ACL, email_events).

D. Upload Kode

  1. Deployment → Upload ZIP final ini atau SFTP/FTPS.
  2. Pastikan struktur tetap dan public/ menjadi root web.

E. Install Dependency

Masuk ke node PHP (Web SSH/SSH) pada root project:

composer install --no-dev -o

Memasang aws/aws-sdk-php & phpmailer/phpmailer.

F. Set ENV (Variable Environment)

Wajib (DB):

DB_HOST=...
DB_NAME=...
DB_USER=...
DB_PASS=...

Aplikasi (disarankan):

APP_BASEURL=https://drive.domainmu.id
USER_QUOTA_MB=512           # default kuota user (opsional)
UPLOAD_MAX_BYTES=10485760   # override jika perlu (opsional)

Storage (opsional S3):

STORAGE_DRIVER=s3
S3_KEY=...
S3_SECRET=...
S3_REGION=us-east-1
S3_BUCKET=nama-bucket
S3_ENDPOINT=...             # kosongkan untuk AWS asli; isi untuk MinIO/Wasabi
S3_PATH_STYLE=true          # true untuk MinIO

SMTP (opsional notifikasi):

SMTP_HOST=smtp.domainmu.id
SMTP_PORT=587
SMTP_USER=...
SMTP_PASS=...
SMTP_SECURE=tls
SMTP_FROM=no-reply@domainmu.id
SMTP_FROM_NAME=DewaDrive

Notifikasi throttle & digest (opsional):

NOTIFY_MIN_GAP_MIN=60       # throttle email event per file (default 60 menit)
DIGEST_HOUR=07              # jam kirim digest harian (24h)

G. Restart Node PHP

Agar ENV & dependency aktif.

H. Buat Admin Pertama

Login → lalu via DB jalankan:

UPDATE users SET role='admin' WHERE email='email_admin@domainmu.id';

Setelah itu, Admin bisa atur kuota dan role user lain dari /admin.php.


4) Cara Pakai (End-User)

  • Register/Login → upload file, buat folder.
  • Preview:
    • PDF: tombol Buka dengan PDF.js atau pratinjau inline.
    • Word/Excel/PPT: Publikasikan dulu (agar viewer online bisa akses), lalu pratinjau via Office Web Viewer.
    • XLSX: tombol Spreadsheet Viewer (SheetJS + Handsontable; bisa ekspor CSV).
  • Share Publik:
    • File: Publikasikan → dapat token link.
    • Folder: Publikasikan Folder → link publik folder (daftar file).
  • Share Privat (per-folder):
    • Permissions → masukkan email user terdaftar, pilih role viewer/editor.
    • Folder yang dibagikan muncul di Shared With Me.
    • Editor bisa upload/delete di folder tersebut (kuota owner terpakai).
  • Quota: progress bar di beranda; admin bisa ubah kuota per user.

5) Role & Akses

  • Role share: viewer (lihat/unduh) atau editor (plus upload/delete) pada folder dibagikan.
  • Inheritance: share pada folder turun ke semua subfolder.
  • Override (Granular Policy): pada folder tertentu, bisa set allow/deny (dengan role untuk allow). Resolusi akses memakai override terdekat (dari folder naik ke root); jika tak ada override, pakai share inheritance.
  • Publik vs Privat: link publik memakai token (file/folder). Private share butuh akun login.

Admin pages:

  • /admin.php → set quota & role user.
  • /admin-logs.phpAudit Logs (filter action/user/date + Export CSV).
  • /admin-analytics.phpTop Users, Top Files, Heatmap (Chart.js).

6) Notifikasi Email

  • Saat share: pemilik & penerima dapat email.
  • Saat view/download: pemilik dapat email (throttle) — ENV NOTIFY_MIN_GAP_MIN menghindari spam.
  • Daily Digest: ringkasan akses kemarin per owner:
    • Cron harian (sesuaikan jam server):
      php digest_daily.php
      
    • ENV DIGEST_HOUR=07 agar skrip mengirim setelah jam 07.

Jika SMTP belum disetel, sistem akan skip pengiriman (best-effort).


7) Object Storage (S3) – Skala Besar

  • Set STORAGE_DRIVER=s3 + kredensial/bucket/endpoint.
  • Upload ≥ 15MB otomatis Multipart Upload.
  • Unduh memakai pre-signed URL (default 10 menit).
  • Contoh Lifecycle Policy (s3_lifecycle.php):
    • Prefix archive/ → pindah ke STANDARD_IA (30 hari) → GLACIER (90 hari) → expire 10 tahun.

8) Troubleshooting (Paling Umum)

A. 404 setelah deploy

  • Cek Document Root harus /public.
  • Pastikan semua file ZIP ter-ekstrak, bukan di subfolder ganda.

B. Tidak bisa login/register

  • Cek koneksi DB & ENV DB_*.
  • Pastikan db.sql sudah di-import tanpa error.

C. Upload gagal (“Gagal menyimpan file”/“Tipe tidak diizinkan”)

  • Periksa UPLOAD_MAX_BYTES dan whitelist MIME di config.php.
  • Jika pakai S3, cek bucket/endpoint/region/credential benar + composer install sudah jalan.

D. Viewer Office tidak muncul

  • File harus dipublikasikan agar dapat diakses Office Web Viewer.
  • Cek APP_BASEURL valid & bisa diakses publik (HTTPS disarankan).

E. XLSX viewer kosong/”Cannot parse”

  • Pastikan file benar-benar XLS/XLSX.
  • Tes Open Raw untuk memastikan file dapat diunduh normal.

F. Email tidak terkirim

  • Cek ENV SMTP_* dan port/firewall.
  • Periksa throttle: event bisa tertahan jika belum melewati NOTIFY_MIN_GAP_MIN.

G. “Admin only” saat buka admin page

  • Pastikan sudah set role admin via SQL sesuai email login.

H. S3 download redirect terus

  • Pre-signed URL kadaluarsa: reload halaman.
  • Cek jam server & integritas kredensial.
  • Untuk MinIO, gunakan S3_PATH_STYLE=true dan set S3_ENDPOINT (URL http/https).

I. Permission editor tidak bisa upload/delete

  • Pastikan folder memang dibagikan dengan role editor ke user tersebut.
  • Cek override deny di folder/subfolder terkait.
  • Cek kuota owner tidak habis.

J. Digest tidak terkirim

  • Cek cron sudah memanggil php digest_daily.php setelah jam DIGEST_HOUR.
  • SMTP harus aktif.

9) Keamanan & Best Practices

  • Jalankan di HTTPS.
  • Pertimbangkan CSRF token, rate limiting, captcha untuk produksi.
  • Tambahkan virus scan (ClamAV) bila menerima file dari publik.
  • Audit & rotate kredensial DB/SMTP/S3 secara berkala.

10) Pengembangan Lanjut (opsional)

  • Versioning file, rename/move, folder ACL UI penuh, full-text search (OCR + index).
  • Soft delete + recycle bin.
  • Two-factor auth (2FA) untuk admin.

11) Uji Cepat (Checklist)

  • Login/Registrasi OK
  • Buat Folder, Upload File (lokal/S3)
  • Preview PDF (PDF.js), Office, XLSX
  • Share publik (file+folder)
  • Share privat (viewer/editor), editor upload/delete OK
  • Quota bekerja (blocked jika over)
  • Admin: set quota/role OK
  • Audit Logs filter+CSV OK
  • Analytics grafik OK
  • Email event (throttle) & Daily Digest OK

Selamat menggunakan DewaDrive! 🚀

Konfigurasi Lengkap DewaDrive (Detail)

Panduan ini merangkum semua yang perlu dikonfigurasi sebelum dan sesudah deploy.

1) config.php

Nilai default membaca dari ENV. Contoh variabel penting:

<?php
$APP_NAME = "DewaDrive";
$UPLOAD_MAX_BYTES = getenv("UPLOAD_MAX_BYTES") ?: 10485760; // 10 MB
$USER_QUOTA_MB = getenv("USER_QUOTA_MB") ?: 512;
$APP_BASEURL = getenv("APP_BASEURL") ?: "http://localhost";
$STORAGE_DRIVER = getenv("STORAGE_DRIVER") ?: "local";

2) Environment Variables (ENV)

Set melalui panel Environment Variables di DewaCloud.

Database (wajib):

DB_HOST=...
DB_NAME=...
DB_USER=...
DB_PASS=...

Aplikasi:

APP_BASEURL=https://drive.domainmu.id
USER_QUOTA_MB=512
UPLOAD_MAX_BYTES=10485760

Storage Lokal (default):

STORAGE_DRIVER=local

S3 / MinIO / Wasabi (opsional):

STORAGE_DRIVER=s3
S3_KEY=...
S3_SECRET=...
S3_REGION=ap-southeast-1
S3_BUCKET=dewadrive-bucket
S3_ENDPOINT=https://s3.wasabisys.com   # kosongkan untuk AWS asli
S3_PATH_STYLE=true                     # true untuk MinIO

SMTP (opsional notifikasi):

SMTP_HOST=smtp.domainmu.id
SMTP_PORT=587
SMTP_USER=no-reply@domainmu.id
SMTP_PASS=...
SMTP_SECURE=tls
SMTP_FROM=no-reply@domainmu.id
SMTP_FROM_NAME=DewaDrive Notifier

Notifikasi & Digest:

NOTIFY_MIN_GAP_MIN=60   # throttle email per file/event (menit)
DIGEST_HOUR=07          # jam kirim daily digest (24h)

3) File Konfigurasi Tambahan

File Fungsi Catatan
config.php Konfigurasi aplikasi Membaca ENV otomatis
/public/.htaccess Proteksi & routing Jangan hapus
db.sql Schema & alter semua versi Wajib import awal
composer.json Dependency Jalankan composer install --no-dev -o
digest_daily.php Cron digest harian Jalankan 1x/hari
s3_lifecycle.php Contoh lifecycle S3 Opsional

4) Cron Job (opsional)

Contoh di DewaCloud (set sesuai path project):

php /var/app/current/digest_daily.php

Jalankan setelah jam DIGEST_HOUR.

5) Pengguna Admin

Setelah registrasi user pertama, jadikan admin via SQL:

UPDATE users SET role='admin' WHERE email='email_admin@domainmu.id';

Lalu buka /admin.php.

6) Checklist Konfigurasi

  • Import db.sql sukses (tanpa error)
  • ENV DB_* benar
  • composer install --no-dev -o sudah dijalankan
  • Document Root = /public
  • (Opsional) SMTP aktif
  • (Opsional) Cron digest_daily.php aktif
  • Admin user sudah di-set

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages