Cara Install LAMP Stack di Ubuntu 24.04
Panduan instalasi Apache, MariaDB, dan PHP 8.3 dengan PHP-FPM di Ubuntu 24.04. Pelajari cara konfigurasi vhost dan SSL Certbot agar tidak muncul error akses.
Apa yang Anda bangun
LAMP stack terdiri dari empat komponen pada satu server Ubuntu 24.04: Linux sebagai sistem operasi, Apache untuk melayani HTTP, MariaDB untuk menyimpan data, dan PHP 8.3 untuk menjalankan kode. Pada akhir tutorial ini, Anda akan memiliki virtual host berbasis nama yang melayani direktori aplikasi, database dengan pengguna khusus dengan hak akses minimum, PHP yang terhubung ke Apache melalui PHP-FPM, dan sertifikat Let's Encrypt gratis.
Proses instalasi hanya memerlukan empat perintah apt. Hampir seluruh isi panduan ini membahas konfigurasi antar komponen, serta kesalahan umum yang menyebabkan stack baru menampilkan halaman kosong, mengunduh kode sumber ke browser, atau menolak akses ke database yang baru diinstal. Setiap kesalahan tersebut memiliki ciri khas yang dapat dikenali, dan masing-masing telah disebutkan di bawah ini dengan teks persis yang akan Anda lihat.
Prasyarat dan kendala yang perlu diperhatikan
Asumsikan Anda menggunakan VPS Ubuntu 24.04 KVM baru dengan pengguna sudo atau root, dan alamat IPv4 publik. Stack minimal berjalan pada RAM 1 GB; sediakan 2 GB sebelum Anda menjalankan aplikasi berbasis database yang nyata, karena buffer default MariaDB ditambah beberapa worker PHP-FPM akan menghabiskan 1 GB pertama dengan cepat.
Ada dua hal yang harus terpenuhi agar Certbot dapat berfungsi di akhir proses, jadi siapkan hal tersebut sekarang. Anda memerlukan nama domain dengan record A yang mengarah ke IP publik VPS — Let's Encrypt melakukan validasi melalui HTTP ke nama tersebut, dan alamat IP saja tidak akan pernah bisa mendapatkan sertifikat. Selain itu, port 80 dan 443 harus dapat diakses dari internet, yang pada banyak penyedia berarti Anda harus membukanya di firewall jaringan pada panel kontrol serta di ufw pada server. Perubahan DNS dapat memakan waktu hingga satu jam untuk propagasi, jadi atur record A terlebih dahulu agar sudah aktif saat Anda membutuhkannya.
Step 1 - Install Apache dan konfirmasi halaman default
sudo apt update
sudo apt install -y apache2apt akan menjalankan dan mengaktifkan layanan untuk Anda. Periksa dengan perintah:
systemctl status apache2Anda harus melihat baris yang berisi active (running). Sekarang buka http://YOUR_SERVER_IP/ di browser. Apache2 Ubuntu Default Page dengan spanduk besar "It works!" adalah hasil yang benar — ini membuktikan Apache sedang berjalan, bukan sebuah kesalahan. Halaman tersebut berada di /var/www/html/index.html dan disajikan oleh default virtual host bawaan 000-default.conf. Anda akan menonaktifkan keduanya nanti; untuk saat ini, keberadaan keduanya adalah hasil yang diharapkan.
Jika halaman tidak dapat dimuat sama sekali padahal systemctl menyatakan proses sedang berjalan, maka firewall menghalangi koneksi. Itu adalah langkah selanjutnya.
Step 2 - Buka firewall untuk HTTP dan HTTPS
Paket apache2 mendaftarkan tiga profil aplikasi ufw. Berikut adalah daftarnya:
sudo ufw app listAnda akan melihat Apache, Apache Full, dan Apache Secure. Apache hanya untuk port 80, Apache Secure hanya untuk port 443, dan Apache Full mencakup keduanya — inilah yang Anda butuhkan karena Anda akan menambahkan TLS di akhir.
sudo ufw allow OpenSSH
sudo ufw allow "Apache Full"
sudo ufw enableIzinkan OpenSSH sebelum Anda menjalankan ufw enable. ufw secara default menolak semua lalu lintas masuk, dan mengaktifkannya tanpa aturan SSH akan memutus koneksi Anda sendiri saat fitur tersebut aktif — sesi saat ini tetap berjalan tetapi Anda tidak akan bisa masuk kembali. Konfirmasi dengan sudo ufw status; pastikan OpenSSH, Apache Full, dan padanan v6 mereka semuanya terbaca ALLOW.
Step 3 - Instal MariaDB dan amankan
sudo apt install -y mariadb-server
systemctl status mariadbUbuntu 24.04 menyertakan MariaDB 10.11, sebuah rilis long-term-support, sehingga Anda tidak memerlukan repositori eksternal. Setelah layanan berjalan, lakukan pengamanan:
sudo mysql_secure_installationBacalah petunjuk yang muncul daripada langsung menekan Enter. Saat diminta current root password, tekan Enter karena belum ada kata sandi. Saat muncul pertanyaan "Switch to unix_socket authentication?", jawaban tidak akan mengubah apa pun karena fitur ini sudah aktif pada paket ini, jadi tekan n. Pilih n pada bagian "Change the root password?" karena alasan pada paragraf berikutnya, lalu jawab Y untuk sisanya: hapus pengguna anonim, larang login root jarak jauh, hapus database test, dan muat ulang tabel hak akses.
Bagian ini sering membingungkan. Pada MariaDB di Ubuntu, akun database root menggunakan autentikasi unix_socket, bukan kata sandi. Ini berarti database mempercayai pengguna operating-system yang sudah Anda autentikasi. Oleh karena itu, perintah ini berhasil dijalankan dari shell root:
sudo mysql...dan Anda akan masuk ke prompt MariaDB [(none)]> tanpa diminta kata sandi. Perintah yang sama jika dijalankan sebagai pengguna biasa akan ditolak, yang merupakan tujuan utamanya: akses ke root database terikat pada sudo di sistem, sehingga tidak ada kata sandi yang bisa dicuri, di-phish, atau di-brute-force. Metode ini lebih aman daripada kata sandi, jadi jangan diubah. Aturan yang berlaku adalah: jangan pernah mengarahkan aplikasi ke akun root. Buatlah pengguna khusus untuk setiap aplikasi (Step 7), karena aplikasi yang terhubung melalui TCP dengan nama pengguna dan kata sandi tidak dapat menggunakan autentikasi socket, dan Anda harus membatasi setiap aplikasi hanya pada databasenya sendiri.
Step 4 - Instal PHP 8.3 dengan PHP-FPM
PHP default pada Ubuntu 24.04 adalah 8.3. Instal process manager FPM dan ekstensi yang dibutuhkan aplikasi pada umumnya:
sudo apt install -y php8.3-fpm php8.3-mysql php8.3-cli \
php8.3-curl php8.3-xml php8.3-mbstring php8.3-zipPerhatikan apa yang tidak ada dalam daftar tersebut: libapache2-mod-php. Paket lama tersebut menyematkan interpreter PHP di dalam setiap proses Apache. Cara ini sederhana, tetapi setiap worker membawa salinan PHP baik saat melayani skrip maupun gambar statis. Keduanya berbagi siklus hidup yang sama, dan hanya berfungsi dengan MPM prefork milik Apache — yang paling tidak efisien. Sebaliknya, PHP-FPM menjalankan PHP sebagai kumpulan proses tersendiri yang berkomunikasi dengan Apache melalui socket. Apache kemudian dapat menggunakan MPM event yang berbasis thread untuk file statis dan hanya meneruskan permintaan PHP saja. Kumpulan proses ini dapat dioptimalkan secara independen dari web server, dan pengaturan FPM yang sama dapat digunakan jika Anda menggunakan nginx di depannya. Ini adalah standar default saat ini karena alasan yang kuat.
Apache terhubung ke FPM melalui modul proxy_fcgi. Aktifkan modul tersebut, aktifkan konfigurasi yang disertakan oleh paket FPM, lalu restart:
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.3-fpm
sudo systemctl restart apache2a2enconf php8.3-fpm mengaktifkan /etc/apache2/conf-available/php8.3-fpm.conf, yang berisi aturan untuk mengarahkan file PHP ke socket FPM. Inti dari aturan ini adalah mencocokkan setiap file .php 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>Anda tidak perlu mengedit file tersebut; file tersebut sudah benar. Namun, mengetahui jalur socket sangat penting untuk mendiagnosis kegagalan "PHP downloads instead of running" dan "Primary script unknown" di kemudian hari — keduanya terjadi karena Apache dan FPM tidak sepakat mengenai socket ini atau file di baliknya.
Step 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 permintaan. 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/testappKepemilikan sangat penting. Apache dan PHP-FPM sama-sama berjalan sebagai user www-data di Ubuntu, sehingga file yang harus dibaca web server — dan direktori yang harus ditulis oleh aplikasi, seperti folder uploads — harus dimiliki oleh www-data. Jika Anda juga akan mengedit file menggunakan user login Anda, pola yang umum adalah memiliki file tersebut sendiri dan menambahkan user Anda ke grup www-data; untuk deployment standar, www-data:www-data adalah pilihan yang paling aman.
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 asli Anda. Options -Indexes menghentikan Apache untuk menampilkan daftar direktori jika tidak ada file index — jika tidak, pengunjung dapat menelusuri struktur sumber kode Anda. AllowOverride All memungkinkan file .htaccess berfungsi, yang diharapkan oleh sebagian besar aplikasi PHP untuk URL yang rapi; hapus fitur ini di None untuk peningkatan kecepatan kecil jika aplikasi Anda tidak membutuhkannya. Aktifkan situs ini, nonaktifkan default, periksa konfigurasi, dan reload:
sudo a2ensite testapp
sudo a2dissite 000-default
sudo apache2ctl configtest
sudo systemctl reload apache2apache2ctl configtest harus mencetak Syntax OK. Baris a2dissite 000-default adalah bagian yang sering dilupakan, dan itulah penyebab halaman default tampak tetap muncul — dibahas di bagian kegagalan.
Step 6 - Buktikan PHP berjalan, lalu hapus buktinya
Buat file PHP satu baris di root aplikasi:
echo "<?php phpinfo();" | sudo tee /var/www/testapp/info.phpAkses http://app.example.com/info.php. Hasil yang benar adalah tabel PHP Version 8.3.x berwarna ungu-abu yang panjang yang mencantumkan modul yang dimuat, dengan baris Server API berisi FPM/FastCGI. Baris terakhir tersebut mengonfirmasi bahwa permintaan diproses melalui PHP-FPM, bukan mod_php.
Segera hapus file tersebut:
sudo rm /var/www/testapp/info.phpphpinfo() mengekspos versi PHP Anda secara spesifik, setiap ekstensi yang dimuat, jalur file, dan detail lingkungan — informasi ini sangat berbahaya bagi siapa pun yang memindai server untuk mencari versi dengan celah keamanan. Ini adalah tes, bukan fitur. Hapus file tersebut segera setelah Anda melihat halamannya. Jika browser Anda menawarkan untuk mengunduh info.php alih-alih menampilkan tabel, berarti PHP tidak terhubung ke Apache; segera beralih ke bagian kegagalan sebelum melakukan hal lain.
Step 7 - Buat database aplikasi dan user dengan hak akses minimum
Buka database sebagai root dengan autentikasi socket:
sudo mysqlKemudian buat satu database dan satu user yang cakupan hak aksesnya hanya untuk 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 sengaja di sini. utf8mb4 adalah UTF-8 empat-byte yang sebenarnya — alias utf8 yang lama akan memotong emoji dan beberapa karakter CJK secara diam-diam, jadi selalu gunakan utf8mb4. Hak akses diberikan pada appdb.*, bukan *.*: user ini hanya dapat mengakses databasenya sendiri dan tidak ada yang lain, sehingga celah SQL-injection pada aplikasi tidak dapat membaca tabel situs lain. Dan 'appuser'@'localhost' membatasi akun hanya untuk koneksi yang berasal dari mesin itu sendiri.
Uji sebagai user tersebut:
mysql -u appuser -p appdbSistem akan meminta kata sandi dan masuk ke prompt MariaDB [appdb]>. Perhatikan bahwa tidak ada flag -h — biarkan kosong agar client terhubung melalui Unix socket lokal, yang mana merupakan localhost bagi MariaDB. Satu hal penting untuk diketahui: bagi MySQL dan MariaDB, localhost berarti Unix socket dan 127.0.0.1 berarti koneksi TCP. Pada MariaDB standar di Ubuntu 24.04, server masih menganggap koneksi TCP dari 127.0.0.1 sama dengan localhost, sehingga keduanya cocok dengan akun tersebut — tetapi pada server dengan skip-name-resolve yang diaktifkan (optimasi performa umum, dan standar pada banyak image container), keduanya dianggap sebagai host yang berbeda, dan aplikasi yang memanggil 127.0.0.1 akan ditolak dengan ERROR 1045 (28000): Access denied for user 'appuser'@'127.0.0.1' (using password: YES) meskipun kata sandinya benar.
Jadi arahkan aplikasi Anda ke host localhost, user appuser, database appdb — jangan pernah ke root. mysqli milik PHP dan PDO keduanya beralih ke Unix socket ketika host adalah string literal localhost, yang cocok dengan akun yang baru saja Anda buat. Jika sebuah framework mewajibkan host TCP numerik, buatlah user yang sesuai dengan cara koneksi sebenarnya — 'appuser'@'127.0.0.1', atau @'%' (disertai aturan firewall) hanya jika aplikasi harus menjangkau database dari mesin lain.
Step 8 - Tambahkan HTTPS dengan Certbot
Menampilkan formulir login melalui HTTP biasa akan mengirimkan kata sandi dalam bentuk teks biasa, dan setiap browser modern akan menandai halaman tersebut sebagai "Not secure". Certbot dapat mengatasi hal ini dengan satu perintah. Instal Certbot menggunakan plugin Apache:
sudo apt install -y certbot python3-certbot-apache
sudo certbot --apacheCertbot menggunakan dua plugin di sini. apache authenticator membuktikan bahwa Anda mengontrol domain tersebut dengan menyajikan file tantangan (challenge file) secara singkat melalui Apache yang sedang berjalan. Kemudian, apache installer akan menulis ulang virtual host Anda untuk menambahkan blok 443, mengarahkannya ke sertifikat baru, dan mengalihkan semua lalu lintas HTTP ke HTTPS secara default — sejak Certbot 2.0, tidak ada pertanyaan mengenai pengalihan (redirect); gunakan flag --no-redirect jika Anda ingin tetap melayani HTTP biasa. Karena Anda telah mengatur ServerName yang asli pada Step 5, Certbot akan mendeteksi domain secara otomatis. Sertifikat berlaku selama 90 hari dan paket ini menginstal timer systemd untuk memperbaruinya secara otomatis; verifikasi timer tersebut dengan sudo certbot renew --dry-run, yang seharusnya berakhir pada Congratulations, all simulated renewals succeeded.
Untuk panduan lengkap mengenai tantangan, timer pembaruan, serta persyaratan DNS dan firewall, lihat panduan pendamping pada menerbitkan sertifikat TLS Let's Encrypt gratis dengan Certbot pada Apache.
Backups, upgrades, and hardening
Cadangkan dua komponen yang menyimpan status sistem Anda: database dan web root. Melakukan logical dump setiap malam adalah pendekatan paling sederhana dan andal — gunakan sudo sh -c 'mysqldump --all-databases --single-transaction | gzip > /root/db-$(date +%F).sql.gz', lalu salin ke luar server. Menggunakan sudo sh -c pada seluruh alur kerja sangat penting: tanpa ini, shell akan menjalankan redirect > /root/... sebagai user Anda sendiri dan gagal dengan Permission denied, karena hanya mysqldump yang mewarisi sudo. --single-transaction memberikan snapshot tabel InnoDB yang konsisten tanpa mengunci tabel tersebut. Gabungkan dengan tar dari /var/www dan /etc/apache2/sites-available, maka Anda dapat membangun ulang seluruh stack pada VPS baru menggunakan file-file tersebut.
Upgrade adalah proses sudo apt update && sudo apt upgrade yang biasa. Masalah utama muncul saat kenaikan versi PHP — ketika Ubuntu di masa mendatang mengubah 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 mengarah ke socket 8.3. Aktifkan konfigurasi baru (sudo a2enconf php8.4-fpm) dan nonaktifkan yang lama, atau situs Anda akan mulai menampilkan Primary script unknown setelah proses upgrade rutin. Karena rilis PHP lebih cepat daripada distro LTS, periksa catatan rilis PHP terbaru daripada mengunci versi patch tertentu.
Dua langkah hardening perlu dilakukan pada hari pertama. Pertama, pasang Fail2Ban untuk memantau SSH pada server — VPS publik akan menerima upaya login otomatis dalam hitungan menit, dan jail kecil dapat mengubah ribuan percobaan menjadi hanya beberapa saja sebelum pemblokiran dilakukan. 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 bekerja di atas stack yang sama dan mengelola file konfigurasi yang sama dengan yang baru saja Anda tulis. Keduanya tidak menggantikan pemahaman Anda terhadap komponen sistem, tetapi keduanya mengurangi hambatan operasional sehari-hari.
Mode kegagalan, dengan string yang akan Anda lihat
Halaman default tidak hilang. Anda telah mengedit virtual host, melakukan reload, namun browser tetap menampilkan "Apache2 Ubuntu Default Page" beserta banner "It works!". Apache melayani virtual host pertama yang cocok, dan jika tidak ada ServerName yang cocok dengan permintaan, konfigurasi pertama secara alfabetis yang akan digunakan — 000-default.conf diurutkan sebelum testapp.conf. Nama host pada permintaan tidak cocok dengan ServerName Anda, atau Anda belum menjalankan sudo a2dissite 000-default. Nonaktifkan default, sudo systemctl reload apache2, dan konfirmasi dengan apache2ctl -S, yang akan mencetak peta vhost dan menunjukkan konfigurasi mana yang menguasai default. Bersihkan juga cache browser; status 200 yang tersimpan dari halaman lama akan tetap muncul.
File .php terunduh alih-alih dijalankan. Anda membuka info.php dan browser mengunduh file berisi kode sumber <?php mentah, atau menampilkannya sebagai teks biasa, alih-alih menjalankannya. Apache melayani file tersebut sebagai aset statis karena handler PHP tidak terpasang — Anda melewatkan sudo a2enmod proxy_fcgi, atau sudo a2enconf php8.3-fpm, atau tidak memulai ulang Apache setelahnya. Jalankan ketiganya (Langkah 4) dan muat ulang. Konfirmasi bahwa modul telah dimuat dengan apache2ctl -M | grep fcgi, yang seharusnya mencantumkan proxy_fcgi_module. Ini adalah kebocoran kode sumber, bukan bug kosmetik, jadi perbaiki sebelum menempatkan data asli 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, sehingga hanya menerima Anda jika pengguna OS Anda adalah root. Solusinya adalah sudo mysql — tanpa -u root, tanpa kata sandi. Pesan ini adalah perilaku normal dari autentikasi socket yang bekerja dengan benar, bukan instalasi yang rusak.
ERROR 1045 (28000): Access denied for user 'appuser'@'127.0.0.1' dari aplikasi, dengan kata sandi yang benar. Akun tersebut ada sebagai 'appuser'@'localhost', tetapi aplikasi Anda terhubung melalui TCP ke 127.0.0.1 pada server dengan resolusi nama host yang dinonaktifkan (skip-name-resolve), sehingga MariaDB menganggap keduanya sebagai host yang berbeda — localhost adalah Unix socket, 127.0.0.1 adalah TCP. Arahkan aplikasi ke host localhost agar menggunakan socket dan cocok dengan akun tersebut, atau buat akun kedua 'appuser'@'127.0.0.1' jika framework hanya mendukung TCP.
AH01071: Got error 'Primary script unknown' di /var/log/apache2/testapp-error.log, dengan browser menampilkan File not found.. Apache menyerahkan permintaan ke PHP-FPM, tetapi FPM tidak dapat menemukan skrip pada jalur yang diberikan Apache. Dua penyebab umum: socket FPM dalam konfigurasi Anda mengarah ke versi PHP yang tidak terinstal (socket php8.4 setelah upgrade saat hanya versi 8.3 yang berjalan), atau file memang tidak ada karena DocumentRoot dan direktori asli tidak sesuai. Periksa apakah socket tersedia dengan ls -l /run/php/, konfirmasi DocumentRoot sesuai dengan lokasi file, dan mulai ulang php8.3-fpm serta apache2.
AH00558: apache2: Could not reliably determine the server's fully qualified domain name pada setiap restart. Ini adalah peringatan yang tidak berbahaya, bukan error — Apache memberi tahu Anda bahwa tidak ada ServerName global yang diatur. Hilangkan peringatan ini dengan menulis ServerName your.domain ke dalam /etc/apache2/conf-available/servername.conf dan menjalankan sudo a2enconf servername.
(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80 saat Apache dimulai. Web server lain sudah menggunakan port 80 — sering kali merupakan nginx yang tersisa dari eksperimen sebelumnya. Temukan dengan sudo ss -ltnp | grep :80, lalu hentikan dan nonaktifkan layanan lain tersebut sebelum menjalankan Apache.
FAQ
mod_php atau PHP-FPM - mana yang harus saya gunakan?
Gunakan PHP-FPM. mod_php menyematkan interpreter ke dalam setiap proses Apache dan memaksa penggunaan MPM prefork yang lambat, sehingga Apache menanggung beban overhead PHP meskipun hanya melayani gambar statis. PHP-FPM menjalankan PHP sebagai pool terpisah yang dapat diatur secara independen, diakses Apache melalui socket, bekerja dengan MPM event yang berbasis thread dan lebih cepat, serta dapat dipindahkan ke nginx tanpa perubahan. Ini adalah standar modern; mod_php hanya relevan untuk aplikasi lama yang bergantung pada perilaku in-process tertentu.
Mengapa browser saya mengunduh file PHP alih-alih menjalankannya?
Apache memperlakukan file .php sebagai unduhan statis karena tidak ada handler PHP yang terpasang padanya. 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, kemudian verifikasi dengan apache2ctl -M | grep fcgi bahwa proxy_fcgi_module sudah terdaftar. Sebelum diperbaiki, server Anda membocorkan kode sumber, jadi tangani masalah ini dengan segera.
Mengapa akses root ditolak di MariaDB meskipun menggunakan kata sandi yang benar?
Karena tidak ada kata sandi — MariaDB pada Ubuntu mengautentikasi akun root menggunakan unix_socket, yang menghubungkannya dengan user root sistem operasi. mysql -u root dari shell biasa akan mengembalikan ERROR 1698 (28000): Access denied for user 'root'@'localhost' secara desain. Gunakan sudo mysql sebagai gantinya, dan buatlah user dengan autentikasi kata sandi terpisah untuk setiap aplikasi daripada menggunakan 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. Autentikator Apache membuktikan kontrol domain melalui Apache yang sedang berjalan dan installer akan menulis ulang virtual host untuk port 443 serta mengatur pembaruan otomatis. Panduan lengkap Certbot dan Apache membahas tentang tantangan tersebut, timer pembaruan, dan mode kegagalan yang umum terjadi.