GNU/Linux >> Belajar Linux >  >> Fedora

Cara Install Nginx dengan PHP dan MariaDB (LEMP Stack) dengan Opcache, Redis dan Lets Encrypt di Fedora 32

Tumpukan perangkat lunak LEMP adalah sekelompok perangkat lunak sumber terbuka yang diinstal bersama untuk memungkinkan server menghosting situs web dan aplikasi. Ini adalah akronim untuk L inux, E Server Nginx, M ySQL (menggunakan MariaDB), dan P HP.

Dalam panduan ini, Anda akan menginstal tumpukan LEMP pada server berbasis Fedora 32. Kami juga akan menginstal phpMyAdmin, Redis, Opcache, dan Let's Encrypt SSL.

Prasyarat

Server yang menjalankan Fedora 32.

Pengguna sudo non-root.

Pastikan semuanya diperbarui.

$ sudo dnf upgrade

Beberapa paket yang dibutuhkan sistem Anda.

$ sudo dnf install wget curl nano -y

Beberapa paket ini mungkin sudah diinstal pada sistem Anda.

Nonaktifkan SELinux.

$ sudo setenforce 0

Konfigurasi Firewall

Langkah pertama adalah mengkonfigurasi firewall. Server Fedora dilengkapi dengan firewall Firewalld yang telah diinstal sebelumnya.

Periksa apakah firewall sedang berjalan.

$ sudo firewall-cmd --state

Anda akan mendapatkan output berikut.

running

Setel zona default firewall ke publik.

$ sudo firewall-cmd --set-default-zone=public

Periksa layanan/port yang diizinkan saat ini.

$ sudo firewall-cmd --zone=public --permanent --list-services

Ini akan menunjukkan output berikut.

dhcpv6-client mdns ssh

Izinkan port HTTP dan HTTPS.

$ sudo firewall-cmd --zone=public --permanent --add-service=http
$ sudo firewall-cmd --zone=public --permanent --add-service=https

Periksa kembali status firewall.

$ sudo firewall-cmd --zone=public --permanent --list-services

Anda akan melihat keluaran serupa.

dhcpv6-client http https mdns ssh

Muat Ulang Firewall.

$ sudo systemctl reload firewalld

Instal PHP

Fedora 32 secara default dikirimkan dengan PHP 7.4 tetapi untuk memiliki repositori PHP yang diperbarui, kami akan menambahkan repositori REMI.

Instal repositori REMI yang merupakan repositori Fedora resmi untuk menginstal paket PHP.

$ sudo dnf -y install https://rpms.remirepo.net/fedora/remi-release-32.rpm

Aktifkan remi repositori dan nonaktifkan remi-modular gudang. Ini memungkinkan repositori yang diperlukan untuk menginstal paket PHP 7.4.

$ sudo dnf config-manager --set-enabled remi
$ sudo dnf config-manager --set-disabled remi-modular

Instal PHP 7.4 bersama dengan beberapa paket tambahan.

$ sudo dnf install -y php-cli php-fpm php-mysqlnd

Periksa apakah PHP berfungsi dengan benar.

$ php --version

Anda akan melihat keluaran serupa.

PHP 7.4.6 (cli) (built: May 12 2020 08:09:15) ( NTS ) 
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

Instal MariaDB

MariaDB adalah pengganti drop-in untuk MySQL yang berarti perintah untuk menjalankan dan mengoperasikan MariaDB sama dengan perintah untuk MySQL.

Fedora 32 secara default dikirimkan dengan MariaDB 10.4 yang merupakan versi stabil terbaru yang tersedia saat ini, jadi kami akan menggunakannya.

Untuk menginstal MariaDB, jalankan perintah berikut.

$ sudo dnf install mariadb-server -y

Periksa apakah MariaDB diinstal dengan benar.

$ mysql --version

Anda akan melihat output berikut.

mysql  Ver 15.1 Distrib 10.4.12-MariaDB, for Linux (x86_64) using  EditLine wrapper

Aktifkan dan mulai layanan MariaDB.

$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb

Jalankan perintah berikut untuk melakukan konfigurasi default seperti memberikan kata sandi root, menghapus pengguna anonim, melarang login root dari jarak jauh, dan menghapus tabel pengujian.

$ sudo mysql_secure_installation

