GNU/Linux >> Belajar Linux >  >> Ubuntu

Instal Nginx, MySQL, PHP (LEMP Stack) Di Ubuntu 20.04 LTS

Dalam tutorial kami sebelumnya, kami membahas cara menginstal tumpukan LAMP di Ubuntu 20.04 LTS server. Dalam tutorial ini, kita akan melihat cara menginstal Nginx, MySQL, PHP (LEMP stack) di Ubuntu 20.04 LTS server edition. LEMP adalah singkatan dari L inux, En gine-x, M ariaDB/L ySQL, P HP/P erl/P ython.

Instal Nginx, MySQL, PHP (LEMP Stack) di Ubuntu 20.04 LTS

Untuk tujuan tutorial ini, saya akan menggunakan mesin uji berikut:

  • Sistem Operasi :Server Ubuntu 20.04 LTS
  • Alamat IP :192.168.225.52/24

Mari kita mulai.

1. Instal Nginx Di Ubuntu

Jalankan perintah berikut dari Terminal untuk menginstal server web Nginx:

$ sudo apt install nginx

Setelah menginstal Nginx, periksa apakah layanan Nginx berjalan atau tidak menggunakan perintah:

$ sudo systemctl status nginx

Contoh keluaran:

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-05-29 10:13:47 UTC; 56s ago
       Docs: man:nginx(8)
   Main PID: 1349 (nginx)
      Tasks: 2 (limit: 2283)
     Memory: 4.4M
     CGroup: /system.slice/nginx.service
             ├─1349 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             └─1350 nginx: worker process

May 29 10:13:46 ubuntuserver systemd[1]: Starting A high performance web server and a reverse proxy server...
May 29 10:13:47 ubuntuserver systemd[1]: Started A high performance web server and a reverse proxy server.

Jika Anda melihat output seperti di atas, layanan Nginx telah dimulai.

Jika layanan Nginx belum dimulai, Anda dapat memulainya menggunakan perintah:

$ sudo systemctl enable nginx
$ sudo systemctl start nginx

1.1 Izinkan server web Nginx melalui firewall UFW

UFW , singkatan dari U nrumit F marahdengan all, adalah program untuk mengelola firewall netfilter yang dirancang agar mudah digunakan. UFW tersedia secara default di semua versi Ubuntu.

Secara default, browser web Nginx tidak dapat diakses dari sistem jarak jauh jika Anda telah mengaktifkan firewall UFW di Ubuntu 20.04 LTS. Anda harus mengizinkan http dan https port dengan mengikuti langkah-langkah yang diberikan di bawah ini.

Pertama, mari kita lihat aplikasi mana yang telah menginstal profil menggunakan perintah:

$ sudo ufw app list

Contoh keluaran:

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Seperti yang Anda lihat, aplikasi Nginx dan OpenSSH telah menginstal profil UFW.

Jika Anda melihat “Nginx Full” profile, Anda akan melihat bahwa itu mengaktifkan lalu lintas ke port 80 dan 443 :

$ sudo ufw app info "Nginx Full"

Contoh keluaran:

Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server

Ports:
80,443/tcp

Sekarang, jalankan perintah berikut untuk mengizinkan lalu lintas HTTP dan HTTPS masuk untuk profil ini:

$ sudo ufw allow in "Nginx Full"

Anda akan melihat output seperti di bawah ini:

Rules updated
Rules updated (v6)

Jika Anda ingin mengizinkan lalu lintas https, tetapi hanya lalu lintas http (80), jalankan:

$ sudo ufw app info "Nginx HTTP"

Mari kita lanjutkan dan jalankan halaman pengujian Nginx.

Untuk melakukannya, buka browser Web Anda dan navigasikan ke http://localhost/ atau http://IP-Address/ .

Anda akan melihat halaman selamat datang Nginx seperti yang ditunjukkan di bawah ini.

Selamat! Server Nginx berfungsi!

2. Instal MySQL Di Ubuntu

Untuk menginstal MySQL Di Ubuntu, jalankan:

$ sudo apt install mysql-server

Verifikasi apakah layanan MySQL berjalan atau tidak menggunakan perintah:

$ sudo systemctl status mysql

Contoh keluaran:

● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-05-29 10:31:56 UTC; 51s ago
   Main PID: 2288 (mysqld)
     Status: "Server is operational"
      Tasks: 39 (limit: 2283)
     Memory: 325.6M
     CGroup: /system.slice/mysql.service
             └─2288 /usr/sbin/mysqld

