SSD Nodes Learn Hosting plans →
Panduan Matt ConnorOleh Matt Connor · Diperbarui 2026-08-07

Cara Memasang LAMP di Ubuntu 24.04 dengan PHP-FPM

Panduan memasang Apache, MariaDB, PHP 8.3 dengan PHP-FPM, virtual host berbasis nama, dan HTTPS gratis Let's Encrypt melalui Certbot di Ubuntu 24.04.

Yang akan Anda bangun

Stack LAMP terdiri atas empat komponen pada satu server Ubuntu 24.04: Linux sebagai fondasi, Apache yang menangani HTTP, MariaDB yang menyimpan data, dan PHP 8.3 yang menjalankan kode. Pada akhir tutorial ini, Anda akan memiliki virtual host berbasis nama yang menyajikan direktori aplikasi nyata, database dengan pengguna khusus berhak akses minimum, PHP yang terhubung ke Apache melalui PHP-FPM, serta sertifikat Let's Encrypt gratis.

Instalasi ini hanya memerlukan empat perintah apt. Hampir seluruh isi panduan ini membahas cara menghubungkan komponen-komponen tersebut dan sejumlah kecil kesalahan yang dapat membuat stack baru menampilkan halaman kosong, mengirimkan kode sumber ke browser sebagai unduhan, atau menolak akses Anda ke database yang baru saja diinstal. Setiap masalah tersebut memiliki ciri yang dapat Anda kenali. Di bawah ini, setiap masalah dijelaskan bersama teks persis yang akan Anda lihat.

Prasyarat dan hal penting yang perlu diketahui

Gunakan Ubuntu 24.04 KVM VPS baru dengan pengguna sudo atau root, serta alamat IPv4 publik. Stack minimal dapat berjalan dengan RAM 1 GB; gunakan 2 GB sebelum memasang aplikasi nyata yang menggunakan database, karena buffer default MariaDB dan beberapa worker PHP-FPM dapat menghabiskan gigabyte pertama dengan cepat.

Dua hal harus terpenuhi agar Certbot pada bagian akhir dapat berfungsi, jadi siapkan sekarang. Anda memerlukan nama domain dengan A record yang mengarah ke IP publik VPS. Let's Encrypt melakukan validasi melalui HTTP ke nama tersebut, dan alamat IP saja tidak pernah dapat memperoleh sertifikat. Port 80 dan 443 juga harus dapat dijangkau dari Internet. Pada banyak provider, Anda perlu membukanya di firewall jaringan pada panel kontrol serta di ufw pada server. Perubahan DNS dapat memerlukan waktu hingga satu jam untuk menyebar. Karena itu, buat A record terlebih dahulu agar sudah aktif saat diperlukan.

Langkah 1 - Instal Apache dan konfirmasikan halaman default

sudo apt update
sudo apt install -y apache2

apt akan menjalankan dan mengaktifkan service untuk Anda. Periksa statusnya:

systemctl status apache2

Anda harus melihat baris yang berbunyi active (running). Sekarang buka http://YOUR_SERVER_IP/ di browser. Apache2 Ubuntu Default Page dengan banner besar "It works!" adalah hasil yang benar. Halaman tersebut membuktikan bahwa Apache melayani permintaan, bukan menunjukkan kesalahan. Halaman itu berada di /var/www/html/index.html dan dilayani oleh virtual host default yang disertakan dalam rilis, yaitu 000-default.conf. Nanti Anda akan menonaktifkan keduanya. Untuk saat ini, keberadaan keduanya memang yang ingin Anda lihat.

Jika halaman sama sekali tidak dapat dimuat, tetapi systemctl menunjukkan bahwa proses sedang berjalan, berarti firewall menghalangi koneksi. Itu adalah langkah berikutnya.

Langkah 2 - Buka firewall untuk HTTP dan HTTPS

Paket apache2 mendaftarkan tiga profil aplikasi ufw. Tampilkan daftarnya:

sudo ufw app list

Anda akan melihat Apache, Apache Full, dan Apache Secure. Apache hanya untuk port 80, Apache Secure hanya untuk port 443, sedangkan Apache Full untuk keduanya. Gunakan profil tersebut karena Anda akan menambahkan TLS pada tahap akhir.

sudo ufw allow OpenSSH
sudo ufw allow "Apache Full"
sudo ufw enable

