Install LEMP Stack pada Ubuntu Server 16.04
Bismillahirrahmanirrahim.
Sekarang kita akan menginstall LEMP Stack web server: Nginx, MariaDB, dan PHP 7.0 pada VPS (atau VM Instance) yang sudah kita punya. Sebenarnya artikel cara install web server pada Ubuntu Server sudah banyak bertebaran di internet, tetapi kali ini kita akan bahas installasi LEMP Stack dengan konfigurasi tambahan yang biasa saya terapkan :
- Mengubah root directory project pada serverblock nginx.
- Menambah user baru setara “root” pada MySQL.
Pada artikel ini, saya menggunakan Ubuntu Server 16.04 dari Google Cloud Engine, tetapi ini bisa diterapkan ke VPS dari provider lain, dengan catatan kita tidak menggunakan user “root”, tetapi menggunakan sudoer user.
Baik kita mulai.
Install Nginx 1.10.3
SSH ke VPS atau VM Instance, kemudian:
sudo apt update
sudo apt install nginx
Ketika selesai, bisa kita cek di browser dengan membuka IP Address VPS kita.
Misal: http://35.198.238.82
(tampil Welcome to nginx!).
Mengubah directory root nginx
Secara default, nginx melayani project yang berada pada direktori /var/www/html
. Tetapi untuk akses dan menjalankan perintah ke direktori itu, kita harus menggunakan sudo (karena kita tidak menggunakan user root).
Agar kita tidak repot menggunakan sudo, kita ubah direktori root nginx dari /var/www/html
ke /home/username/www
. Di mana username
adalah sudoer user di server ini.
Caranya, edit serverblock default
nginx.
$ sudo vim /etc/nginx/sites-available/default
Ubah 2 baris berikut ini :
# Ubah sesuai dengan direktori yang akan kita gunakan
root /home/username/www;
# ubah sesuai dengan IP Address Server atau domain
server_name 35.198.238.82;
Simpan, kemudian buat direktori sesuai dengan yang diatur pada serverblock, yaitu /home/username/www
.
# Cek direktori saat ini.
$ pwd
/home/username
# Buat direktori sesuai dengan yang diatur pada serverblock.
$ mkdir www
# Test nginx (jika OK, maka serverblock sudah benar).
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# Reload nginx.
$ sudo service nginx reload
Sekarang kita cek, apakah perubahan yang kita buat berhasil? Buat buat file index.html
pada direktori www
.
$ vim www/index.html
Isi file index.html
, misal :
<h1>Dilayani dari direktori /home/username/www</h1>
Tes via browser http://35.198.238.82
, jika tampil tulisan di file index.html
tadi, berarti perubahan root directori nginx berhasil.
Sip, selesai install nginx dengan project root pada home directory kita.
Install PHP 7.0
Lanjutkan install PHP 7.0 beserta extensionnya (yang diperlukan oleh Laravel).
$ sudo apt install php-fpm php-mysql php-mbstring zip unzip php7.0-zip gzip php-xml php-gd php-curl
Setting nginx serverblock default
agar melayani PHP.
$ sudo vim /etc/nginx/sites-available/default
# Tambahkan index.php pada baris index
index index.php index.html index.htm index.nginx-debian.html;
# Uncomment pada location ~ \.php$ seperti di bawah
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# # With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
# Uncomment untuk menolak akses .htaccess
location ~ /\.ht {
deny all;
}
Serverblock lengkapnya bisa dilihat pada gist ini.
Simpan, kemudian reload nginx.
# Test nginx (jika OK, maka serverblock sudah benar).
$ sudo nginx -t
# Reload nginx.
$ sudo service nginx reload
Edit php.ini
$ sudo vim /etc/php/7.0/fpm/php.ini
Ubah baris ini cgi.fix_pathinfo
menjadi 0
, hilangkan #
jika ada.
cgi.fix_pathinfo=0
Simpan, kemudian restart PHP-FPM.
$ sudo service php7.0-fpm restart
Setup PHP-FPM untuk nginx sudah beres, sekarang kita tes apakah konfigurasi berhasil.
Uji Coba PHP
Buat file info.php
pada direktori www
.
$ vim www/info.php
Isi file dengan script phpinfo()
.
<?php phpinfo();
Simpan, kemudian tes di browser: http://35.198.238.82/info.php
. Seharusnya tampil info lengkap PHP pada server kita.
# Kalau sudah tampil seperti di atas,
# hapus file info.php demi keamanan.
$ rm www/info.php
Selesai install PHP 7.0, kita lanjutkan install MariaDB.
Install MariaDB 10.2
Secara default, pada ubuntu server 16.04 kita mendapatkan MariaDB 10.0. Tetapi kali ini kita akan menginstall MariaDB 10.2.
$ sudo apt-get install software-properties-common
$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
$ sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mirror.poliwangi.ac.id/mariadb/repo/10.2/ubuntu xenial main'
$ sudo apt update
$ sudo apt install mariadb-server
Cek versi MariaDB :
$ mysql -V
mysql Ver 15.1 Distrib 10.2.13-MariaDB ...
Sekarang kita konfigurasi keamanannya :
$ sudo mysql_secure_installation
# Ikut langkahnya, dengan menjawab pertanyaan
#
# Enter current password for root (enter for none):
# Change the root password? [Y/n] Y
# New password:
# Re-enter new password:
# Password updated successfully!
# Remove anonymous users? [Y/n] Y
# Disallow root login remotely? [Y/n] Y
# Remove test database and access to it? [Y/n] Y
# ... 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!
Sip, selesai install MariaDB 10.2.
Membuat User MySQL dengan root privileges
Setiap installasi MariaDB/MySQL, kita memiliki user root. Sama halnya dengan user root pada Ubuntu, sebaiknya kita tidak menggunakan user ini untuk bekerja. Kita buat user baru dengan hak akses yang sama dengan root.
# Masuk (login) ke MySQL dengan user root.
$ sudo mysql -uroot -p
# Buat user dengan nama 'usernamebaru' dan password 'supersecurepassword'
MariaDB [(none)]> CREATE USER 'usernamebaru'@'localhost' IDENTIFIED BY 'supersecurepassword';
# Grant privilleges untuk user baru
MariaDB [(none)]> GRANT ALL PRIVILEGES ON * . * TO 'usernamebaru'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
# Untuk melihat semua user yang ada
MariaDB [(none)]> SELECT User,Host FROM mysql.user;
# Selesai, exit MariaDB/MySQL
MariaDB [(none)]> exit;
Sehingga nanti aplikasi PHP yang kita deploy pada server ini dapat menggunakan database dengan username usernamebaru
dan password supersecurepassword
, tidak perlu menggunakan user root.
Kesimpulan
Dengan installasi dan setup/konfigurasi di atas, maka kita akan memiliki :
- Nginx versi 1.10.3 dengan root directory
/home/username/www
.
(Tidak perlusudo
untuk menjalankan composer). - PHP versi 7.0.
- Database MariaDB versi 10.2.
Dengan usernameusernamebaru
dan passwordsupersecurepassword
. - Database lebih aman karena :
- Memiliki user mysql baru yang hanya kita yang tahu.
- Kita blok akses database secara remote untuk user
root
.
Demikian teman-teman, seperti ini proses installasi LEMP Stack yang biasa saya lakukan untuk VPS Ubuntu Server 16.04. Cara dan proses di atas sebatas sepengetahuan saya yang sangat sedikit dalam hal keamanan server. Mudah-mudahan kedepannya kita bisa bahas tentang keamanan ubuntu server jika sudah ketemu ilmu baru. :D
Terima kasih sudah berkenan membaca.