Lewati ke konten
TubePress — gratis, self-hosted & aktif dikembangkan
Referensi pengembang

Arsitektur

Tata letak inti, siklus hidup permintaan dan konvensi tanpa framework yang diikuti TubePress.

TubePress adalah perangkat lunak yang sengaja dirancang sederhana. Tidak ada framework, tidak ada container dependency-injection, dan tidak ada langkah build — hanya PHP modern yang terorganisir dengan baik menggunakan static class. Halaman ini menjelaskan bagaimana setiap bagian saling terhubung sehingga Anda dapat memperluas CMS dengan percaya diri dan tahu persis di mana kode Anda berada.

Filosofi desain

Tiga gagasan membentuk seluruh kode:

  • Tanpa framework. PHP murni dengan static class kustom. Tidak ada dependensi runtime Composer yang bisa bermasalah dan tidak ada yang perlu dipelajari selain PHP itu sendiri.
  • Core tetap, add-on bebas. Core dapat diperbarui dan tidak boleh diedit secara langsung. Semua kustomisasi Anda berada di tema, plugin, atau pengaturan.
  • Dirancang untuk skalabilitas dan hosting murah. Pekerjaan berat dipecah menjadi bagian-bagian kecil, dan pseudo-cron bawaan berarti tidak diperlukan sistem crontab.

Struktur direktori

Repositori memisahkan core (tetap, dapat diperbarui) dari add-on (diinstal dan dihapus oleh pengguna).

CORE — never modified by themes/plugins, replaced by updates
  config/            App config, DB config, install marker
  src/Core/          App, Database, Router, Pagination, CronManager,
                     and the managers (Seo, Transcode, Update, …)
  src/Auth/          Auth, Gate (permissions)
  src/Models/        Video, Category, Tag, Performer, Channel,
                     Comment, Page, User, Setting, Favorite, History
  src/Admin/         Admin CRUD controllers
  src/Front/         Public-facing controllers
  src/Install/       InstallController, Migrator
  src/Helpers/       Format, FileUpload, Sanitizer, Slug, SEO,
                     Player, RateLimiter, ImpressionTracker
  src/Plugin/        HookSystem, PluginInterface, PluginManager
  src/Theme/         ThemeManager, ThemeRenderer
  sql/               Numbered migrations (001_…sql → 0xx_…sql)
  templates/admin/   Admin panel templates (layout + partials)
  templates/install/ Install wizard templates
  public/            Web root — index.php, uploads/, symlinks
  cron/              Optional CLI scripts for a system crontab

ADD-ONS — installable / removable by users
  themes/            Theme directories (active: "simply")
  plugins/           Plugin directories (agegate, backup, ctr)
  lang/              Translation files (en, fr, de, es, ar, …)
Jangan pernah mengedit core untuk melakukan kustomisasi. Apa pun yang berada di bawah src/, config/, sql/ atau templates/ dapat ditimpa oleh pembaruan. Letakkan perubahan Anda di tema atau plugin agar tetap ada.

Siklus permintaan

Setiap permintaan mengalir melalui public/index.php dengan urutan yang sama:

  1. Penjaga versi PHP. config/php-guard.php berjalan pertama — sebuah gate yang aman dari parsing yang menghentikan boot pada versi PHP yang tidak didukung sebelum sintaks modern apa pun dimuat.
  2. Bootstrap. config/app.php menyiapkan autoloading, sesi, dan layanan inti.
  3. Pemeriksaan instalasi. Jika App::isInstalled() bernilai false (tidak ada config/installed.php), permintaan diarahkan ke wizard instalasi dan tidak ada yang dimuat lagi.
  4. Registrasi rute. Controller admin, API, dan front masing-masing mendaftarkan rutenya melalui metode static ::routes().
  5. Dispatch. Router::dispatch() mencocokkan URL dan memanggil metode controller.
  6. Render. Aksi admin merender templates/admin/*; aksi front merender tema aktif melalui ThemeRenderer::render().
  7. Pekerjaan pasca-render. Impresi dikirimkan dan CronManager::run() menjalankan tugas yang sudah jatuh tempo.

Rute halaman depan (catch-all /{slug} untuk halaman statis) didaftarkan terakhir, sehingga tidak pernah menutupi rute yang sebenarnya.

Konvensi core

KonsepKonvensi
ControllerAdminXxxController::routes() / FrontXxxController::routes() mendaftarkan rute; metode menangani permintaan.
ModelMetode static: Video::find($id), Video::all($filters), Video::create($data).
DatabaseDatabase::fetchOne(), fetchAll(), insert(), update(), delete(), count(), transaction().
RouterRouter::get(), Router::post(), Router::param('name'), Router::redirect().
Template adminRouter::render('admin/videos', […])templates/admin/videos.php (memuat layout.php + sebuah partial _videos.php).
Template frontThemeRenderer::render('home', […]) → template tema aktif + layout.php-nya.
Migrasisql/NNN_name.sql, dijalankan secara otomatis oleh Migrator::run() selama instalasi dan pembaruan.
HookHookSystem::doAction('event') dan HookSystem::applyFilter('filter', $value).

Dukungan web server

TubePress berjalan di Apache maupun Nginx:

  • Apache — file .htaccess menangani penulisan ulang URL dan proteksi direktori.
  • Nginx — direktif alias menyajikan aset dan aturan deny all melindungi jalur sensitif.
  • Symlinkpublic/themes → ../../themes dan public/templates → ../../templates mengekspos aset tema dan admin sambil menjaga sumber PHP di luar web root.

Web root selalu berupa public/. Semua yang sensitif — config/, src/, sql/, storage/ — berada di luar direktori tersebut dan juga diblokir di tingkat server.

Di mana melakukan kustomisasi

Anda ingin…Lakukan di…
Mengubah tampilan & tata letakSebuah tema (atau pengaturan Tampilan untuk perubahan tanpa kode)
Menambahkan fitur atau integrasiSebuah plugin menggunakan aksi & filter
Mengubah perilaku tanpa kodePengaturan
Menambahkan pekerjaan terjadwalCronManager, dari sebuah plugin

Langkah berikutnya

Masih kesulitan?

Buka tiket dari dasbor Anda dan tim kami akan membantu Anda.

Coba demo langsung → Unduh TubePress →