Konfigurasi LEMP dalam Arch Linux
Berpandukan ArchWiki
Assalamu’alaikum.
LEMP
dalam catatan ini merangkumi empat komponen berikut:
- L =
Linux
sebagai sistem operasi dan distro utama pembangunan web ; - E =
nginx
sebagai pelayan (server) web HTTP ; - M =
MariaDB
sebagai pelayan pangkalan data ; & - P =
PHP
sebagai 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:
bash
sudo pacman -S nginx-mainline mariadb php-fpm php-gd php-sqlite
Konfigurasi Nginx dan PHP
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.
Sunting fail konfigurasi
nginx
:/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; }
Tambahkan konfigurasi server :
/etc/nginx/sites-available/localhost
server { listen 80; server_name localhost; # Security Headers add_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"; 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; }
Direktori-direktori projek ditempatkan di$HOME/webdev
. Gantikan <user> kepada nama pengguna pada barisroot
di bawah blok"server {
".Aktifkan konfigurasi tersebut:
/etc/nginx/nginx.conf
sudo ln -s /etc/nginx/sites-available/localhost /etc/nginx/sites-enabled/
Jalankan
Nginx
sebagai pengguna biasa.bash
sudo mkdir /etc/systemd/system/nginx.service.d
Tambah fail berikut:
/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=nginx
Tukarkan <user> kepada nama pengguna.Salin fail-fail
HTML
dari/usr/share/nginx/html
ke 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 nginx
Akses http://localhost/ dari pelayar untuk pengesahan.
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_Lumpur
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 security.limit_extensions = .php .html .htm
Tukarkan <user> kepada nama pengguna.Buat fail info PHP:
$HOME/webdev/info.php
<?php phpinfo(); ?>
Mulakan servis:
bash
sudo systemctl enable --now php-fpm
Layari: 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:
bash
sudo systemctl enable --now mariadb
Konfigurasi Tambahan (Opsyenal)
- Benarkan port
3306
untuk akses luar:bash
sudo ufw allow 3306
Troubleshooting
Jika
root
bermasalah, jalankan operasi berikut:bash
sudo mariadb -uroot
sql
DROP 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:
bash
sudo chown -R "$USER":http /home/<user>/webdev
(Opsyenal) Tambah hak akses spesifik:
bash
sudo 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.