May 29 10:31:49 ubuntuserver systemd[1]: Starting MySQL Community Server...
May 29 10:31:56 ubuntuserver systemd[1]: Started MySQL Community Server.

Seperti yang Anda lihat pada output di atas, Mysql sedang berjalan!

2.1 Atur kata sandi pengguna administratif basis data (root) untuk Mysql

Secara default, MySQL root kata sandi pengguna kosong. Tidak disarankan untuk menggunakan kata sandi kosong untuk akun administratif basis data. Anda perlu mengamankan server MySQL Anda dengan menjalankan skrip berikut:

$ sudo mysql_secure_installation

Anda akan ditanya apakah ingin menyiapkan "VALIDASI SANDI" komponen atau tidak. Komponen ini memungkinkan pengguna untuk mengonfigurasi kata sandi yang kuat untuk kredensial basis data. Jika diaktifkan, Ini akan secara otomatis memeriksa kekuatan kata sandi dan memaksa pengguna untuk hanya mengatur kata sandi yang cukup aman. Aman untuk membiarkan ini dinonaktifkan . Namun, Anda harus menggunakan kata sandi yang kuat dan unik untuk kredensial basis data. Jika Anda tidak ingin mengaktifkan komponen ini, cukup tekan tombol apa saja untuk melewati bagian validasi kata sandi dan melanjutkan langkah selanjutnya.

Jika jawaban Anda Ya , Anda akan diminta untuk memilih tingkat validasi kata sandi.

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No y

Validasi sandi yang tersedia rendah , sedang dan kuat . Cukup masukkan nomor yang sesuai (0 untuk rendah, 1 untuk sedang dan 2 untuk sandi kuat) dan tekan tombol ENTER.

There are three levels of password validation policy:

LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0

Sekarang, masukkan kata sandi untuk pengguna root MySQL. Harap diingat bahwa Anda harus menggunakan kata sandi untuk pengguna root mysql tergantung pada kebijakan kata sandi yang Anda pilih pada langkah sebelumnya. Jika Anda tidak mengaktifkan plugin, cukup gunakan kata sandi yang kuat dan unik pilihan Anda.

Please set the password for root here.

New password:

Re-enter new password:

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

Setelah Anda memasukkan kata sandi dua kali, Anda akan melihat kekuatan kata sandi (Dalam kasus kami ini adalah 100 ). Jika Anda setuju, tekan Y untuk melanjutkan dengan kata sandi yang diberikan. Jika tidak puas dengan panjang kata sandi, tekan tombol lain dan atur kata sandi yang kuat. Saya setuju dengan sandi saya saat ini, jadi saya memilih y .

Untuk pertanyaan lainnya, cukup ketik y dan tekan ENTER. Ini akan menghapus pengguna anonim, melarang login pengguna root dari jarak jauh, dan menghapus basis data pengujian.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
- Dropping test database...
Success.

- Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

Selesai! Kami telah menetapkan kata sandi pengguna root MySQL.

2.2 Ubah metode otentikasi untuk pengguna root MySQL

Secara default, pengguna root MySQL diatur untuk mengautentikasi menggunakan "auth_socket" plugin mulai dari MySQL 5.7 dan versi yang lebih baru di Ubuntu. Meskipun meningkatkan keamanan, itu juga akan memperumit hal-hal ketika Anda mengakses server database Anda menggunakan program eksternal, misalnya phpMyAdmin. Untuk memperbaiki masalah ini, Anda perlu mengubah metode autentikasi dari auth_socket menjadi "caching_sha2_password" atau "mysql_native_password" .

Pada versi MySQL 8.0, plugin otentikasi yang disukai dan default adalah caching_sha2_password . Plugin autentikasi caching_sha2_password menyediakan enkripsi sandi yang lebih aman daripada plugin mysql_native_password.

Untuk mengubah plugin otentikasi, login ke prompt MySQL Anda menggunakan perintah:

$ sudo mysql

Jalankan perintah berikut pada prompt mysql untuk menemukan metode otentikasi saat ini untuk semua akun pengguna mysql:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Contoh keluaran:

+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$=s%UO"�[email protected]>[email protected] | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root             |                                                                        | auth_socket           | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)

Seperti yang Anda lihat, pengguna root mysql menggunakan auth_socket plugin untuk otentikasi.

