No description
  • PHP 63.5%
  • JavaScript 29.9%
  • HTML 5.8%
  • CSS 0.7%
  • Hack 0.1%
Find a file
2026-07-30 13:26:35 +07:00
app push backup 2026-07-30 13:26:35 +07:00
database push backup 2026-07-30 13:26:35 +07:00
public push backup 2026-07-30 13:26:35 +07:00
template/contoh1 push backup 2026-07-30 13:26:35 +07:00
tests push backup 2026-07-30 13:26:35 +07:00
writable push backup 2026-07-30 13:26:35 +07:00
.env.example push backup 2026-07-30 13:26:35 +07:00
.gitignore push backup 2026-07-30 13:26:35 +07:00
builds push backup 2026-07-30 13:26:35 +07:00
composer.json push backup 2026-07-30 13:26:35 +07:00
composer.lock push backup 2026-07-30 13:26:35 +07:00
env push backup 2026-07-30 13:26:35 +07:00
LICENSE push backup 2026-07-30 13:26:35 +07:00
phpunit.dist.xml push backup 2026-07-30 13:26:35 +07:00
PRD.md push backup 2026-07-30 13:26:35 +07:00
preload.php push backup 2026-07-30 13:26:35 +07:00
README.md push backup 2026-07-30 13:26:35 +07:00
spark push backup 2026-07-30 13:26:35 +07:00

CMS Pemerintah

Content Management System untuk website instansi pemerintah Indonesia.
Dibangun dengan CodeIgniter 4 + PostgreSQL + Tailwind CSS.


Product Requirements Document (PRD)

1. Executive Summary

CMS Pemerintah adalah platform pengelolaan konten web yang dirancang khusus untuk kebutuhan instansi pemerintah di Indonesia. Sistem ini memungkinkan pengelolaan berita, halaman statis, galeri media, album foto, video embed, berkas unduhan, FAQ, slide carousel, menu navigasi, dan pengaturan situs — semuanya melalui panel administrasi berbasis web.

2. Target Pengguna

Role Hak Akses
Admin Akses penuh: semua modul, manajemen pengguna, menu, halaman, pengaturan
Penulis Konten saja: berita, galeri media, album, video, unduhan, slide, FAQ

3. Fitur Utama

3.1 Modul Publik

Modul URL Publik Deskripsi
Berita /berita Artikel berita dengan kategori, arsip, RSS
Halaman Statis /halaman/{slug} Halaman konten dinamis dengan path kustom
Album Foto /album Galeri foto dengan lightbox modal
Video /video Embed YouTube, Instagram, TikTok
Unduh /download Berkas PDF, DOC, XLS, ZIP, PPT
FAQ (di beranda) Accordion expand/collapse
Slide Carousel (di beranda) Banner dengan auto-play, swipe, drag

3.2 Panel Admin (/admin)

Modul Fitur CRUD Toggle Status Pencarian Upload File
Dashboard
Berita
Galeri Media Upload/Hapus
Album Foto
Video
Unduh
Slide Carousel
FAQ
Pengguna
Menu Navigasi
Halaman
Kategori
Tautan
Pengaturan

3.3 Fitur Sistem

  • Autentikasi: Login/logout dengan role-based access (admin/penulis)
  • Rate Limiting: Max 3 percobaan login dalam 5 menit per IP
  • Remember Me: Cookie token 30 hari untuk auto-login
  • CSRF Protection: Token regenerasi setiap submit form
  • Visitor Tracking: Pencatatan kunjungan per halaman publik
  • SEO: Meta title, description, keywords per berita/halaman
  • RSS Feed: /feed untuk berita terbaru
  • Theme Picker: 9 tema warna header & footer
  • Webhook Deploy: POST /webhook?token=... untuk git pull + migrasi
  • 404 Custom: Halaman error yang rapi
  • Scroll to Top: Tombol floating di halaman publik
  • Reverse Proxy: Mendeteksi IP asli via X-Forwarded-For

4. Arsitektur Teknis

