Cara Deploy CodeIgniter dengan Nginx di VPS Ubuntu 18.04

CodeIgniter biasanya digunakan untuk memudahkan web developer untuk membuat aplikasi web secara instan menggunakan framework. Mengelola framework CodeIgniter bisa dilakukan di cPanel hosting atau langsung dari VPS. Di artikel ini kamu akan mempelajari bagaimana cara Deploy CodeIgniter dengan Nginx di VPS Ubuntu versi 18.04.

Framework

Framework adalah kumpulan fungsi atau class yang sudah tersedia dan dapat digunakan untuk membuat aplikasi website. Alhasil, developer tak perlu lagi membuat fungsi dari nol, karena mereka bisa langsung menggunakan fungsi yang tersedia pada framework yang digunakan.

CodeIgniter

CodeIgniter adalah sebuah aplikasi open-source dengan model MVC (Model, View, Controller) yang dapat dimodifikasi gratis oleh semua orang. Aplikasi ini dapat membuat sebuah website dinamis menggunakan bahasa pemrograman PHP, CodeIgniter juga memudahkan developer untuk membuat aplikasi website dengan cepat dan mudah daripada membuat dari awal.

MVC

Model

Model bertugas untuk mengelola data yang berhubungan dengan database, seperti mengambil data, menginput data, atau mengolah database. Intinya, semua fungsi atau instruksi yang berhubungan pada database ada pada Model.

View

View bertugas untuk mendesain halaman user interface yang akan dilihat oleh pengguna atau pengunjung website. Views terpisah dari Model dan Controller sehingga pengembangan website dapat dilakukan lebih baik.

Controller

Controller bertugas sebagai perantara Model dan View sehingga saat ada permintaan dari user, maka Views akan menghubungkan Controller ke Model. Sederhananya, View mengirimkan instruksi yang akan diproses oleh Controller.

Alur Kerja CodeIgniter

alur kerja codeigniter

  1. Pengguna mengirimkan permintaan (request) ke web.
  2. Eksekusi pertama kali pada file index.php.
  3. Index.php akan meneruskan request tersebut ke routing (routers.php).
  4. Routing akan mencari cache yang tersedia pada website, apabila ditemukan cache, maka cache tersebut yang akan diberikan (response) ke permintaan (request) pengguna. Namun jika tidak ada cache, baru diteruskan ke Controller.
  5. Controller bertanggung jawab atas permintaan (request) pengguna dengan mengambil data pada Model dan di-render ke dalam View dengan menggunakan plugins, helpers, atau libraries yang tersedia.
  6. Hasil render tersebut akan dikirim ke pengguna melewati cache, agar ketika View mengirimkan ke pengguna, data akan disimpan ke dalam cache terlebih dahulu jika fitur caching diaktifkan, lalu dikirimkan ke pengguna.

Persiapan Cara Deploy CodeIgniter

Sebelum memulai cara deploy CodeIgniter, ada beberapa hal yang harus kamu persiapkan, yaitu:

  1. Pastikan kamu sudah memiliki cloud server/VPS dan domain. Jika belum, kamu bisa membeli Cloud VPS dan domain terlebih dulu.
  2. Akses root ke VPS

Cara Deploy CodeIgniter di VPS Ubuntu 18.04

Saat melakukan deploy CodeIgniter di VPS, ada beberapa cara yang perlu kamu lakukan, yaitu:

  • Update Server
  • Instalasi Nginx (sebagai web server)
  • Instalasi PHP dann Konfigurasi PHP-FPM
  • Instalasi dan Konfigurasi MariaDB (sebagai database)
  • Download CodeIgniter
  • Instalasi SSL dan Konfigurasi Virtual Host
  • Instalasi Firewall
  • Konfigurasi CodeIgniter
  • Testing

Berikut ini adalah penjelasannya:

Update Server

Pertama, pastikan terlebih dulu, apakah server sudah diperbarui. Tujuannya, agar package-nya juga ikut ter-update lalu lakukan reboot server.

 