Izinkan OpenSSH sebelum menjalankan ufw enable. Secara default, ufw menolak semua trafik masuk. Jika Anda mengaktifkannya tanpa aturan SSH, koneksi Anda terputus saat firewall aktif. Sesi saat ini tetap berjalan, tetapi Anda tidak dapat tersambung kembali. Konfirmasikan dengan sudo ufw status. Pastikan OpenSSH, Apache Full, dan padanan v6-nya semuanya menunjukkan status ALLOW.

Langkah 3 - Instal MariaDB dan amankan

sudo apt install -y mariadb-server
systemctl status mariadb

Ubuntu 24.04 menyediakan MariaDB 10.11, yaitu rilis dengan dukungan jangka panjang, sehingga Anda tidak memerlukan repositori eksternal. Setelah service berjalan, perketat keamanannya:

sudo mysql_secure_installation

Baca setiap prompt dengan saksama dan jangan langsung menekan Enter berulang kali. Saat diminta current root password, tekan Enter karena belum ada password. Saat ditanya "Switch to unix_socket authentication?", jawabannya tidak mengubah apa pun karena fitur tersebut sudah diaktifkan pada package ini, jadi tekan n. Jawab n untuk "Change the root password?" sesuai alasan pada paragraf berikutnya. Setelah itu, jawab Y untuk pertanyaan lainnya: hapus pengguna anonim, larang login root dari jarak jauh, hapus database pengujian, dan muat ulang tabel privilege.

Bagian ini sering membingungkan. Pada MariaDB di Ubuntu, akun database root menggunakan autentikasi unix_socket, bukan password. Artinya, database mempercayai pengguna sistem operasi yang telah Anda autentikasi. Jadi, perintah berikut dapat dijalankan dari shell root:

sudo mysql

...dan Anda akan masuk ke prompt MariaDB [(none)]> tanpa diminta password. Perintah yang sama jika dijalankan oleh pengguna tanpa hak istimewa akan ditolak. Inilah tujuan utamanya: akses ke root database terikat pada sudo di server, dan tidak ada password yang dapat dicuri, dipancing melalui phishing, atau ditebak secara brute-force. Metode ini lebih aman daripada password, jadi biarkan konfigurasi tersebut. Aturan yang berlaku selanjutnya: jangan pernah mengarahkan aplikasi ke akun root. Buat pengguna khusus untuk setiap aplikasi (Langkah 7), karena aplikasi yang terhubung melalui TCP dengan username dan password tidak dapat menggunakan autentikasi socket. Selain itu, setiap aplikasi harus dibatasi hanya ke databasenya sendiri.

Langkah 4 - Instal PHP 8.3 dengan PHP-FPM

PHP default pada Ubuntu 24.04 adalah 8.3. Instal pengelola proses FPM dan ekstensi yang biasanya dibutuhkan aplikasi:

sudo apt install -y php8.3-fpm php8.3-mysql php8.3-cli \
  php8.3-curl php8.3-xml php8.3-mbstring php8.3-zip

Perhatikan yang tidak ada dalam daftar tersebut: libapache2-mod-php. Paket lama itu menyematkan interpreter PHP ke dalam setiap proses Apache. Konfigurasinya sederhana, tetapi setiap worker membawa salinan PHP, baik saat melayani skrip maupun gambar statis. Keduanya juga memiliki siklus hidup yang sama, dan konfigurasi tersebut hanya berfungsi dengan MPM prefork milik Apache, yang paling tidak efisien. Sebaliknya, PHP-FPM menjalankan PHP sebagai pool proses tersendiri yang diakses Apache melalui socket. Apache kemudian dapat menggunakan MPM event berbasis thread untuk file statis dan hanya meneruskan permintaan PHP. Pool tersebut dapat disetel secara terpisah dari web server, dan konfigurasi FPM yang sama dapat digunakan nanti jika Anda menempatkan nginx di depannya. Ini menjadi default saat ini karena alasan yang jelas.

Apache mengakses FPM melalui modul proxy_fcgi. Aktifkan modul tersebut, aktifkan konfigurasi yang dipasang oleh paket FPM, lalu restart:

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.3-fpm
sudo systemctl restart apache2

a2enconf php8.3-fpm mengaktifkan /etc/apache2/conf-available/php8.3-fpm.conf, yang berisi aturan untuk meneruskan file PHP ke socket FPM. Bagian utama aturan tersebut mencocokkan file .php apa pun dan meneruskannya ke socket di /run/php/php8.3-fpm.sock:

<FilesMatch ".+\.ph(ar|p|tml)$">
    SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost"
