Drupal adalah sistem manajemen konten gratis, sumber terbuka, dan skalabel yang dapat digunakan oleh individu untuk membuat dan mengelola semua jenis situs web. Itu ditulis dalam PHP dan menggunakan MySQL/MariaDB untuk menyimpan datanya. Drupal menyediakan serangkaian fitur yang kaya yang dapat diperluas dengan ribuan add-on. Drupal mendukung banyak server web termasuk, Apache, Nginx, IIS, Lighttpd dan database MySQL, MariaDB, MongoDB, SQLite, PostgreSQL, dan server MS SQL. Drupal hadir dengan UI web yang sederhana dan ramah pengguna yang memungkinkan Anda membuat situs web tanpa pengetahuan coding apa pun.
Dalam tutorial ini, kami akan menunjukkan cara menginstal Drupal 8 di server CentOS 8 dan mengamankannya dengan Let's Encrypt SSL gratis.
Persyaratan
- Server yang menjalankan CentOS 8.
- Nama domain valid yang ditunjukkan dengan IP server Anda
- Kata sandi root dikonfigurasi di server.
Instal Nginx, MariaDB dan PHP
Sebelum memulai, Anda perlu menginstal server LEMP di server Anda. Anda dapat menginstalnya dengan menjalankan perintah berikut:
dnf install nginx mariadb-server php php-fpm php-cli php-mbstring php-gd php-xml php-curl php-mysqlnd php-pdo php-json php-opcache -y
Setelah terinstal, mulai layanan Nginx, MariaDB dan php-fpm dan aktifkan untuk memulai setelah sistem reboot menggunakan perintah berikut:
systemctl start nginx
systemctl start php-fpm
systemctl start mariadb
systemctl enable nginx
systemctl enable php-fpm
systemctl enable mariadb
Konfigurasi Basis Data
Secara default, MariaDB tidak diamankan sehingga Anda harus mengamankannya. Anda dapat mengamankannya dengan menjalankan perintah berikut:
mysql_secure_installation
Jawab semua pertanyaan seperti yang ditunjukkan di bawah ini:
Enter current password for root (enter for none): Set root password? [Y/n] Y New password: Re-enter new password: Remove anonymous users? [Y/n] Y Disallow root login remotely? [Y/n] Y Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y
Setelah selesai, masuk ke shell MariaDB dengan perintah berikut:
mysql -u root -p
Berikan kata sandi root Anda saat diminta kemudian buat database dan pengguna untuk Drupal dengan perintah berikut:
MariaDB [(none)]> CREATE DATABASE drupaldb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
MariaDB [(none)]> CREATE USER [email protected] IDENTIFIED BY "password";
Selanjutnya, berikan semua hak istimewa ke drupaldb dengan perintah berikut:
MariaDB [(none)]> GRANT ALL ON drupaldb.* TO [email protected] IDENTIFIED BY "password";
Selanjutnya, flush hak istimewa dan keluar dari shell MariaDB dengan perintah berikut:
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> EXIT;
Unduh Drupal
Pertama, Anda perlu mengunduh Drupal versi terbaru dari situs resminya. Anda dapat mengunduhnya dengan perintah berikut:
wget https://ftp.drupal.org/files/projects/drupal-8.7.10.tar.gz
Setelah diunduh, ekstrak file yang diunduh dengan perintah berikut:
tar -xvzf drupal-8.7.10.tar.gz
Selanjutnya, pindahkan direktori hasil ekstrak ke direktori root web Nginx dengan perintah berikut:
mv drupal-8.7.10 /var/www/html/drupal
Selanjutnya buat direktori untuk menyimpan file website dan rename file default.settings.php seperti gambar di bawah ini:
mkdir /var/www/html/drupal/sites/default/files
cp /var/www/html/drupal/sites/default/default.settings.php /var/www/html/drupal/sites/default/settings.php
Selanjutnya, ubah kepemilikan direktori Drupal menjadi nginx seperti gambar di bawah ini:
chown -R nginx:nginx /var/www/html/drupal/
Konfigurasi Nginx untuk Drupal
Pertama, buat file konfigurasi php-fpm untuk Drupal dengan perintah berikut:
nano /etc/php-fpm.d/drupal.conf
Tambahkan baris berikut:
[drupal] user = nginx group = nginx listen.owner = nginx listen.group = nginx listen = /run/php-fpm/drupal.sock pm = ondemand pm.max_children = 50 pm.process_idle_timeout = 10s pm.max_requests = 500 chdir = /
Simpan dan tutup file setelah Anda selesai. Kemudian, buat file konfigurasi virtual host Nginx untuk Drupal:
nano /etc/nginx/conf.d/drupal.conf
Tambahkan baris berikut:
server { listen 80; server_name example.com; root /var/www/html/drupal; access_log /var/log/nginx/example.com.access.log; error_log /var/log/nginx/example.com.error.log; location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location ~ \..*/.*\.php$ { return 403; } location ~ ^/sites/.*/private/ { return 403; } # Block access to scripts in site files directory location ~ ^/sites/[^/]+/files/.*\.php$ { deny all; } location ~ (^|/)\. { return 403; } location / { try_files $uri /index.php?$query_string; } location @rewrite { rewrite ^/(.*)$ /index.php?q=$1; } location ~ /vendor/.*\.php$ { deny all; return 404; } location ~ '\.php$|^/update.php' { fastcgi_split_path_info ^(.+?\.php)(|/.*)$; include fastcgi_params; # Block httpoxy attacks. See https://httpoxy.org/. fastcgi_param HTTP_PROXY ""; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param QUERY_STRING $query_string; fastcgi_intercept_errors on; fastcgi_pass unix:/run/php-fpm/drupal.sock; } location ~ ^/sites/.*/files/styles/ { # For Drupal >= 7 try_files $uri @rewrite; } # Handle private files through Drupal. Private file's path can come # with a language prefix. location ~ ^(/[a-z\-]+)?/system/files/ { # For Drupal >= 7 try_files $uri /index.php?$query_string; } location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { try_files $uri @rewrite; expires max; log_not_found off; } }
Simpan dan tutup file. Kemudian, restart php-fpm dan layanan Nginx untuk menerapkan perubahan:
systemctl restart php-fpm
systemctl restart nginx
Konfigurasi SELinux dan Firewall
Secara default, SELinux diaktifkan di CentOS 8. Jadi, Anda perlu mengonfigurasi SELinux agar Drupal berfungsi dengan benar.
Pertama, izinkan Drupal untuk menulis ke direktori file publik dan pribadi dengan perintah berikut:
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/drupal(/.*)?"
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/drupal/sites/default/settings.php'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/drupal/sites/default/files'
restorecon -Rv /var/www/html/drupal
restorecon -v /var/www/html/drupal/sites/default/settings.php
restorecon -Rv /var/www/html/drupal/sites/default/files
Selanjutnya, izinkan Drupal untuk mengirim email keluar dengan perintah berikut:
setsebool -P httpd_can_sendmail on
Selanjutnya, Anda perlu membuat aturan firewall untuk mengizinkan layanan HTTP dan HTTPS dari jaringan eksternal. Anda dapat mengizinkannya dengan perintah berikut:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
Amankan Drupal dengan Let's Encrypt SSL
Drupal sekarang diinstal dan dikonfigurasi. Saatnya mengamankannya dengan Let's Encrypt SSL gratis.
Untuk melakukannya, Anda perlu mengunduh klien certbot di server Anda. Anda dapat mengunduh dan mengatur izin yang benar dengan menjalankan perintah berikut:
wget https://dl.eff.org/certbot-auto
mv certbot-auto /usr/local/bin/certbot-auto
chown root /usr/local/bin/certbot-auto
chmod 0755 /usr/local/bin/certbot-auto
Sekarang, jalankan perintah berikut untuk mendapatkan dan menginstal sertifikat SSL untuk situs web Drupal Anda.
certbot-auto --nginx -d example.com
Perintah di atas pertama-tama akan menginstal semua dependensi yang diperlukan di server Anda. Setelah terinstal, Anda akan diminta untuk memberikan alamat email dan menerima persyaratan layanan seperti yang ditunjukkan di bawah ini:
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator apache, Installer apache Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): [email protected] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (A)gree/(C)ancel: A - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y Obtaining a new certificate Performing the following challenges: http-01 challenge for example.com Waiting for verification... Cleaning up challenges Deploying Certificate to VirtualHost /etc/nginx/conf.d/drupal.conf
Selanjutnya, Anda harus memilih apakah akan mengarahkan ulang lalu lintas HTTP ke HTTPS seperti yang ditunjukkan di bawah ini:
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Ketik 2 dan tekan Enter untuk melanjutkan. Setelah instalasi selesai, Anda akan melihat output berikut:
Redirecting all traffic on port 80 to ssl in /etc/nginx/conf.d/drupal.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://example.com You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=example.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2020-03-23. To obtain a new or tweaked version of this certificate in the future, simply run certbot-auto again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot-auto renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Akses Situs Web Drupal
Sekarang, buka browser web Anda dan ketik URL https://example.com . Anda akan diarahkan ke halaman berikut:
Pilih bahasa yang Anda inginkan dan klik Simpan dan lanjutkan tombol. Anda akan melihat halaman berikut:
Pilih profil pemasangan Anda dan klik Simpan dan lanjutkan tombol. Anda akan melihat halaman berikut:
Berikan detail basis data Anda dan klik Simpan dan lanjutkan tombol. Anda akan melihat halaman berikut:
Berikan nama situs Anda, nama pengguna admin, kata sandi dan klik Simpan dan lanjutkan tombol. Anda akan melihat dasbor Drupal Anda di halaman berikut:
Selamat! Anda telah berhasil menginstal dan mengamankan Drupal di server CentOS 8.