Dengan MariaDB 10.4, Anda sekarang akan ditanya antara menggunakan kata sandi root atau unix_socket pengaya. unix_socket plugin memungkinkan Anda untuk masuk ke MariaDB dengan kredensial pengguna Linux Anda. Ini dianggap lebih aman meskipun Anda memerlukan nama pengguna/kata sandi tradisional untuk menggunakan aplikasi pihak ketiga seperti phpMyAdmin. Kami akan tetap menggunakan plugin unix_socket untuk tutorial ini. Anda masih dapat menggunakan phpMyAdmin melalui pengguna mana pun yang Anda buat sebagai pengguna tertentu untuk database Anda.

Menekan Enter memilih opsi default (salah satu yang dikapitalisasi, Y dalam hal ini).

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): [PRESS ENTER]
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] [PRESS ENTER]
Enabled successfully!
Reloading privilege tables..
 ... Success!

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] [ANSWER n]
... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] [PRESS ENTER]
 ... 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? [Y/n] [PRESS ENTER]
 ... Success!

By default, MariaDB 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? [Y/n] [PRESS ENTER]
 \- 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? [Y/n] [PRESS ENTER]
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Itu dia. Lain kali Anda ingin login ke MySQL, gunakan perintah berikut

$ sudo mysql

Masukkan kata sandi root Anda saat diminta.

Instal Redis

Fedora 32 berisi paket Redis v5.0.8 tetapi repositori Remi yang kami instal sebelumnya untuk PHP disertai dengan versi terbaru Redis (v6.0.1) pada saat penulisan tutorial ini.

Gunakan perintah berikut untuk menginstal Redis dan ekstensi PHP Redis yang sesuai.

$ sudo dnf install redis php-redis

Aktifkan layanan Redis.

$ sudo systemctl enable --now redis

Konfigurasi Server Redis

Mari kita lakukan beberapa konfigurasi dasar di server Redis.

Buka file /etc/redis.conf dengan editor Nano.

$ sudo nano /etc/redis.conf

Jika Anda ingin klien jarak jauh terhubung ke instans Redis Anda, cari baris bind 127.0.0.1 dan ubah menjadi berikut.

bind 0.0.0.0

Anda juga dapat mengubah port default tempat Redis mendengarkan dari 6379 ke nilai pilihan Anda.

port 3458

Untuk mengonfigurasi Redis sebagai server cache, setel nilai berikut seperti yang diberikan.

maxmemory 256mb
maxmemory-policy allkeys-lru

Ini memberitahu Redis untuk menghapus kunci apa pun menggunakan algoritma LRU ketika memori maksimum 256MB tercapai. Anda dapat mengatur nilai memori sesuai kebutuhan Anda dan server yang Anda gunakan.

Anda dapat mengatur kata sandi sehingga setiap klien yang membutuhkan Redis akan diminta untuk mengautentikasi terlebih dahulu. Untuk melakukan itu, atur kata sandi menggunakan arahan berikut.

requirepass  <AuthPassword>

Anda dapat menemukan lebih banyak arahan untuk diubah di file konfigurasi. Setelah Anda selesai, tekan Ctrl + X dan masukkan Y saat diminta untuk menyimpan file.

Mulai ulang server Redis untuk menerapkan perubahan.

$ sudo systemctl restart redis

Kami juga perlu menambahkan aturan di Firewall kami agar Redis dapat berfungsi.

$ sudo firewall-cmd --zone=public --permanent --add-port=6379/tcp
$ sudo firewall-cmd --reload

Anda perlu mengubah nilai pada perintah di atas agar sesuai dengan port apa pun yang Anda pilih dalam file konfigurasi di atas.

Instal Nginx

Fedora 32 secara default dikirimkan dengan versi Stable terbaru Nginx. (1.18.0).

Instal Nginx.

$ sudo dnf install nginx -y

Periksa apakah itu berfungsi dengan benar.

$ nginx -v

Anda akan melihat output berikut tergantung pada versi Nginx yang Anda pilih untuk diinstal.

nginx version: nginx/1.18.0

Mulai dan aktifkan Nginx.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Buka alamat IP server Anda di browser untuk melihat halaman berikut. Itu berarti Nginx bekerja dengan baik.

Konfigurasi Nginx

Siapkan direktori tempat server memblokir.

$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled

Buat direktori tempat situs Anda akan tinggal.

$ sudo mkdir /var/www/example.com/html -p

Menggunakan -p direktif membuat direktori induk yang tidak ada sebelumnya.

Jalankan perintah berikut untuk menambahkan file konfigurasi untuk situs Anda.

$ sudo nano /etc/nginx/sites-available/example.com.conf

