LAMP di Ubuntu 16.04 (and 18.04) server

Sudah lama sekali saya ga menulis apa-apa disini. Bahkan mungkin saya lupa punya Blog hahahaha. Oke, cukup kali ini mumpung ada waktu senggang, saya ingin menuliskan guide untuk mempersiapkan LAMP(Linux, Apache, Mysql, & PHP) server dengan OS Ubuntu 16.04 LTS.

Secara langkah-langkah, kalau yang sudah pernah menginstall dan mengkonfigurasikan LAMP di Ubuntu terdahulu/sebelumnya pasti tidak asing lagi. Hanya nama package-nya yang (mungkin) berbeda.

Untuk permudah, biasanya kita masuk ke dalam mode root terlebih dahulu, dengan demikian, kita bisa mengabaikan “sudo” di awal setiap perintah-perintah yang dijalankan.

Untuk masuk ke dalam mode root, bisa menggunnakan perintah

sudo su

butuh diingat, tidka semua user/account di dalam Linux memiliki akses sebagai root.

Pertama yang perlu dilakukan pastinya adalah mengupdate repositori, perintahnya.

sudo apt update

Anda akan diminta password account Anda. Catatan, apabila Anda login sebagai root, Anda bisa melewatkan perintah “sudo”

Setelah selesai melakukan update repository, kita bisa mulai melakukan installasi AMP(Apache, Mysql dan PHP).

sudo apt install apache2 php php-cli libapache2-mod-php php-gd php-curl php-mysql php-zip php-mcrypt php-xml php-mbstring

And akan menemukan error karena php-mcrypt usdah tidak terdaftar di Ubuntu 18.04

Berikut beberapa penjelasan package yang akan terinstall:

Nama package Notes
apache2  Apache2 server
php PHP7 core (PHP ver 7.0 untuk Ubuntu 16.04)
php-cli Tools agar PHP dapat diexecute via CLI/Bash/Shell command
libapache2-mod-php Konektor PHP dan Apache2
Di Ubuntu 12.04 packagae ini terinstall otomatis, tetapi di versi ini harus diinstall manual, atau Apache tidak akan meng-eksekusi file PHP
php-gd Standard Image processor PHP
php-curl Extension PHP untuk abstraksi cURL command yang mana digunakan untuk melakukan koneksi dan operasi transmitter data ke berbagai jenis protocol.
Biasanya digunakan untuk mengirim request ke berbagai API/REST API.
php-mysql Mysql extension. Dibutuhkan untuk mengkoneksikan applikasi PHP ke Mysql
php-zip  [optional] PHP Zip extension
php-mcrypt Mcrypt extension untuk PHP. Digunakan untuk berbagaimacamm enkripsi.

Disarankan tidak menggunakan fungsi-fungsi mcrypt lagi karena deprecated di versi PHP mendatang. Gunakan untuk back-compatibility only.