</FilesMatch>

Jangan mengedit file tersebut karena isinya sudah benar sejak paket dipasang. Namun, Anda perlu mengetahui path socket tersebut untuk mendiagnosis kegagalan "PHP terunduh, bukan dijalankan" dan "Skrip utama tidak dikenal" di kemudian hari. Keduanya terjadi karena Apache dan FPM menggunakan socket yang berbeda, atau tidak sepakat tentang file di balik socket tersebut.

Langkah 5 - Virtual host berbasis nama untuk aplikasi Anda

Virtual hosting berbasis nama memungkinkan satu IP melayani banyak situs. Apache memilih situs berdasarkan header Host: dalam request. Buat direktori untuk aplikasi, jauh dari /var/www/html default:

sudo mkdir -p /var/www/testapp
sudo chown -R www-data:www-data /var/www/testapp
sudo chmod -R 755 /var/www/testapp

Kepemilikan file penting. Apache dan PHP-FPM sama-sama berjalan sebagai user www-data di Ubuntu. Karena itu, file yang harus dibaca web server dan direktori yang harus ditulisi aplikasi, seperti folder upload, sebaiknya dimiliki oleh www-data. Jika Anda juga akan mengedit file sebagai user login, pola yang umum adalah memiliki file tersebut sendiri dan menambahkan user Anda ke grup www-data. Untuk deployment biasa, www-data:www-data adalah pilihan yang paling mudah dipahami.

Buat virtual host di /etc/apache2/sites-available/testapp.conf:

<VirtualHost *:80>
    ServerName app.example.com
    DocumentRoot /var/www/testapp

    <Directory /var/www/testapp>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/testapp-error.log
    CustomLog ${APACHE_LOG_DIR}/testapp-access.log combined
</VirtualHost>

Atur ServerName ke domain Anda yang sebenarnya. Options -Indexes mencegah Apache menampilkan isi direktori saat tidak ada file indeks. Tanpa pengaturan ini, pengunjung dapat menelusuri struktur sumber Anda. AllowOverride All memungkinkan file .htaccess berfungsi. Sebagian besar aplikasi PHP mengharapkannya untuk URL yang rapi. Ubah ke None untuk sedikit meningkatkan kecepatan jika aplikasi Anda tidak memerlukannya. Aktifkan situs ini, nonaktifkan situs default, periksa konfigurasi, lalu muat ulang:

sudo a2ensite testapp
sudo a2dissite 000-default
sudo apache2ctl configtest
sudo systemctl reload apache2

apache2ctl configtest seharusnya menampilkan Syntax OK. Baris a2dissite 000-default sering dilupakan. Karena itu, halaman default dapat tetap muncul pada langkah berikutnya, seperti dijelaskan di bagian kegagalan.

Langkah 6 - Buktikan PHP berjalan, lalu hapus buktinya

Buat file PHP satu baris di root aplikasi:

echo "<?php phpinfo();" | sudo tee /var/www/testapp/info.php

Buka http://app.example.com/info.php. Hasil yang benar adalah tabel PHP Version 8.3.x berwarna ungu dan abu-abu yang panjang, berisi daftar modul yang dimuat, dengan baris Server API bernilai FPM/FastCGI. Baris terakhir tersebut mengonfirmasi bahwa permintaan diproses melalui PHP-FPM, bukan mod_php.

Sekarang segera hapus file tersebut:

sudo rm /var/www/testapp/info.php

phpinfo() menampilkan versi PHP secara tepat, semua ekstensi yang dimuat, path file, dan detail lingkungan. Informasi ini dapat dimanfaatkan oleh pihak yang memindai server untuk mencari versi yang memiliki celah keamanan. File tersebut hanya untuk pengujian, bukan fitur aplikasi. Hapus segera setelah halaman terlihat. Jika browser justru menawarkan untuk mengunduh info.php, PHP belum terhubung ke Apache. Buka bagian kegagalan sebelum melakukan hal lain.

Langkah 7 - Buat database aplikasi dan pengguna dengan hak akses minimum

Buka database sebagai root yang diautentikasi melalui socket:

sudo mysql

Kemudian buat satu database dan satu pengguna yang cakupan aksesnya tepat pada database tersebut:

CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'a-long-random-password';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Ada tiga pilihan yang disengaja di sini. utf8mb4 adalah UTF-8 empat byte yang sebenarnya. Alias lama utf8 dapat diam-diam memotong emoji dan beberapa karakter CJK, jadi selalu gunakan utf8mb4. Grant diberikan pada appdb.*, bukan *.*: pengguna ini hanya dapat mengakses databasenya sendiri dan tidak dapat mengakses yang lain, sehingga celah SQL injection pada aplikasi tidak dapat membaca tabel situs lain. Selain itu, 'appuser'@'localhost' membatasi akun agar hanya menerima koneksi yang berasal dari mesin itu sendiri.

Uji sebagai pengguna tersebut:

mysql -u appuser -p appdb

Perintah ini meminta password dan menampilkan prompt MariaDB [appdb]>. Perhatikan bahwa tidak ada flag -h. Biarkan flag tersebut tetap tidak digunakan agar client terhubung melalui Unix socket lokal. Inilah yang dianggap MariaDB sebagai localhost. Ada satu hal penting: bagi MySQL dan MariaDB, localhost berarti Unix socket, sedangkan 127.0.0.1 berarti koneksi TCP. Pada MariaDB Ubuntu 24.04 standar, server masih memetakan koneksi TCP dari 127.0.0.1 kembali ke localhost. Karena itu, keduanya cocok dengan akun tersebut. Namun, pada server yang mengaktifkan skip-name-resolve—tuning performa yang umum dan konfigurasi standar pada banyak image container—keduanya dicocokkan sebagai host yang berbeda. Akibatnya, aplikasi yang terhubung ke 127.0.0.1 ditolak dengan ERROR 1045 (28000): Access denied for user 'appuser'@'127.0.0.1' (using password: YES) meskipun password benar.

Jadi, arahkan aplikasi ke host localhost, pengguna appuser, dan database appdb, bukan ke root. mysqli milik PHP dan PDO akan beralih ke Unix socket ketika host berupa string literal localhost. Ini cocok dengan akun yang baru saja dibuat. Jika framework mengharuskan host TCP numerik, buat pengguna yang sesuai dengan cara framework tersebut benar-benar terhubung, yaitu 'appuser'@'127.0.0.1' atau @'%' (disertai aturan firewall) hanya jika database memang harus diakses dari mesin lain.

Langkah 8 - Tambahkan HTTPS dengan Certbot

Menyajikan formulir login melalui HTTP biasa mengirimkan kata sandi dalam teks biasa, dan setiap browser modern menandai halaman tersebut sebagai "Tidak aman". Certbot mengatasi hal ini dengan satu perintah. Instal Certbot bersama plugin Apache:

sudo apt install -y certbot python3-certbot-apache
sudo certbot --apache

Certbot menggunakan dua plugin di sini. apache authenticator membuktikan bahwa Anda mengendalikan domain dengan menyajikan file challenge melalui Apache yang sedang berjalan untuk sementara, lalu apache installer menulis ulang virtual host untuk menambahkan blok 443, mengarahkannya ke sertifikat baru, dan secara default mengalihkan seluruh trafik HTTP ke HTTPS. Sejak Certbot 2.0, tidak ada pertanyaan tentang pengalihan; teruskan --no-redirect jika Anda perlu tetap menyajikan HTTP biasa. Karena Anda menetapkan ServerName yang valid pada Langkah 5, Certbot mendeteksi domain tersebut secara otomatis. Sertifikat berlaku selama 90 hari, dan paket ini memasang systemd timer untuk memperbaruinya; verifikasi timer tersebut dengan sudo certbot renew --dry-run, yang seharusnya diakhiri dengan Congratulations, all simulated renewals succeeded.

Untuk panduan lengkap tentang challenge, timer pembaruan, serta persyaratan DNS dan firewall, lihat panduan pendamping menerbitkan sertifikat TLS gratis Let's Encrypt dengan Certbot pada Apache.

Pencadangan, upgrade, dan hardening

Cadangkan dua hal yang menyimpan state Anda: database dan web root. Logical dump setiap malam adalah pendekatan andal yang paling sederhana, sudo sh -c 'mysqldump --all-databases --single-transaction | gzip > /root/db-$(date +%F).sql.gz', lalu salin hasilnya ke luar server. Bungkus seluruh pipeline dengan sudo sh -c karena tanpa itu shell menjalankan redirect > /root/... sebagai user Anda sendiri dan gagal dengan Permission denied. Hanya mysqldump yang mewarisi sudo. --single-transaction membuat snapshot tabel InnoDB yang konsisten tanpa menguncinya. Gabungkan dengan tar untuk /var/www dan /etc/apache2/sites-available agar Anda dapat membangun ulang seluruh stack pada VPS baru dari file-file tersebut.

