Oke, kita mulai dari dashboard dasar dulu. Aku akan buatkan arsitektur sederhana untuk WHM custom dengan fitur utama seperti:
✅ Dashboard Admin (Statistik Akun Hosting)
✅ Manajemen Akun Hosting (Buat & Hapus Akun)
✅ Manajemen Domain (Tambahkan & Hapus Domain)
✅ Auto SSL (Let's Encrypt)
✅ Manajemen Database (MySQL)
✅ File Manager (Tiny File Manager)
✅ Sistem Login Admin
1️⃣ Struktur Folder & File
Buat folder utama whm-custom/ di server atau localhost, lalu buat struktur berikut:
whm-custom/
│── public/ # Folder untuk akses web
│ ├── index.php # Halaman Dashboard
│ ├── login.php # Halaman Login
│ ├── logout.php # Logout
│ ├── css/ # Folder CSS
│ ├── js/ # Folder JavaScript
│── admin/ # Folder untuk Admin
│ ├── dashboard.php # Dashboard Admin
│ ├── akun.php # Manajemen Akun
│ ├── domain.php # Manajemen Domain
│ ├── database.php # Manajemen Database
│── includes/ # Folder Fungsi Backend
│ ├── config.php # Konfigurasi Database
│ ├── functions.php # Fungsi WHM
│── scripts/ # Folder Shell Script
│ ├── create_account.sh # Script Buat Akun Hosting
│ ├── delete_account.sh # Script Hapus Akun
│ ├── add_domain.sh # Script Tambah Domain
│ ├── backup.sh # Script Backup
│── .htaccess # Redirect ke index.php
2️⃣ Buat Database & Konfigurasi
Buat database whm_db di MySQL dengan tabel users untuk login admin.
📌 Tabel Users (whm_db.users)
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE,
password VARCHAR(255),
role ENUM('admin', 'reseller') DEFAULT 'admin'
);
📌 File includes/config.php
<?php
$host = "localhost";
$user = "root";
$pass = "";
$dbname = "whm_db";
$conn = new mysqli($host, $user, $pass, $dbname);
if ($conn->connect_error) {
die("Koneksi gagal: " . $conn->connect_error);
}
?>
3️⃣ Halaman Login
📌 File public/login.php
<?php
session_start();
include '../includes/config.php';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
$stmt = $conn->prepare("SELECT * FROM users WHERE username=?");
$stmt->bind_param("s", $username);
$stmt->execute();
$result = $stmt->get_result();
if ($row = $result->fetch_assoc()) {
if (password_verify($password, $row['password'])) {
$_SESSION['user'] = $row['username'];
$_SESSION['role'] = $row['role'];
header("Location: dashboard.php");
exit;
} else {
$error = "Password salah!";
}
} else {
$error = "Username tidak ditemukan!";
}
}
?>
<form method="post">
<input type="text" name="username" placeholder="Username" required><br>
<input type="password" name="password" placeholder="Password" required><br>
<button type="submit">Login</button>
</form>
<?php if (isset($error)) echo "<p>$error</p>"; ?>
4️⃣ Dashboard Admin
📌 File admin/dashboard.php
<?php
session_start();
if (!isset($_SESSION['user'])) {
header("Location: ../public/login.php");
exit;
}
?>
<h1>Selamat Datang, <?php echo $_SESSION['user']; ?>!</h1>
<ul>
<li><a href="akun.php">Manajemen Akun</a></li>
<li><a href="domain.php">Manajemen Domain</a></li>
<li><a href="database.php">Manajemen Database</a></li>
<li><a href="../public/logout.php">Logout</a></li>
</ul>
5️⃣ Fungsi Membuat Akun Hosting
📌 File scripts/create_account.sh
#!/bin/bash
username=$1
password=$2
domain=$3
# Membuat akun user di Linux
useradd -m -s /bin/bash $username
echo "$username:$password" | chpasswd
# Membuat folder hosting
mkdir -p /var/www/$domain
chown -R $username:$username /var/www/$domain
# Menambahkan Virtual Host
echo "<VirtualHost *:80>
ServerName $domain
DocumentRoot /var/www/$domain
</VirtualHost>" > /etc/apache2/sites-available/$domain.conf
a2ensite $domain.conf
systemctl reload apache2
echo "Akun hosting untuk $username berhasil dibuat!"
📌 File includes/functions.php
<?php
function createAccount($username, $password, $domain) {
$cmd = "bash ../scripts/create_account.sh $username $password $domain";
$output = shell_exec($cmd);
return $output;
}
?>
📌 File admin/akun.php
<?php
include '../includes/functions.php';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
$domain = $_POST['domain'];
echo createAccount($username, $password, $domain);
}
?>
<form method="post">
<input type="text" name="username" placeholder="Username" required><br>
<input type="password" name="password" placeholder="Password" required><br>
<input type="text" name="domain" placeholder="Domain" required><br>
<button type="submit">Buat Akun Hosting</button>
</form>
6️⃣ Tambahkan SSL Otomatis
📌 File scripts/ssl.sh
#!/bin/bash
domain=$1
certbot --apache -d $domain --non-interactive --agree-tos -m admin@$domain
systemctl reload apache2
echo "SSL untuk $domain telah aktif!"
📌 File includes/functions.php (Tambahkan)
function enableSSL($domain) {
$cmd = "bash ../scripts/ssl.sh $domain";
return shell_exec($cmd);
}