Rekatkan kode berikut di editor.

server {
  listen          *:80;
  server_name     example.com;
  root            /var/www/example.com/html;
  index           index.php index.html;

  location / {
    try_files   $uri $uri/ =404;
  }
    
  access_log /var/log/nginx/example.com.access.log;
  error_log /var/log/nginx/example.com.error.log;

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass  unix:/run/php-fpm/www.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    include  fastcgi_params;
  }
}

Tekan Ctrl + X untuk menutup editor dan tekan Y saat diminta untuk menyimpan file.

File ini mengasumsikan bahwa kita akan menghosting example.com di direktori /var/www/html . Jika Anda tidak akan menggunakan domain apa pun dan mengonfigurasi server Anda agar dapat diakses hanya melalui alamat IP/localhost, Anda harus menghapus pengaturan blok server yang sesuai dari nginx.conf jika tidak, itu akan mengacaukan blok server yang akan Anda buat.

Aktifkan file konfigurasi ini dengan menautkannya ke sites-enabled direktori.

$ sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/

Buka /etc/nginx/nginx.conf file untuk diedit.

$ sudo nano /etc/nginx/nginx.conf	

Paste baris berikut setelah baris include /etc/nginx/conf.d/*.conf

include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;

Ubah nilai types_hash_max_size dari 2048 hingga 4096.

types_hash_max_size 4096;

Tekan Ctrl + X untuk menutup editor dan tekan Y ketika diminta untuk menyimpan file. Uji konfigurasi Nginx.

$ sudo nginx -t

Anda akan melihat output berikut yang menunjukkan konfigurasi Anda benar.

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

Muat ulang layanan Nginx.

$ sudo systemctl reload nginx

Konfigurasi PHP-FPM

Buka file /etc/php-fpm.d/www.conf .

$ sudo nano /etc/php-fpm.d/www.conf

Kita perlu menyetel pengguna/grup proses PHP Unix ke nginx . Temukan user=apache dan group=apache baris dalam file dan ubah ke nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

Simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.

Mulai ulang proses PHP-fpm.

$ sudo systemctl restart php-fpm

Untuk menguji pengaturan PHP Anda, buat file test.php di html folder.

$ sudo nano /var/www/example.com/html/test.php

Tambahkan konten berikut ke dalamnya dan simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.

<?php phpinfo();

Luncurkan http://<yourserverip>/test.php di browser web Anda dan Anda akan melihat yang berikut ini.

Instal phpMyAdmin

Remi Repository mengusung phpMyAdmin terbaru sehingga kita cukup menginstalnya dengan menggunakan perintah berikut.

$ sudo dnf install phpmyadmin

Itu menginstal sendiri ke dalam /usr/share/phpMyAdmin direktori.

Konfigurasi phpMyAdmin

Agar server web Nginx dapat menemukan dan menyajikan file phpMyAdmin dengan benar, kita perlu membuat tautan simbolis dari lokasi sebenarnya ke direktori dokumen root Nginx.

Untuk melakukannya, jalankan perintah berikut.

$ sudo ln -s /usr/share/phpmyadmin /var/www/example.com/html/phpmyadmin

Instalasi phpMyAdmin Anda sudah beroperasi. Untuk mengaksesnya, cukup buka http://example.com/phpmyadmin .

Jika Anda mendapatkan kesalahan sesi php, jalankan perintah berikut untuk memberikan izin yang tepat ke direktori PHP Session. Periksa jalur sesi Anda dari test.php file yang kita buat sebelumnya. Bagi kami itu ada di /var/lib/php/session .

$ sudo chown -R nginx:nginx /var/lib/php/session

Secara default, lokasi default ini harus diubah karena ini adalah lokasi paling umum yang dapat ditemukan oleh peretas mana pun yang menginstal phpMyAdmin Anda. Untuk melakukannya, jalankan perintah berikut.

$ sudo mv phpmyadmin sm123

Pada dasarnya, kami memindahkan lokasi phpMyAdmin kami ke sm123 map. Untuk mengaksesnya, Anda sekarang perlu membuka http://example.com/sm123 di browser Anda.

Karena kami menggunakan unix_authentication dengan MySQL di sini, tidak ada pengguna root untuk masuk melalui phpMyAdmin. Anda harus membuat pengguna MySQL terlebih dahulu dan memberikannya hak istimewa ke database untuk dapat menggunakan phpMyAdmin.

Konfigurasi Opcache

Menginstal phpMyAdmin dari repositori Remi juga menginstal Opcache. Jika Anda belum menginstal phpMyAdmin dan tidak ingin melakukannya, Anda cukup menginstal Opcache menggunakan perintah berikut.

$ sudo dnf install php-opcache	

Verifikasi bahwa itu telah diinstal.

$ php -v
PHP 7.4.5 (cli) (built: Apr 14 2020 12:54:33) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies

Untuk mengubah pengaturan Opcache, buka file /etc/php.d/10-opcache.ini .

$ sudo nano /etc/php.d/10-opcache.ini

Pengaturan berikut akan membantu Anda memulai menggunakan Opcache dan umumnya direkomendasikan sebagai kinerja yang baik. Anda dapat mengaktifkan konfigurasi dengan membatalkan komentar dengan menghapus ; di depannya.

opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60

Simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.

Mulai ulang server Anda untuk menerapkan pengaturan.

$ sudo systemctl reload nginx

Instal SSL melalui Let's Encrypt

SSL telah menjadi bagian penting dari situs web mana pun. Disini kita akan menginstall SSL menggunakan layanan Let's Encrypt.

Untuk itu, instal dulu alat Certbot.

$ sudo dnf install certbot-nginx

Buat sertifikat.

$ sudo certbot --nginx -d example.com -d www.example.com -d phpmyadmin.example.com

Kami membuat sertifikat untuk keduanya - situs utama dan domain phpMyAdmin kami.

Jika ini adalah pertama kalinya Anda menjalankan certbot di sistem Anda, Anda akan dimintai alamat email dan menyetujui persyaratan layanan. Anda juga akan ditanya apakah Anda setuju untuk berbagi data dengan yayasan EFF yang dapat Anda tolak. Setelah melakukannya, certbot akan berkomunikasi dengan server Let's Encrypt dan menjalankan tantangan untuk memverifikasi domain Anda.

Jika berhasil, Anda akan ditanya bagaimana menangani pengalihan HTTPS.

Please choose whether HTTPS access is required or optional.
-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Pilih pilihan Anda dan tekan enter. Sertifikat Anda akan dibuat dan konfigurasi Nginx Anda akan diperbarui dengan pengaturan SSL.

Sertifikat Anda sudah siap dan Anda dapat membuka situs Anda sekarang dengan membuka https://example.com

Mengonfigurasi Pembaruan Otomatis SSL

Ini adalah langkah terakhir sebelum kita mengakhiri tutorial ini. Untuk memperbarui SSL, kami akan menggunakan cron.

Kita perlu menambahkan entri ke Cron dengan menggunakan editor Crontab. Untuk membuka editor crontab, jalankan perintah berikut.

$ EDITOR=nano sudo crontab -e

EDITOR=nano di depan perintah memastikan crontab membuka editor Nano untuk kita karena Fedora secara default lebih memilih editor VIM.

Rekatkan baris berikut di bagian bawah.

. . .
25 2 * * * /usr/bin/certbot renew --quiet

25 2 * * * bagian dari baris ini berarti "jalankan perintah berikut pada pukul 2:25 pagi, setiap hari". Anda dapat memilih kapan saja.

Simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.

renew perintah untuk Certbot akan memeriksa semua sertifikat yang diinstal pada sistem dan memperbarui semua yang ditetapkan kedaluwarsa dalam waktu kurang dari tiga puluh hari. --quiet memberitahu Certbot untuk tidak mengeluarkan informasi atau menunggu input pengguna.

Perintah ini akan dijalankan setiap hari.

Kesimpulan

Itu saja untuk tutorial ini. Penyiapan LEMP Anda selesai dan Anda dapat mulai membuat dan menghosting situs web dan aplikasi Anda.


Fedora
  1. Cara Install LEMP (Linux, Nginx, MariaDB, PHP) di Server Fedora 30

  2. Cara Instal Nginx Dengan PHP Dan MySQL (LEMP Stack) Di CentOS 7

  3. Cara Menginstal Phorum dengan Nginx di Fedora 30

  1. Cara Menginstal CMS Pagekit dengan Nginx di Fedora 29

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

  3. Cara Memasang InvoicePlane dengan Nginx di Fedora 29

  1. Cara Menginstal CMS Oktober dengan Nginx di Fedora 29

  2. Cara Menginstal Shopware dengan NGINX dan Mengenkripsi di CentOS 7

  3. Cara Menginstal Shopware dengan NGINX dan Lets Encrypt di Fedora 30