Upgrade merupakan sudo apt update && sudo apt upgrade biasa. Hal yang dapat menimbulkan masalah adalah kenaikan versi PHP. Saat Ubuntu versi mendatang mengubah versi default ke PHP 8.4, apt mungkin menginstal php8.4-fpm berdampingan dengan 8.3. Socket berubah menjadi /run/php/php8.4-fpm.sock, sedangkan konfigurasi Apache Anda masih menunjuk ke socket 8.3. Aktifkan conf baru (sudo a2enconf php8.4-fpm) dan nonaktifkan yang lama. Jika tidak, situs Anda mulai mengembalikan Primary script unknown setelah upgrade rutin. Karena rilis PHP bergerak lebih cepat daripada distro LTS, periksa catatan rilis PHP saat ini, bukan menetapkan versi patch tertentu.

Dua langkah hardening layak dilakukan sejak hari pertama. Pertama, pasang Fail2Ban untuk memantau SSH pada server. VPS publik akan menerima percobaan login otomatis dalam hitungan menit. Jail sederhana dapat mengurangi ribuan percobaan menjadi hanya beberapa sebelum pemblokiran. Kedua, jika Anda lebih suka mengelola virtual host Apache, database MariaDB, dan user melalui browser daripada mengedit file secara manual, panel kontrol berbasis web Webmin berjalan di atas stack yang sama dan mengubah file konfigurasi yang baru saja Anda tulis. Keduanya tidak menggantikan pemahaman terhadap setiap komponen, tetapi dapat mengurangi pekerjaan rutin sehari-hari.

Mode kegagalan dan string yang akan Anda lihat

Halaman default tidak hilang. Anda mengedit virtual host, memuat ulang konfigurasi, tetapi browser masih menampilkan "Apache2 Ubuntu Default Page" dan banner "It works!". Apache melayani virtual host pertama yang cocok. Jika tidak ada ServerName yang cocok dengan permintaan, konfigurasi yang berada paling awal secara alfabetis akan digunakan; 000-default.conf berada sebelum testapp.conf dalam urutan tersebut. Nama host pada permintaan mungkin tidak cocok dengan ServerName, atau Anda belum menjalankan sudo a2dissite 000-default. Nonaktifkan konfigurasi default dengan sudo systemctl reload apache2, lalu konfirmasikan menggunakan apache2ctl -S. Perintah ini mencetak peta vhost dan menunjukkan konfigurasi yang memiliki default. Hapus juga cache browser. Respons 200 yang tersimpan dari halaman lama dapat tetap ditampilkan.

File .php diunduh, bukan dijalankan. Anda membuka info.php, tetapi browser mengunduh file yang berisi source <?php mentah atau menampilkannya sebagai teks biasa, bukan menjalankannya. Apache menyajikan file tersebut sebagai aset statis karena PHP handler belum terpasang, Anda melewati sudo a2enmod proxy_fcgi atau sudo a2enconf php8.3-fpm, atau Anda belum me-restart Apache. Jalankan ketiganya (Langkah 4), lalu muat ulang halaman. Pastikan modul telah dimuat menggunakan apache2ctl -M | grep fcgi. Perintah tersebut seharusnya menampilkan proxy_fcgi_module. Ini adalah kebocoran source code, bukan masalah tampilan, jadi perbaiki sebelum menempatkan data atau aplikasi sebenarnya di server.

ERROR 1698 (28000): Access denied for user 'root'@'localhost'. Anda menjalankan mysql -u root atau mariadb -u root tanpa sudo. Akun root menggunakan autentikasi unix_socket. Karena itu, akun tersebut hanya menerima koneksi jika pengguna OS Anda benar-benar root. Solusinya adalah sudo mysql, tanpa -u root dan tanpa password. Pesan ini merupakan perilaku yang diharapkan ketika autentikasi socket bekerja dengan benar, bukan tanda bahwa instalasi rusak.

ERROR 1045 (28000): Access denied for user 'appuser'@'127.0.0.1' dari aplikasi, meskipun password sudah benar. Akun tersebut ada sebagai 'appuser'@'localhost', tetapi aplikasi Anda terhubung melalui TCP ke 127.0.0.1 pada server yang menonaktifkan resolusi nama host (skip-name-resolve). Akibatnya, MariaDB mencocokkan keduanya sebagai host yang berbeda: localhost adalah Unix socket, sedangkan 127.0.0.1 adalah TCP. Arahkan aplikasi ke host localhost agar menggunakan socket dan mencocokkan akun tersebut, atau buat akun kedua 'appuser'@'127.0.0.1' jika framework hanya dapat menggunakan TCP.