$ apt-get update -y

$ reboot

Instalasi Nginx

Di langkah kedua ini, kamu perlu menginstal web server, yaitu Nginx.

 

$ apt-get install nginx -y

 

Start dan enable on-boot pada Nginx.

 

$ systemctl start nginx 

$ systemctl enable nginx

 

Proses instalasi Nginx sudah selesai.

Instalasi PHP dan Konfigurasi PHP-FPM

Sebaiknya, gunakan CodeIgniter versi 7.0, untuk instalasi PHP versi 7.0 diperlukan PPA (Personal Package Archives), maka tambahkan PPA ondrej/php yang memiliki package php versi 7.2 dan extension php lain yang dibutuhkan.

Selain itu, untuk CodeIgniter 4, gunakan minimal php versi 7.2.

 

$ apt install software-properties-common

$ add-apt-repository ppa:ondrej/php

$ sudo apt update

 

Instal PHP 7.2 dan beberapa extension yang diperlukan menggunakan perintah dibawah ini:

 

$ apt-get install graphviz aspell ghostscript php7.2-fpm php7.2-cli php7.2-pspell php7.2-curl php7.2-gd php7.2-intl php7.2-mysql php7.2-mysqli php7.2-xml php7.2-xmlrpc php7.2-ldap php7.2-zip php7.2-json php7.2-opcache php7.2-readline php7.2-mbstring php7.2-soap -y

 

Setelah instalasi php 7.2 dan beberapa extension lainnya selesai, maka selanjutnya konfigurasi PHP-FPM.

 

$ nano /etc/php/7.2/fpm/pool.d/www.conf

 

Mengingat web server yang digunakan adalah Nginx, maka ubah user dan group menjadi www-data.

 

user = www-data

group = www-data

listen.owner = www-data

listen.group = www-data

listen.mode = 0660

 

Lalu uncomment pada security limit extension, hanya enable .php saja.

 

security.limit_extensions = .php

 

Uncomment PHP Environment.

 

env[HOSTNAME] = $HOSTNAME

env[PATH] = /usr/local/bin:/usr/bin:/bin

env[TMP] = /tmp

env[TMPDIR] = /tmp

env[TEMP] = /tmp

 

Save dan exit.

 

Kemudian pada php.ini di PHP 7.2 dan PHP 7.2-FPM perlu diubah.

 

PHP 7.2

$ nano /etc/php/7.2/cli /php.ini

 

PHP 7.2-FPM

$ nano /etc/php/7.2/fpm/php.ini

 

Sesuaikan value-nya dengan di bawah ini.

 

upload_max_filesize = 32M 

post_max_size = 48M 

memory_limit = 512M 

max_execution_time = 600 

max_input_time = 1000

max_input_vars = 3000 

 

Save dan exit.

 

Lalu tes konfigurasi tersebut untuk mengetahui salah atau benar.

 

$ php-fpm7.2 -t
NOTICE: configuration file /etc/php/7.2/fpm/php-fpm.conf test is successful

 

Kemudian restart services fpm-nya.

$ service php7.2-fpm restart

Instal dan Konfigurasi MariaDB

Di artikel ini, kami menggunakan MariaDB versi 10.4, karena MySQL-nya sudah deprecated atau sudah outdated sehingga dilanjutkan dengan MariaDB. Untuk melakukan instalasi MariaDB, kamu perlu menambahkan repository key untuk mendapatkan packages yang terbaru dari MariaDB.

 

$ apt-key adv –recv-keys –keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8

$ add-apt-repository “deb [arch=amd64,arm64,ppc64el] http://mariadb.mirror.liquidtelecom.com/repo/10.4/ubuntu $(lsb_release -cs) main”

$ apt-get update -y 

$ apt-get install mariadb-server -y

 

Untuk mengecek versi MariaDB, gunakan perintah di bawah ini.

$ mysql -V

mysql  Ver 15.1 Distrib 10.4.13-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

 

Kemudian start dan enable on-boot.

 