Untuk mengubah plugin auth_socket menjadi caching_sha2_password, jalankan perintah berikut di prompt mysql. Jika Anda telah mengaktifkan plugin VALIDATE PASSWORD, pastikan Anda telah menggunakan kata sandi yang kuat berdasarkan persyaratan kebijakan saat ini. Strong harus terdiri dari minimal 8 karakter termasuk huruf besar, huruf kecil, angka, dan karakter khusus.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Password123#@!';

Ganti "Kata Sandi123#@!" dengan kata sandi yang kuat dan unik pilihan Anda pada perintah di atas.

Perbarui perubahan menggunakan perintah:

mysql> FLUSH PRIVILEGES;

Sekarang periksa apakah plugin otentikasi saat ini diubah atau tidak menggunakan perintah:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Contoh keluaran:

Bagus! Sekarang pengguna root myql dapat mengautentikasi menggunakan kata sandi untuk mengakses shell mysql.

Keluar dari perintah mysql:

mysql> exit

Catatan:

Meskipun plugin caching_sha2_password menyediakan enkripsi aman yang ditingkatkan, plugin ini memiliki beberapa masalah kompatibilitas dengan instalasi MySQL yang ada. Untuk detailnya, lihat tautan ini . Jika Anda mengalami masalah kompatibilitas, Anda perlu menyetel "mysql_native_password" plugin sebagai plugin otentikasi default.

Untuk mengubah ke mysql_native_password plugin, jalankan perintah berikut di prompt mysql.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Perbarui perubahan menggunakan perintah:

mysql> FLUSH PRIVILEGES;

Sekarang periksa kembali apakah metode otentikasi diubah atau tidak menggunakan perintah:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Contoh keluaran:

Keluar dari prompt mysql dengan memasukkan perintah berikut:

exit

3. Instal PHP Di Ubuntu

Untuk menginstal PHP, jalankan:

$ sudo apt-get install php-fpm php-mysql

Setelah menginstal PHP, kita perlu mengamankannya dengan melakukan perubahan sederhana di php.ini berkas.

Untuk melakukannya, edit php.ini file menggunakan editor favorit Anda:

$ sudo vi /etc/php/7.4/fpm/php.ini

Temukan baris berikut:

;cgi.fix_pathinfo=1

Batalkan komentar dan ubah nilainya dari 1 ke 0 (nol) .

cgi.fix_pathinfo=0

Simpan dan tutup file. Kemudian, restart layanan PHP-FPM untuk menerapkan perubahan.

$ sudo systemctl restart php7.4-fpm

Periksa apakah layanan PHP-FPM berjalan atau tidak menggunakan perintah:

$ sudo systemctl status php7.4-fpm

Contoh keluaran:

● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: en>
     Active: active (running) since Fri 2020-05-29 10:40:45 UTC; 11s ago
       Docs: man:php-fpm7.4(8)
    Process: 10711 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/ph>
   Main PID: 10693 (php-fpm7.4)
     Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
      Tasks: 3 (limit: 2283)
     Memory: 7.0M
     CGroup: /system.slice/php7.4-fpm.service
             ├─10693 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
             ├─10709 php-fpm: pool www
             └─10710 php-fpm: pool www

May 29 10:40:44 ubuntuserver systemd[1]: Starting The PHP 7.4 FastCGI Process Manager...
May 29 10:40:45 ubuntuserver systemd[1]: Started The PHP 7.4 FastCGI Process Manager.

3.1 Konfigurasi Nginx untuk menggunakan PHP-FPM

Kita perlu mengkonfigurasi Nginx untuk menggunakan PHP-FPM.

Untuk melakukannya, edit vhost default Nginx (Blok server) /etc/nginx/sites-available/default berkas:

$ sudo vi /etc/nginx/sites-available/default

Temukan bagian Server, dan atur FQDN atau alamat IP server Ubuntu Anda seperti yang ditunjukkan di bawah ini. Dan juga, periksa kembali apakah Anda telah menambahkan index.php garis. Semua perubahan ditampilkan dalam huruf tebal.