AH01071: Got error 'Primary script unknown' di /var/log/apache2/testapp-error.log, sementara browser menampilkan File not found.. Apache meneruskan permintaan ke PHP-FPM, tetapi FPM tidak dapat menemukan script pada path yang diberikan Apache. Dua penyebab yang umum adalah socket FPM dalam konfigurasi menunjuk ke versi PHP yang tidak terpasang (socket php8.4 setelah upgrade, sementara yang berjalan hanya 8.3), atau file tersebut memang tidak ada karena DocumentRoot berbeda dari direktori sebenarnya. Periksa keberadaan socket menggunakan ls -l /run/php/, pastikan DocumentRoot sesuai dengan lokasi file, lalu restart php8.3-fpm dan apache2.

AH00558: apache2: Could not reliably determine the server's fully qualified domain name setiap kali restart. Ini adalah peringatan yang tidak berbahaya, bukan error. Apache memberi tahu bahwa ServerName global belum ditetapkan. Hilangkan peringatan tersebut dengan menulis ServerName your.domain ke dalam /etc/apache2/conf-available/servername.conf, lalu menjalankan sudo a2enconf servername.

(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80 saat Apache start. Web server lain sudah menggunakan port 80. Penyebab yang umum adalah nginx yang masih berjalan dari percobaan sebelumnya. Cari proses tersebut menggunakan sudo ss -ltnp | grep :80, lalu hentikan dan nonaktifkan service lain itu sebelum menjalankan Apache.

FAQ

mod_php atau PHP-FPM — mana yang harus saya gunakan?

Gunakan PHP-FPM. mod_php menyematkan interpreter ke setiap proses Apache dan memaksa penggunaan MPM prefork yang lambat. Akibatnya, Apache tetap menanggung overhead PHP bahkan saat hanya menyajikan gambar statis. PHP-FPM menjalankan PHP sebagai pool terpisah yang dapat disetel secara independen dan diakses Apache melalui socket. PHP-FPM juga bekerja dengan MPM event berbasis thread yang lebih cepat, serta dapat dipindahkan ke nginx nanti tanpa perubahan besar. PHP-FPM adalah pilihan standar modern. mod_php hanya masuk akal untuk aplikasi lama yang bergantung pada perilaku tertentu dalam proses Apache.

Mengapa browser mengunduh file PHP, bukan menjalankannya?

Apache memperlakukan file .php sebagai unduhan statis karena tidak ada handler PHP yang terpasang. Pada Ubuntu 24.04 dengan FPM, ini berarti Anda melewatkan salah satu dari sudo a2enmod proxy_fcgi, sudo a2enconf php8.3-fpm, atau restart Apache setelahnya. Jalankan ketiganya, lalu muat ulang konfigurasi. Setelah itu, verifikasi dengan apache2ctl -M | grep fcgi bahwa proxy_fcgi_module tercantum. Sebelum masalah ini diperbaiki, server membocorkan source code. Karena itu, tangani masalah ini segera.

Mengapa akses root ditolak di MariaDB meskipun password sudah benar?

Karena tidak ada password, MariaDB pada Ubuntu mengautentikasi account root melalui unix_socket. Mekanisme ini mengaitkannya dengan user root pada sistem operasi. mysql -u root dari shell biasa mengembalikan ERROR 1698 (28000): Access denied for user 'root'@'localhost' sesuai desain. Sebagai gantinya, sambungkan dengan sudo mysql. Buat user terpisah dengan autentikasi berbasis password untuk setiap aplikasi. Jangan gunakan kembali root.

Bagaimana cara menambahkan HTTPS ke situs LAMP saya?

Instal certbot dan python3-certbot-apache, arahkan A record domain ke server, lalu jalankan sudo certbot --apache. Apache authenticator membuktikan kontrol atas domain melalui Apache yang sedang berjalan. Installer kemudian menulis ulang virtual host untuk port 443 dan mengatur pembaruan otomatis. Panduan lengkap Certbot dan Apache membahas challenge, timer pembaruan, dan penyebab kegagalan yang umum.

#lamp#apache#mariadb#php-fpm#ubuntu