$ systemctl start mariadb

$ systemctl enable mariadb

 

MariaDB ataupun MySQL berjalan pada port 3306, lakukan secure installation.

 

Enter current password for root (enter for none):

OK, successfully used password, moving on…

 

Switch to unix_socket authentication [Y/n] y

Enabled successfully!

Reloading privilege tables..

 … Success!

 

Change the root password? [Y/n] y

New password:

Re-enter new password:

Password updated successfully!

Reloading privilege tables..

 … Success!

 

Remove anonymous users? [Y/n] y

 … Success!

 

Disallow root login remotely? [Y/n] y

 … Success!

 

Remove test database and access to it? [Y/n] y

 – Dropping test database…

 … Success!

 – Removing privileges on test database…

 … Success!

 

Reload privilege tables now? [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!

 

Konfigurasi MariaDB sudah selesai.

Kemudian, kamu perlu membuat database untuk keperluan konfigurasi CodeIgniter dan grant privileges-nya.

 

$ mysql -u root -p

Masukkan password yang tadi digunakan saat melakukan secure installation.

CREATE DATABASE cidb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE USER ‘ciuser’@’localhost’ IDENTIFIED BY ‘p4ssw0rd123’;

GRANT ALL PRIVILEGES ON cidb.* TO ‘ciuser’@’localhost’ IDENTIFIED BY ‘p4ssw0rd123’;

FLUSH PRIVILEGES;

Jika diikuti dengan tepat sampai cara ini, seharusnya kamu sudah berhasil membuat user dan database untuk deploy CodeIgniter.

Download CodeIgniter

Langkah selanjutnya adalah mengunduh CodeIgniter dari website resminya langsung. Tapi sebelum itu, kunjungi directory web dahulu. 

Di artikel ini, yang digunakan adalah CodeIgniter versi 4.0. Bedanya, index.php pada versi 4.0 sudah berada di /public/ sehingga konfigurasi virtual host nanti directory-nya diarahkan ke public.

 

$ cd /var/www/

$ wget https://github.com/codeigniter4/framework/archive/v4.0.4.zip

$ unzip v4.0.4.zip

 

Ubah nama directory dari “framework-4.0.4” menjadi “codeigniter”:

 

$ mv framework-4.0.4/ codeigniter

 

Ubah permission dan owner dari directory CodeIgniter.

 

$ chown -R www-data:www-data /var/www/codeigniter

$ chmod 755 /var/www/codeigniter

 

Proses download CodeIgniter sudah selesai.

Instalasi SSL dan Konfigurasi Virtual Host

Jangan lupa untuk meningkatkan keamanan website, salah satunya adalah dengan menggunakan SSL. Di sini, kami menggunakan SSL Let’s Encrypt, karena gratis dan dapat diinstal secara bebas. 

Tapi, pastikan dulu domain kamu sudah diarahkan ke IP VPS.

$ systemctl stop nginx

$ cd /opt/

 

Kemudian, clone Let’s Encrypt dari github repository.

 

$ git clone https://github.com/letsencrypt/letsencrypt

$ ./letsencrypt/letsencrypt-auto certonly –standalone 

 

Lalu ikuti instruksinya.

 

Path sertifikat ada pada:/etc/letsencrypt/live/namadomain/

Full Chain: /etc/letsencrypt/live/namadomain/fullchain.pem

Private Key: /etc/letsencrypt/live/namadomain/privkey.pem

Jika sertifikat SSL sudah dipastikan terinstal pada domainmu, maka langkah selanjutnya adalah konfigurasi virtual host.

 

Ke directory Nginx, lalu buat virtual host file codeigniter.conf

$ cd /etc/nginx/

$ nano conf.d/codeigniter.conf

 

# PHP Upstream Handler

upstream php-handler {

    server unix:/run/php/php7.2-fpm.sock;

}

 

# Nginx redirect HTTP to HTTPS – codeigniterubuntu.dewiweb.net

server {

    listen 80;

    server_name codeigniterubuntu.dewiweb.net;

    # enforce https

    return 301 https://$server_name$request_uri;

}

 

# HTTPS

server {

        listen 443 ssl;     # port default untuk https

    server_name codeigniterubuntu.dewiweb.net;

 

        # Grade A

        # Use certificate and key provided by Let’s Encrypt:

        ssl_certificate /etc/letsencrypt/live/codeigniterubuntu.dewiweb.net/fullchain.pem;

        ssl_certificate_key /etc/letsencrypt/live/codeigniterubuntu.dewiweb.net/privkey.pem;

ssl_session_timeout 5m;

        ssl_protocols TLSv1.2 TLSv1.3;

        ssl_prefer_server_ciphers on;

        ssl_ciphers ‘ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256’;

 

        # Root Code Igniter Directory

        root /var/www/codeigniter/public;

        rewrite ^/(.*\.php)(/)(.*)$ /$1?file=/$3 last;

 

        location ^~ / {

                try_files $uri $uri/ /index.php?q=$request_uri;

                index index.php index.html index.htm;

 

                location ~ \.php$ {

                        include fastcgi.conf;

                        fastcgi_pass php-handler;

                }

        }

}

 

Save dan exit.

 

Tes konfigurasi Nginx dan pastikan tidak ada error, kemudian restart Nginx.

 

$ nginx -t

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

nginx: configuration file /etc/nginx/nginx.conf test is successful

 

$ systemctl start nginx

 

Jika diikuti dengan benar, saat kamu melakukan pemindaian SSL Server Test pada SSL Labs akan seperti ini hasilnya.

cara deploy codeigniter ssl report

Saat ini, proses instalasi SSL dan konfigurasi Virtual Host sudah selesai.

Instalasi Firewall

Pada Firewall ini kami menggunakan Config Security & Firewall (CSF).

 

$ cd /usr/src

$ wget https://download.configserver.com/csf.tgz 

$ tar -xzf csf.tgz

$ install.sh

Edit csf.conf lalu ubah value make TESTING menjadi 0.

 

$ nano /etc/csf.conf

make TESTING=’0’

 

Save dan exit.

 

Reload csf dengan perintah di bawah ini.

 

$ csf -r

Konfigurasi CodeIgniter

Selanjutnya, kamu perlu melakukan konfigurasi pada file-file config yang ada di CodeIgniter.

Untuk konfigurasi database, kunjugi directory CodeIgniter (/var/www/codeigniter/app/Config/)

 

$ cd /var/www/codeigniter/app/Config/

$ nano Database.php

 

Ubah pada bagian berikut dan samakan dengan database yang kamu buat sebelumnya.

‘hostname’ => ‘localhost’,

‘username’ => ‘ciuser’,

‘password’ => ‘p4ssw0rd123’,

‘database’ => ‘cidb’,

 

Save dan exit.

Testing

Coba akses website-mu pada browser yang kamu gunakan.

cara deploy codeigniter berhasil

Tampilan ini menunjukkan cara deploy CodeIgniter dengan Nginx di VPS Ubuntu 18.04 telah berhasil.

Simpulan

Jika kamu mengikuti cara deploy ini dari awal sampai akhir dengan tepat, seharusnya CodeIgniter sudah bisa kamu operasikan. Selain itu, kamu bisa lakukan pengembangan pada website-mu sesuai dengan dokumentasi yang diberikan oleh CodeIgniter.

Namun, agar aplikasi website buatanmu dapat beroperasi semaksimal mungkin, pastikan kamu menggunakan hosting yang aman dan cepat, agar saat pengunjung menggunakan aplikasi website-mu, mereka tidak mengalami kesulitan. Selain itu, website-mu yang cepat dan aman juga berkesempatan mendapatkan peringkat baik dari Google, lho!

Demikian artikel tentang cara deploy CodeIgniter ini, jangan sungkan untuk meninggalkan ide-ide topik yang ingin kamu baca di blog Dewaweb, ya. Semoga artikel ini membantu!