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.