Layer Teknologi
Bahasa PHP 8.2+
Framework CodeIgniter 4.7
Database PostgreSQL 15+
Frontend Tailwind CSS v4 (CDN), DaisyUI, MDI Icons v7
Editor TinyMCE 8 (self-hosted), sweEditor
Map Leaflet.js + OpenStreetMap
Web Server FrankenPHP (Docker) + openresty reverse proxy

Pola Arsitektur

  • MVC — Model-View-Controller
  • Explicit Routing — Auto-routing dimatikan ($routes->setAutoRoute(false))
  • Auth Filter — Middleware before untuk semua route admin
  • 404 Override — Catch-all untuk halaman dengan path kustom

5. Struktur Database

Tabel Deskripsi
users Admin & penulis (bcrypt password)
categories Kategori berita
berita Artikel berita (tags, views)
galleries Galeri media (gambar)
menus Menu navigasi hierarkis
pages Halaman statis (slug + path)
settings Key-value pengaturan situs
links Tautan eksternal (logo)
visits Tracking kunjungan halaman
albums Album foto
album_photos Foto dalam album
videos Video embed (YouTube/IG/TikTok)
downloads Berkas unduhan
slides Slide carousel beranda
faqs FAQ accordion
login_throttle Rate limiting login

6. Endpoint API

Method Endpoint Deskripsi
GET /feed RSS berita terbaru
GET /api API publik (JSON)
GET /admin/galeri/json/:num JSON gallery pagination
GET /admin/profile/data JSON data profil user
POST /webhook?token=... Git deploy + migrasi

7. Keamanan

  • CSRF: Cookie-based, regenerate setiap submit
  • Password: bcrypt hashing via password_hash()
  • Input Validation: CI4 validation rules di semua form
  • SQL Injection: CI4 Query Builder (prepared statements)
  • XSS: esc() helper di semua output view
  • Rate Limiting: login_throttle table, max 3 attempt / 5 menit
  • Auth Filter: Middleware cek session & role
  • Reverse Proxy: proxyIPs config untuk X-Forwarded-For

Panduan Instalasi

Prasyarat

  • PHP 8.2+
  • PostgreSQL 15+
  • Composer
  • Git

Langkah Instalasi

# 1. Clone repository
git clone <repo-url>
cd CMS

# 2. Install dependencies
composer install

# 3. Salin dan sesuaikan environment
cp .env.example .env
# Edit .env: database credentials, WEBHOOK_TOKEN

# 4. Import database schema
psql -U postgres -d cms_pemerintah -f database/schema.sql

# 5. Jalankan migrations (jika ada yang belum)
# Migrations akan berjalan otomatis via webhook deploy

# 6. Set folder permissions
chmod -R 755 public/uploads
chmod -R 777 writable

# 7. Jalankan server
php spark serve
# atau gunakan FrankenPHP: ./frankenphp php-server

Default Login

Username Password Role
admin admin123 admin

Webhook Deploy

curl -X POST "https://domain.com/webhook?token=RAHASIA123"

Webhook akan menjalankan git pull, migrasi database, dan membersihkan direktori upload.


Struktur Direktori

CMS/
├── app/
│   ├── Config/         # Routes, Database, Security, Filters, dll
│   ├── Controllers/    # Admin (CRUD) + Public
│   ├── Filters/        # AuthFilter, ThrottleFilter
│   ├── Helpers/        # seo_helper (render_meta, tgl_indonesia)
│   ├── Models/         # 17 model files
│   └── Views/          # admin/ + public views
├── database/
│   ├── schema.sql      # Full DDL + seed data
│   └── migrations/     # Incremental SQL files (001-010)
├── public/
│   ├── index.php       # Entry point + CORS headers
│   ├── plugins/        # tinymce, sweeditor (self-hosted)
│   └── uploads/        # galeri, albums, downloads, settings, tautan
├── writable/           # logs, session, cache
├── .env.example        # Template environment
└── README.md           # Dokumentasi ini