[...]
server {
 listen 80 default_server;
 listen [::]:80 default_server;

[...]

root /var/www/html;

 # Add index.php to the list if you are using PHP
 index index.php index.html index.htm index.nginx-debian.html;

 server_name 192.168.225.52;
[...]

Di sini,

  • dengarkan 80; -> dengarkan ipv4.
  • dengarkan [::]:80 default_server; -> dengarkan ipv6.
  • index.php -> Tambahkan ini jika Anda menggunakan PHP.
  • root /var/www/html; -> Direktori root dokumen Nginx.
  • nama_server 192.168.225.52; -> Alamat IP server Ubuntu kami.

Kemudian, gulir ke bawah sedikit dan temukan "#location ~ \.php$" bagian.

Batalkan komentar dan ubah baris berikut seperti yang ditunjukkan di bawah ini.

location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}
# deny access to .htaccess files, if Apache's document root
 # concurs with nginx's one
 #
 location ~ /\.ht {
 deny all;
 }
}

Lihat tangkapan layar berikut. Perubahan ditandai/digarisbawahi dengan warna merah.

Simpan dan keluar dari file.

Perhatikan baik-baik saat memodifikasi fastcgi_pass direktif dalam lokasi ~ \.php$ memblokir. Anda harus menyebutkan nama file yang benar dengan apa yang sebenarnya disimpan di /var/run/php direktori di server Anda. Untuk memverifikasinya, jalankan:

$ ls /var/run/php/
php-fpm.sock php7.4-fpm.pid php7.4-fpm.sock

Seperti yang Anda lihat, nama filenya adalah php7.4-fpm.sock . Pastikan Anda telah menyebutkan nama yang benar dalam arahan ini.

Periksa file konfigurasi Nginx untuk kesalahan sintaks menggunakan perintah:

$ sudo nginx -t

Contoh keluaran:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Jika Anda tidak melihat kesalahan apa pun, mulai ulang layanan nginx untuk menerapkan perubahan.

Untuk melakukannya, jalankan:

$ sudo systemctl restart nginx

Sekarang, mari kita buat contoh file PHP untuk menguji konfigurasi PHP melalui browser.

Untuk melakukannya, buat file bernama "info.php" di bawah folder root dokumen Nginx.

$ sudo vi /var/www/html/info.php

Tambahkan baris berikut:

<?php
phpinfo();
?>

Simpan dan keluar dari file. Mulai ulang layanan nginx untuk menerapkan perubahan.

$ sudo systemctl restart nginx

Kemudian, buka browser web Anda dan navigasikan ke http://IP-address/info.php .

Anda akan melihat detail PHP.

Selamat! PHP berfungsi!!

3.2 Instal modul PHP

Untuk meningkatkan fungsionalitas PHP, Anda dapat menginstal beberapa modul PHP tambahan.

Untuk membuat daftar modul PHP yang tersedia, jalankan:

$ sudo apt-cache search php- | less

Contoh keluaran:

Gunakan dan panah untuk bergerak ke atas dan ke bawah di antara hasil. Untuk keluar, ketik q .

Untuk menemukan detail modul php tertentu, misalnya php-gd , jalankan:

$ sudo apt-cache show php-gd

Untuk menginstal modul php, jalankan:

$ sudo apt-get install php-gd

Untuk menginstal semua modul (meskipun tidak perlu), jalankan:

$ sudo apt-get install php*

Jangan lupa untuk memulai kembali layanan Nginx setelah menginstal modul php apa pun.

Selamat! Kami telah berhasil mengatur tumpukan LEMP di server Ubuntu 20.04 LTS. Mulai terapkan situs web dan aplikasi web di tumpukan web LEMP Anda yang baru.

Baca Selanjutnya:

  • Instal phpMyAdmin Dengan LEMP Stack Di Ubuntu 20.04 LTS

Ubuntu
  1. Cara Menginstal Phorum dengan Nginx di Ubuntu 18.04 LTS

  2. Cara Memasang LAMP Stack di Ubuntu 22.04 LTS

  3. Cara Instal LEMP Stack Nginx, MySQL, PHP di Ubuntu 22.04

  1. Cara Instal Nginx dengan PHP dan MySQL (LEMP Stack) di Ubuntu 18.04

  2. Cara Menginstal Nginx dengan PHP dan MySQL (LEMP Stack) di Ubuntu 20.04 LTS

  3. Nginx 1.7.9 + PHP5-FPM + MySQL (LEMP) di Ubuntu 14.10

  1. Cara Instal Linux, Nginx, MySQL, PHP (LEMP Stack) di Ubuntu 18.04

  2. Instal Apache, MySQL, PHP (LAMP) Stack Di Ubuntu 18.04 LTS

  3. Instal Apache, MySQL, PHP (LAMP Stack) Di Ubuntu 20.04 LTS