php-xml  Simple XML extension for PHP
php-xdebug [Optional] Debug extension untuk PHP. Install ini pada server development saja.
php-mbstring Multibyte string support(dibutuhkan oleh PHPMyadmin.
php-redis [Optional]  Redis handler.

Ada banyak extension lain, yang dapat diinstall. Anda bisa melihatnya dengan perintah:

apt search php-

List di atas, mungkin sudah cukup untuk standard applikasi server. Tekan enter, dan jawab dengan “Y” untuk melakukan installasi.

Setelah selesai, ada beberapa path/alamat yang perlu diperhatikan:

Apache Virtual host /etc/apache2/sites-available/
Semua virtualhost(situs) yang bisa diaktifkan berada pada directory ini.
Apache Virtual host(active) /etc/apache2/sites-enabled/
Semua virtualhost/situs yang aktif ada pada directory ini. File disini adalah symbolic Link dari file dengan nama yang sama apda folder “/etc/apache2/sites-available/
PHP config(Apache) /etc/php/7.0/apache2/php.ini
Ubuntu memisahkan setiap config PHP berdasarkann “pemanggilnnya” sehingga apabila Anda memanggilnya melalui apache, dia akan ada di folder apache.Apabila Anda menggunakan CLI(command line Interface/bash/terminal termasuk apabila Anda mengeksekusi PHP dari cronjob misalnya), configurasi yang digunakan berada di path:
/etc/php/7.0/cli/php.ini
Root directory(default)  /var/www/html/
Directory root default site/virtualhost apache (Anda bisa melihat path ini di-state pada file virtualhost default yang dibuat oleh Apache2 pada saat installasi: /etc/apache2/sites-available/000-default.conf)

Setelah installasi selesai, Anda bisa membuka browser Anda dan mengetikan “http://[your-server-ip-address]/” Apabila browser menampilkan layar seperti berikut, tandanya Apache2 telah berhasil diinstall,

apache_test

Setelah kita mengecek status Apache, berikutnya kita akan mengecheck installasi PHP dengan membuat standard PHP info page. Anda bisa menggunakan text editor kesukaan Anda, saya akan menggunakan nano sebagai contoh.

nano /var/www/html/info.php

kemudian ketikan php code:

<?php phpinfo();

Setelah itu Anda bisa menyimpannya dengan kombinasi:

  • Ctrl + X
  • tekan Y kemudian ENTER

Arahkan browser ke alamat “http://[your-server-ip-address]/info.php”.  Apabila browsre Anda memunculkan tampilan seperti berikut ini, maka installasi PHP juga telah berhasil.

php

Sebenarnya sampai sini bisa dibilang selesai, hanya saja untuk Anda yang akan menggunakan LAMP server ini untuk applikasi yang menggunakan “Pretty URL” seperti halnya CodeIgniter, Laravel, dan lain-lain Anda perlu mengaktifkan mod-rewrite milik Apache2.

Ketikan command:

a2enmod rewrite

Setelah itu Anda perlu mengedit file virtualhost Anda. buka file default dengan menggunakan perintah:

nano /etc/apache2/sites-available/000-default.conf

Tambahkan seperti snippet berikut ini(highlight biru).

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin [email protected]
        DocumentRoot /var/www/html

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        <Directory "/var/www/html">
            AllowOverride All
        </Directory>

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

Setelah itu simpan file dan restart apache server dengan perintah.

service apache2 restart

And so, Apache and PHP server is ready 🙂

Langkah terakhir adalah menginstall MySQL 🙂

Dalam tutorial kali ini, saya akan menggunakan MariaDB bukan standard Mysql. Secara program MariaDB merupakan “branch” atau “cabang” pengembangan dari MySQL sendiri. MariaDB sendiri sudah banyak digunakan oleh bannyak situs, Linux Server system, bahkan Google sendiri.

Untuk menginstallnya, ketikperintah berikut ini:

apt intsall mariadb-server

Setelah selesai, ada beberapa hal yang Anda harus lakukan:

  1. Set root password, dengan menjalankan perintah:

    sudo mysql_secure_installation

    Anda akan ditanya beberapa pertanyaan:

    Enter current password for root (enter for none):

    Tekan Enter saja, karena default root password adalah kosong.

    Set root password? [Y/n] y

    Masukan Password root baru Anda dua kali

    New password: 
    Re-enter new password:

    Pada beberapa pertanyaan berikutnya Anda dapat menghapus anonym user, dll Anda bisa melakukan apabila Anda menginginkannya.
    Pada akhir pertanyaan Anda akan ditanya untuk melakukan reload data hak akses, jawab “y”

    Reload privilege tables now? [Y/n] y

    Dan persiapan selesai…

  2. Membuka akses ROOT untuk koneksi via TCP .MariaDB secara default hanya membuka koneksi via Unix Socket sehingga apabila Anda mempunyai rencana untuk menggunakan phpmyadmin untuk mengelola database, Anda tidak dapat menggunakan account root(well walau sebenarnya cukup baik juga untuk keamanan).
    Untuk membukanya Anda dapat masuk ke command line MariaDB dengan perintah:

    mysql -uroot -p[root-password]

    use mysql;

    update user set plugin='' where User='root';

    flush privileges;

    exit

Okay, semua persiapan sudah bsia dibilang selesai. Sisanya mungkin Anda inngin menngubah beberapa konfigurasi PHP yang agak umum/biasanya saya rubah adalah:

  1. Max Upload size, biasanya secara default hanya 2 Megabytes. Apabila kurang, anda harus mengubah beberapa config di php.ini Antara lain
    Nama config Keterangan
    post_max_size besar dari opsi ini harus >= max upload size
    upload_max_filesize Jumlah maksimum besar file yang dapat diupload
  2. Mengaktifkan/Nonaktifkan error reporting.
    Ketika terjadi synctax error, biasanya browser akan menampilkan pesan error(menjelaskan errornya apa dan dimana). Anda bisa mengaktifkan/menonaktifkan dengan mengganti value dari opsi “display_errors” (On atau Off)
  3. Mengubah Timezone.
    Apabila Anda membuat applikasi yang sangat “peka” pada waktu, Anda mungkin tidak dapat melewatkan konfigurasi ini.
    Nama opsi untuk mmengatur timezone adalah “date.timezone” (Listnya dapat dilihat pada website PHP). Sebagai contoh saya menggunakan “Asia/Jakarta” (gunakan tanda kutip).

Optional step, Anda bisa mmenginstall phpmyadmin apabila Anda menginginkannya. Banyak guide yang menggunakan installer dari package, tetapi saya lebih suka emnggunakan latest version yang bisa di download melalui website phpmyadmin sendiri(versi terakhir untuk sekarang bisa di download dengan link: https://files.phpmyadmin.net/phpMyAdmin/4.7.1/phpMyAdmin-4.7.1-all-languages.zip),

Download dengan perintah wget:

wget https://files.phpmyadmin.net/phpMyAdmin/4.7.1/phpMyAdmin-4.7.1-all-languages.zip

Unzip dengan perintah(mungkin Anda perlu menginstall package zip/unzip dengan menggunakan perintah “apt install unzip”):

unzip phpMyAdmin-4.7.1-all-languages.zip

setelah itu Anda pindahkan ke folder root directory(“/var/www/html/”) dengan perintah(mungkin And a butuh menambahkan perintah sudo di awal command berikut):

mv phpMyAdmin-4.7.1-all-languages /var/www/html/phpmyadmin

Setelah berhasil menjalankan perintah di atas, Anda bisa mengarahkan browser ke “http://[server-ip-address]/phpmyadmin”, maka halaman login phpmyadmin akan muncul seperti gambar berikut ini.

phpmyadmin

Apabila Anda tidak bisa menggunakan fungsi “mysqli” mungkin Anda butuh menginstall package mysql-client:

apt install mysql-client

Kemudian, restart service apache2

Kira-kira begitulah step-by-step memmpersiapkan server LAMP. Server ini bisa digunakan baik untuk internal(intranet) ataupun web site hosting(Internet). Tetapi Apabila Anda hendak menggunakan untuk website(internet) Anda harus memiliki IP publik terlebih dahulu, minimal agar server Anda bisa diakses dari Internet luas.

Apabila Anda tertarik, mungkin Anda bisa mencoba cloud hosting seperti Digital Ocean(Mulai dari 5US$/bulan pembayaran via credit card atau paypal) atau Amazon Web Services(Free 1 year tetapi membutuhkan credit card untuk autentikasi) untuk langsung prakteknya. Dengan menggunakan provider tersebut, Anda dapat mendapatkan 1 server publik yang dapat diakses dari internet.

Dalam tutorial selanjutnya, saya akan menggunakan Digital Ocean(DO) sebagai contoh kasusnya.

Apabila Anda telah memiliki Domain dan hendak menghubungkan dengan server Anda ini, Anda bisa melanjutkan ke tutorial berikutnya : Apache2 web server, Domain dan DNS