Konfigurasi LEMP dalam Arch Linux
Berpandukan ArchWiki
Assalamu’alaikum.
LEMP dalam catatan ini merangkumi empat komponen berikut:
- L =
Linuxsebagai sistem operasi dan distro utama pembangunan web ; - E =
nginxsebagai pelayan (server) web HTTP ; - M =
MariaDBsebagai pelayan pangkalan data ; & - P =
PHPsebagai bahasa skrip yang digunakan dalam pembangunan laman web dinamik.
MySQL, manakala "P" boleh merujuk kepada bahasa lain seperti Python atau Perl dalam konteks tertentu.Penulisan ini menghimpunkan konfigurasi tiga komponen penting dalam pembangunan aplikasi web dinamik (juga dikenali sebagai “back-end development”), iaitu Nginx, PHP dan MariaDB.
Pemasangan
Pasang pakej-pakej berikut:
bashsudo pacman -S nginx-mainline mariadb php-fpm php-gd php-sqliteKonfigurasi Nginx dan PHP
Nginx
Tujuan konfigurasi ini adalah untuk membolehkan pelayan Nginx dijalankan sepenuhnya oleh pengguna biasa tanpa memerlukan keistimewaan root, termasuklah akses kepada direktori laman web dan fail log.
nginx.conf
/etc/nginx/nginx.conf#user http;
worker_processes auto;
worker_cpu_affinity auto;
# Load all installed modules
include modules.d/*.conf;
events {
worker_connections 1024;
}
http {
charset utf-8;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
server_tokens off;
log_not_found off;
types_hash_max_size 4096;
server_names_hash_bucket_size 128;
client_max_body_size 16M;
# MIME
include mime.types;
default_type application/octet-stream;
# Enable all configs from sites-enabled/
include /etc/nginx/sites-enabled/*;
# logging
access_log /var/log/nginx/_access.log;
error_log /var/log/nginx/_error.log warn;
keepalive_timeout 65;
}Buat Snippet untuk Konfigurasi Umum “Security Headers”
/etc/nginx/snippets/security-headers.confadd_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header Referrer-Policy "no-referrer-when-downgrade";localhost.conf
/etc/nginx/sites-available/localhost.confserver {
listen 80;
server_name localhost;
# Security Headers
include snippets/security-headers.conf;
root /home/<user>/webdev;
index index.html index.htm;
location ~ \.(php|html?|htm)$ {
try_files $uri =404;
# fastcgi settings
include fastcgi_params;
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
}
# Avoid directory listing
location / {
try_files $uri $uri/ =404;
autoindex off;
}
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
error_log /var/log/nginx/localhost_error.log;
access_log /var/log/nginx/localhost_access.log;
}$HOME/webdev. Gantikan <user> kepada nama pengguna pada baris root.Aktifkan konfigurasi tersebut:
bashsudo ln -s /etc/nginx/sites-available/localhost.conf /etc/nginx/sites-enabled/user.conf
/etc/systemd/system/nginx.service.d/user.conf[Service]
User=<user>
Group=http
NoNewPrivileges=yes
CapabilityBoundingSet=
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=
AmbientCapabilities=CAP_NET_BIND_SERVICE
RuntimeDirectory=nginx
PIDFile=/run/nginx/nginx.pid
ExecStart=
ExecStart=/usr/bin/nginx -g 'pid /run/nginx/nginx.pid; error_log stderr;'
ExecReload=
ExecReload=/usr/bin/nginx -s reload -g 'pid /run/nginx/nginx.pid; error_log stderr;'
StateDirectory=nginx
LogsDirectory=nginxSalin fail-fail
HTMLdari/usr/share/nginx/htmlke dalam direktori$HOME/webdev.Mulakan servis.
bash# Semak status fail konfigurasi sudo nginx -t # Jika konfigurasi berjaya, anda akan melihat mesej seperti ini: #nginx: the configuration file /etc/nginx/nginx.conf syntax is ok #nginx: configuration file /etc/nginx/nginx.conf test is successful sudo systemctl enable --now nginxAkses http://localhost/ dari pelayar untuk pengesahan.
PHP
Konfigurasi
PHP. Nyahkomen baris-baris di bawah:/etc/php/php.ini[PHP] display_errors = On ... extension=gd extension=mysqli extension=pdo_mysql extension=pdo_sqlite extension=sqlite3 ... [Date] date.timezone = Asia/Kuala_LumpurKonfigurasi
PHP-FPM. Nyahkomen dan sunting baris-baris dari fail berikut:/etc/php/php-fpm.d/www.conf[www] user = <user> group = http listen.owner = <user> listen.group = http listen.mode = 0660 security.limit_extensions = .php .html .htmTukarkan <user> kepada nama pengguna.Buat fail info PHP:
$HOME/webdev/info.php<?php phpinfo(); ?>Mulakan servis:
bashsudo systemctl enable --now php-fpmLayari: http://localhost/info.php

Konfigurasi MariaDB
Ikuti panduan rasmi MariaDB di ArchWiki. Langkau bab berkaitan keselamatan (bab 3.3 - 3.5) jika perlu.
Mulakan servis:
bashsudo systemctl enable --now mariadb Konfigurasi Tambahan (Opsyenal)
- Benarkan port
3306untuk akses luar:bashsudo ufw allow from 192.168.0.0/24 to any port 3306 proto tcp
Penyelesaian Masalah
Jika gagal log masuk ke
MariaDBsebagai penggunaroot, besar kemungkinan akaunroottelah terjejas oleh proses terdahulu, atauplugin unix_socketsedang digunakan bagi pengesahan. Isu ini boleh diselesaikan melalui langkah berikut:bashsudo mariadb -urootsqlDROP USER 'root'@'localhost'; CREATE USER 'root'@'localhost' IDENTIFIED BY 'new_password'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;Akses sebagai root:
sudo mariadb -uroot -p
Tips Pengurusan Fail
Tetapkan pemilikan direktori:
bashsudo chown -R "$USER":http /home/<user>/webdev(Opsyenal) Tambah hak akses spesifik:
bashsudo setfacl -R -m u:http:rwx /home/<user>/webdev
Alhamdulillah, selesai sudah konfigurasi pelayan LEMP secara lokal. Bolehlah bersedia membina laman web dan aplikasi menggunakan PHP dan MariaDB.
Sekian.
