Episode ini merangkai LEMP stack di Alpine: nginx sebagai web server, PHP-FPM untuk aplikasi PHP, serta MariaDB, PostgreSQL, atau SQLite sebagai basis data. Kalian belajar instalasi via apk, konfigurasi virtual host, dan mengelola semua service memakai OpenRC.

Salah satu penggunaan Alpine yang paling umum adalah menjalankan aplikasi web. Episode 11 merangkai LEMP stack — Linux, nginx, MySQL/MariaDB, dan PHP — sepenuhnya di Alpine dengan OpenRC sebagai pengelola service.
Dibandingkan distro lain, merangkai LEMP di Alpine terasa ringan dan cepat: semua komponen tersedia di repository main dan community, konfigurasi berbasis teks sederhana, dan footprint totalnya jauh lebih kecil. Kalian akan membangun stack lengkap dari nol sampai aplikasi PHP pertama terlihat di browser.
Install nginx dan aktifkan:
apk add nginx
rc-service nginx start
rc-update add nginx defaultFile konfigurasi utama ada di /etc/nginx/http.d/ dan /etc/nginx/nginx.conf. Buat virtual host pertama:
server {
listen 80;
server_name app.example.com;
root /var/www/app;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}Cek syntax lalu reload:
nginx -t
rc-service nginx reloadnginx -t memvalidasi seluruh konfigurasi sebelum diterapkan.
Alpine menyediakan beberapa versi PHP: php81, php82, php83, dan php84. Untuk rilis 3.24, gunakan yang terbaru:
apk add php84-fpm php84-mysqli php84-opcache
rc-service php-fpm84 start
rc-update add php-fpm84 defaultService FPM mendengarkan di port 9000, sesuai fastcgi_pass 127.0.0.1:9000 pada virtual host di atas. Buat file uji:
mkdir -p /var/www/app
printf '%s\n' '<?php phpinfo(); ?>' > /var/www/app/index.php
chown -R nginx:nginx /var/www/appLalu cek hasilnya:
curl -I http://localhost/
curl -s http://localhost/ | head -5Output curl -I http://localhost/ menampilkan header HTTP; jika header memuat 200 OK, nginx dan PHP-FPM sudah tersambung.
Pilihan database tergantung kebutuhan aplikasi:
apk add mariadb mariadb-client
apk add postgresql16 postgresql16-client
apk add sqliteUntuk MariaDB, siapkan direktori data lalu aktifkan service:
mysql_install_db --user=mysql --datadir=/var/lib/mysql
rc-service mariadb start
rc-update add mariadb default
mysql_secure_installationmysql_secure_installation mengunci instalasi awal: set password root, hapus user anonim, dan matikan database test. Untuk PostgreSQL:
rc-service postgresql start
rc-update add postgresql default
su postgres -c "psql -c \"CREATE USER app WITH PASSWORD 'rahasia';\""
su postgres -c "psql -c \"CREATE DATABASE appdb OWNER app;\""Perintah su postgres -c "psql ..." menjalankan psql sebagai user postgres, sesuai konvensi PostgreSQL.
Urutan boot yang benar memengaruhi keandalan stack. Pastikan database mulai lebih dulu, lalu aplikasi:
rc-update show
rc-statusSemua service — mariadb, php-fpm84, dan nginx — harus berada di runlevel default. Uji stack secara menyeluruh:
curl -s -o /dev/null -w "%{http_code}\n" http://localhost/index.php
mysql -u app -p -e "SELECT 1;"Output curl -s -o /dev/null -w "%{http_code}\n" menampilkan kode status HTTP, misalnya 200. Kalau 500, periksa error log:
tail -20 /var/log/nginx/error.log
tail -20 /var/log/php-fpm.logTip
Jangan install beberapa versi PHP sekaligus — konflik port dan service FPM akan membuat kalian bingung. Pilih satu versi dan install ekstensi yang konsisten dengan versinya, seperti php84-* untuk PHP 8.4.
Episode 11 merangkai LEMP stack lengkap di Alpine: nginx dengan virtual host, PHP-FPM dengan ekstensi, MariaDB dan PostgreSQL sebagai opsi database, serta pengelolaan semua service dengan OpenRC.
Inti yang harus dibawa pulang:
Di episode 12 selanjutnya kita akan membahas kernel dan manajemen kernel — perbedaan linux-lts dan linux-stable, perintah uname untuk verifikasi, pengelolaan modul dengan modprobe dan lsmod, serta parameter boot lewat GRUB dan efibootmgr.