Berpandukan ArchWiki

Assalamu’alaikum.

LEMP dalam hantaran saya kali ini merangkumi empat komponen berikut:

  • L = Linux sebagai distro untuk membangunkan web ;
  • E = nginx sebagai pelayan (server) web HTTP ;
  • M = MariaDB sebagai pelayan pangkalan data ; &
  • P = PHP sebagai bahasa skrip yang dimasukkan ke dalam HTML.
"M" boleh juga merujuk kepada MySQL manakala "P" pula boleh merujuk kepada bahasa pengaturcaraan Python dan Perl.

Penulisan ini mengumpulkan konfigurasi untuk tiga kumpulan perisian yang tidak asing lagi digunakan dalam pembangunan aplikasi atau laman web dinamik (juga digelar sebagai “Back-end development”), iaitu nginx, PHP dan MariaDB.

PEMASANGAN


Pasang pakej-pakej berikut:

bash
sudo pacman -Rns nginx-mainline mariadb php-fpm php-gd php-sqlite

KONFIGURASI NGINX dan PHP


Penetapan untuk nginx dibuat agar dapat server ini berjalan tanpa keistimewaan (yakni sebagai pengguna biasa, bukan sebagi root).

  1. 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;
    
     # logging
     access_log  /var/log/nginx/access.log;
     error_log  /var/log/nginx/error.log warn;
    
     keepalive_timeout  65;
    
     server {
     	listen  8080;
    	server_name  localhost;
    	root  /home/<user>/.local/share/nginx/html;
    
    	location / {
    	    index  index.php index.html index.htm;
    	}
    
    	# redirect server error pages to the static page /50x.html
    	error_page  500 502 503 504  /50x.html;
    
    	# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    	location ~ [^/]\.(php|html|htm)(/|$) {
    	    # 404
    	    try_files  $fastcgi_script_name = 404;
    
    	    # default fastcgi_params
    	    include  fastcgi_params;
    
    	    # fastcgi settings
    	    fastcgi_pass  unix:/run/php-fpm/php-fpm.sock;
    	    fastcgi_index  index.php;
    	    fastcgi_buffers  8 16k;
    	    fastcgi_buffer_size  32k;
    
    	    # fastcgi params
    	    fastcgi_param  DOCUMENT_ROOT  $realpath_root;
    	    fastcgi_param  SCRIPT_FILENAME  $realpath_root$fastcgi_script_name;
    	    #fastcgi_param  PHP_ADMIN_VALUE  "open_basedir=$base/:/usr/lib/php/:/tmp/";
    	}
     }
    }
    Direktori-direktori projek ditempatkan di $HOME/.local/share/nginx/html. Gantikan <user> kepada nama pengguna pada baris root di bawah seksyen "server {".
  2. Tetapan untuk membenarkan server dijalankan sebagai pengguna biasa bagi nginx.

    bash
    sudo mkdir /etc/systemd/system/nginx.service.d

    Tambah fail berikut:

    /etc/systemd/system/nginx.service.d/user.conf
    [Service]
    User=<user>
    Group=<group>
    NoNewPrivileges=yes
    
    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> dan <group> kepada nama pengguna.
  3. Salin fail-fail HTML dari direktori /usr/share/nginx/html ke dalam direktori $HOME/.local/share/nginx/html.

  4. Mulakan dan benarkan servis nginx untuk berjalan secara automatik selepas boot.

    bash
    sudo systemctl enable --now nginx
  5. Buka pelayar web dan akses pautan http://localhost:8080/ untuk menyemak sama ada pemasangan pelayan nginx berjaya serta berlangsung seperti sepatutnya atau tidak. Jika mendarat di laman yang menyambut kedatangan anda ke pelayan web nginx, maka tahniah! Anda berjaya.

  6. Sunting fail seterusnya dengan menyahkomen baris-baris di bawah untuk PHP:

    /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
  7. Konfigurasi untuk membolehkan direktori data HTTP atau laman web diakses sebagai pengguna. Nyahkomen dan sunting baris-baris berikut:

    /etc/php/php-fpm.d/www.conf
    [www]
    user = <user>
    group = <group>
    
    listen.owner = <user>
    listen.group = <group>
    security.limit_extensions = .php .html .htm
    Tukarkan <user> dan <group> kepada nama pengguna.
  8. Buat satu fail PHP. Akses kepada fail ini akan membawa admin ke halaman maklumat PHP yang terpasang.

    $HOME/.local/share/nginx/html/info.php
    <?php phpinfo(); ?>
    
  9. Mulakan dan benarkan servis php-fpm untuk berjalan secara automatik selepas boot.

    bash
    sudo systemctl enable --now php-fpm 
  10. Akses pautan ini, http://localhost:8080/info.php untuk melihat kandungan maklumat tersebut. Sampel:

KONFIGURASI MARIADB


Saya ikuti saja mana-mana langkah relevan yang disarankan di halaman MariaDB - Archwiki, kecuali ada bahagian tertentu yang saya langkau seperti bab 3.3 sehingga 3.5 di bawah perkara keselamatan (tidak hanya terhad kepada bab ini).

Mulakan dan benarkan servis mariadb secara automatik selepas boot dengan arahan di bawah:

bash
sudo systemctl enable --now mariadb 
Langkah Tambahan
  1. Konfigurasi Firewall dengan UFW. Benarkan port 3306:

    bash
    sudo ufw allow 3306
  2. (Dalam kes menaik taraf) Sekiranya pengguna root didapati bermasalah, cipta semula pengguna tersebut.

    bash
    sudo mariadb -u root
    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;
  3. Untuk mengurus pangkalan data, saya selesa menggunakan cara di bawah:

    Mula-mula, log masuk sebagai pengguna mysql.

    bash
    sudo -su mysql

    Kemudian, jalankan mariadb sebagai root atau pengguna yang telah ditambah serta diberikan keistimewaan untuk mengakses pangkalan data. Contoh:

    bash
    mariadb -uroot -p

Alhamdulillah. Selesai sudah konfigurasi lengkap untuk pemasangan pelayan LEMP secara lokal di komputer peribadi. Bolehlah teruskan pula belajar membina pangkalan data dengan MariaDB dan bangunkan web melalui bahasa skrip PHP.

Sekian.


Kali terakhir dikemaskini:

Tentang Blog & Penulis

Topik perbincangan dalam blog ini merangkumi Linux & perisian sumber terbuka, Virtual Machine, serta Typesetting system.
Fokus semasa: Full Stack Development
Minat sampingan: Analisis Data
Bakat tersembunyi hamba: Menyanyi dan melukis.

Sumber dari Wallpaper Cave.