PostgreSQL adalah salah satu dbms yang menawarkan skalabilitas dan kinerja tinggi berbasis open source.

Pada artikel ini, penulis akan mencoba menjelaskan bagaimana instalasi dan konfigurasi postgreSQL pada linux.

Instalasi PostgreSQL

Silahkan buat sebuah file pgdg.list di dalam folder /etc/apt/sources.list.d/. Kemudian isikan file tersebut dengan codingan berikut.

deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main

kemudian lakukan import key dengan menjalankan perintah berikut.

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
  sudo apt-key add -

kemudian lakukan update repository dengan perintah

sudo apt-get update

dan langkah selanjutnya adalah lakukan instalasi postgreSQL dengan perintah

sudo apt-get install postgresql-9.5

Konfigurasi PostgreSQL

Setelah melakukan instalasi postgresql, langkah selanjutnya adalah melakukan konfigurasi postgreSQL. Konfigurasi yang akan kita lakukan adalah konfigurasi user dan instalasi pgadmin pada postgreSQL.

Konfigurasi User Pada PostgreSQL

Silahkan jalankan perintah berikut untuk melakukan konfigurasi user pada postgreSQL.

sudo -u postgres psql postgres

Kemudian ketikan codingan \password postgres, kemudian tekan enter lalu masukkan password untuk default user yang kita gunakan, secara default user yang digunakan adalah postgres. Untuk keluar dari cli psql silahkan jalankan perintah \q.

Membuat User Dan Database

Untuk membuat user baru kita dapat melakukannya dengan perintah berikut melalui terminal tanpa perlu login ke psql.

createuser -h localhost -U postgres -D -A -P rizki

perintah diatas terdapat fungsi diantaranya adalah

  • createuser : untuk membuat user baru
  • -h : artinya kita membuat user berdasarkan host di locahost
  • -U : kita ingin membuat user berdasarkan user default dari postgreSQL, secara default postgres adalah user default pada postgreSQL
  • -D : artinya user yang kita buat tidak dapat membuat database
  • -A : artinya user yang kita buat tidak dapat membuat user baru
  • -P : artinya user yang kita buat akan menggunakan password

maka akan muncul perintah seperti berikut

rizki@rizki-HP-431-Notebook-PC:~$ createuser -h localhost -U postgres -D -A -P rizki
Enter password for new role: 
Enter it again: 
Password:

berikut adalah penjelasan singkat dari masing - masing baris diatas.

  • baris pertama dan kedua adalah password yang akan kita masukkan untuk user yang kita buat, misalnya disini penulis membuat user rizki
  • baris ketiga adalah password dari default user atau super user yang kita gunakan, secara default kita masih menggunakan user postgres

Langkah selanjutnya adalah membuat database, untuk membuat database baru silahkan jalankan perintah berikut.

createdb -h localhost -U postgres -E utf-8 -O rizki belajar-postgresql

codingan diatas berfungsi untuk membuat database baru, berikut adalah penjelasan dari sintak diatas.

  • createdb : untuk membuat database baru
  • -h : host yang kita gunakan
  • -U : user default untuk membuat database dan memiliki akses untuk membuat database baru
  • -E : artinya database yang akan kita buat memiliki format encoding utf-8
  • -O : artinya adalah database yang dibuat ini diberikan izin akses kepada user rizki
  • belajar-postgresql : adalah nama dari database yang kita buat.

kemudian masukkan password berdasarkan user postgres. Untuk login ke database melalui terminal, jalankan perintah berikut.

psql -h localhost -U rizki belajar-postgresql

masukkan password berdasarkan user yang anda buat, maka akan muncul tampilan seperti berikut.

rizki@rizki-HP-431-Notebook-PC:~$ psql -h localhost -U rizki belajar-postgresql 
Password for user rizki: 
psql (9.5.1)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

belajar-postgresql=>

Melakukan Instalasi PGAdmin

PGAdmin adalah salah satu editor atau GUI untuk melakukan akses terhadap database postgreSQL.

Sebenarnya masih banyak GUI yang lain untuk melakukan akses terhadap database postgreSQL, akan tetapi penulis hanya menggunakan pgAdmin, mengapa demikian ? dikarenakan kemudahan dalam konfigurasi database postgreSQL pada pgAdmin. Untuk melakukan instalasi pgAdmin silahkan jalankan perintah berikut.

sudo apt-get install pgadmin3

kemudian silahkan buka pgadmin, maka akan muncul tampilan seperti berikut.

Screenshot from 2016-02-12 22:52:50.png

kemudian silahkan pilih file lalu pilih add server, kemudian silahkan lakukan konfigurasi seperti gambar dibawah ini

Screenshot from 2016-02-12 22:54:52.png

jika berhasil maka anda dapat melakukan akses database seperti berikut.

Screenshot from 2016-02-12 22:56:18.png

Latihan Query SQL Pada PostgreSQL

Query yang akan kita pelajari disini hanya terdapat 4 yaitu dari select, insert, update dan delete. Untuk masalah query tidak memiliki perbedaan dengan dbms lain seperti mysql, mariadb, oracle dan lain sebagainya.

Query Select

Query select berfungsi untuk mengambil data, sebelum menjalankan query select, kita akan membuat tabel terlebih dahulu, silahkan login terlebih dahulu melalui terminal anda ke psql. Setelah selesai kemudian jalankan perintah berikut.

CREATE TABLE mahasiswa(
    npm VARCHAR(8),
    nama VARCHAR(50) not null,
    kelas VARCHAR(5) not null,
    PRIMARY KEY(npm)
);

jalankan perintah diatas per baris, jika berhasil maka akan muncul seperti ini.

belajar-postgresql=> CREATE TABLE mahasiswa(
belajar-postgresql(> npm VARCHAR(8),
belajar-postgresql(> nama VARCHAR(50) not null,
belajar-postgresql(> kelas VARCHAR(5) not null,
belajar-postgresql(> PRIMARY KEY(npm)
belajar-postgresql(> );
CREATE TABLE

untuk mengambil semua data, kita dapat melakukannya dengan perintah.

SELECT * FROM mahasiswa;

maka akan muncul seperti ini.

belajar-postgresql=> SELECT * FROM mahasiswa;
 npm | nama | kelas 
-----+------+-------
(0 rows)

dapat dilihat bahwa data masih kosong dikarenakan kita belum melakukan inputan terhadap data mahasiswa.

Query Insert

Query insert pada postgreSQL juga sama seperti pada dbms umunya, silahkan jalankan perintah berikut berikut untuk menyimpan sebuah data mahasiswa.

INSERT INTO mahasiswa (npm, nama, kelas) VALUES ('58412085', 'Rizki Mufrizal', '4IA04');

jika berhasil maka akan muncul output seperti berikut.

belajar-postgresql=> INSERT INTO mahasiswa (npm, nama, kelas) VALUES ('58412085', 'Rizki Mufrizal', '4IA04');
INSERT 0 1

kemudian lakukan pengecekan apakah data telah disimpan atau tidak dengan perintah select, jika data tersimpan maka akan muncul output seperti berikut.

belajar-postgresql=> SELECT * FROM mahasiswa;
   npm    |      nama      | kelas 
----------+----------------+-------
 58412085 | Rizki Mufrizal | 4IA04
(1 row)

Query Update

Query update biasanya digunakan untuk memperbarui sebuah data, untuk melakukan query update silahkan jalan perintah berikut.

UPDATE mahasiswa SET nama = 'Rizki M', kelas = '4IA04' WHERE npm = '58412085';

jika berhasil maka akan muncul output seperti berikut.

belajar-postgresql=> UPDATE mahasiswa SET nama = 'Rizki M', kelas = '4IA04' WHERE npm = '58412085';
UPDATE 1

kemudian lakukan pengecekan lagi dengan query select dan outputnya seperti berikut.

belajar-postgresql=> SELECT * FROM mahasiswa;
   npm    |  nama   | kelas 
----------+---------+-------
 58412085 | Rizki M | 4IA04
(1 row)

Query Delete

Query yang terakhir adalah delete. Query ini berfungsi untuk menghapus data pada database. Jalankan perintah berikut untuk menghapus data.

DELETE FROM mahasiswa WHERE npm = '58412085';

jika berhasil maka akan muncul output seperti berikut.

belajar-postgresql=> DELETE FROM mahasiswa WHERE npm = '58412085';
DELETE 1

kemudian lakukan pengecekan kembali dengan perintah select dan berikut adalah hasilnya.

belajar-postgresql=> SELECT * FROM mahasiswa;
 npm | nama | kelas 
-----+------+-------
(0 rows)

Sekian artikel mengenai instalasi dan konfigurasi postgreSQL dan terima kasih :).

Berhubung penulis sedang membuat konfigurasi dan instalasi aplikasi pada ubuntu dengan menggunakan bahasa shell maka pada artikel ini, penulis akan membahas sedikit tentang shell script :D. Sebelum penulis membahas tentang shell, alangkah baiknya kita membahas sedikit teori tentang shell.

Apa itu Shell ?

Shell adalah sebuah program penterjemah yang berfungsi sebagai jembatan antara user dan kernel.

Biasanya shell akan menyediakan sebuah interface, dimana interface ini berfungsi sebagai tempat untuk memberikan perintah - perintah. Linux memiliki berbagai macam shell, diantaranya adalah :

  • Bourne shell(sh)
  • C shell(csh)
  • Korn shell(ksh)
  • Bourne again shell(bash)
  • dsb

Pada artikel ini, penulis hanya menggunakan bash shell GNU yang merupakan pengembangan dari bourne shell.

Apa itu Shell Script ?

Shell Script adalah sebuah bahasa pemrograman yang disusun berdasarkan perintah - perintah shell.

Jika anda menggunakan linux, maka menyusun perintah - perintah shell di dalam sebuah file shell sama seperti ketika anda membuat sebuah aplikasi. Agar artikel tidak terlalu panjang, mari kita bahas bagaimana implementasi shell script pada linux.

Setup Vagrant

Seperti biasanya, penulis akan menggunakan vagrant. Bagi yang belum mengerti apa itu vagrant, silahkan akses di Belajar Vagrant. Kali ini kita akan menggunakan box debian/jessie64 atau debian 8.

Silahkan buat sebuah folder belajar-shell kemudian jalankan perintah

vagrant init

Buka file Vagrantfile lalu ubah konfigurasinya menjadi seperti berikut.

Vagrant.configure(2) do |config|

    #konfigurasi box untuk sistem operasi debian 8 64 bit
    config.vm.box = "debian/jessie64"

    config.vm.provider "virtualbox" do |vb|
    
        #konfigurasi virtual box dengan ram 1 GB
        vb.memory = "1024"
    end

end

Kemudian jalankan vagrant dengan perintah

vagrant up

lalu login ke vagrant dengan perintah

vagrant ssh

Membuat Hello Word Dengan Shell Script

Sebelum memulai, silahkan install editor terlebih dahulu, penulis menggunakan editor vim. Untuk melakukan instalasi vim, jalankan perintah berikut.

sudo apt-get install vim

Setelah selesai melakukan instalasi vim, selanjutkan buat sebuah file dengan perintah

touch belajar.sh

kemudian buka file belajar.sh dengan perintah

vim belajar.sh

Untuk memasukkan codingan, silahkan tekan tombol i kemudian ketikkan kodingan berikut.

#!/bin/sh
#
# Copyright (C) 2016 Rizki Mufrizal <mufrizalrizki@gmail.com>
#
# Distributed under terms of the MIT license.
#

echo "hello word"

setelah selesai, tekan tombol esc kemudian ketik tuliskan perintah

:wq

maka secara otomatis vim akan menyimpan codingan tersebut ke dalam file belajar.sh. Langkah selanjutnya adalah kita akan memberikan hak execute untuk file tersebut, Silahkan jalankan perintah berikut.

chmod a+x belajar.sh

untuk menjalankan file tersebut dengan perintah.

./belajar.sh

maka akan muncul output hello word, output tersebut berasal dari perintah echo, dimana echo disini sama seperti perintah puts pada ruby, printf pada bahasa c dan sama seperti bahasa pemrograman lainnya.

Membuat Inputan

Tahap selanjutnya adalah membuat inputan, disini user akan memberikan sebuah inputan dimana inputan ini nantinya akan ditampikan lagi. Silahkan buka file belajar.sh lalu ubah codingannya menjadi seperti berikut.

#!/bin/sh
#
# Copyright (C) 2016 Rizki Mufrizal <mufrizalrizki@gmail.com>
#
# Distributed under terms of the MIT license.
#

echo -n "Masukkan nama anda : "
read nama

echo "hello $nama"

perintah read berfungsi untuk mengambil value dari inputan user, dimana inputan user tersebut akan disimpan ke dalam variabel nama lalu variabel nama tersebut di cetak pada perintah echo yang kedua.

Membuat Konfigurasi File

Setelah melewati cara inputan user, langkah selanjutnya adalah kita ingin membuat konfigurasi file pada linux. Misalnya kita ingin membuat konfigurasi file environment pada debian dan melakukan update software. Untuk melakukan konfigurasi pada file environment, maka ubah codingan pada file belajar.sh menjadi berikut.

#!/bin/sh
#
# Copyright (C) 2016 Rizki Mufrizal <mufrizalrizki@gmail.com>
#
# Distributed under terms of the MIT license.
#

echo -n "masukkan user linux anda : "
read user

echo "install maven"
mkdir -p /home/$user/programming/build-tool/apache-maven
wget http://mirror.wanxp.id/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
tar -xvzf apache-maven-3.3.9-bin.tar.gz
rm apache-maven-3.3.9-bin.tar.gz
mv apache-maven-3.3.9/* /home/$user/programming/build-tool/apache-maven/
rmdir apache-maven-3.3.9/

echo "membuat file environment"
touch environment

echo "membuat path maven"
echo "M2_HOME=/home/$user/programming/build-tool/apache-maven" | tee -a /home/$user/environment

echo "copy file environment"
sudo cp environment /etc/environment

Perintah diatas berfungsi untuk melakukan konfigurasi maven, dimana kita akan membuat sebuah folder berdasarkan nama user linux, kemudian path ditambahkan ke dalam konfigurasi environment, hasil konfigurasi environment tersebut akan copy ke file environment yang aslinya.

File shell ini juga dapat melakukan perintah - perintah ubuntu seperti :

  • apt-get update
  • apt-get upgrade
  • dsb

Pada artikel ini, penulis mencoba melakukan update dan upgrade aplikasi pada debian. Silahkan ubah codingan pada file belajar.sh seperti berikut.

#!/bin/sh
#
# Copyright (C) 2016 Rizki Mufrizal <mufrizalrizki@gmail.com>
#
# Distributed under terms of the MIT license.
#

echo -n "masukkan user linux anda : "
read user

echo "install maven"
mkdir -p /home/$user/programming/build-tool/apache-maven
wget http://mirror.wanxp.id/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
tar -xvzf apache-maven-3.3.9-bin.tar.gz
rm apache-maven-3.3.9-bin.tar.gz
mv apache-maven-3.3.9/* /home/$user/programming/build-tool/apache-maven/
rmdir apache-maven-3.3.9/

echo "membuat file environment"
touch environment

echo "membuat path maven"
echo "M2_HOME=/home/$user/programming/build-tool/apache-maven" | tee -a /home/$user/environment

echo "copy file environment"
sudo cp environment /etc/environment

echo "update aplikasi"
sudo apt-get update

echo "upgrade aplikasi"
sudo apt-get upgrade -y

echo "dist upgrade aplikasi"
sudo apt-get dist-upgrade -y

kemudian jalankan file tersebut, untuk nama user linux silahkan masukkan vagrant dan outpunya seperti berikut.

membuat file environment
membuat path maven
M2_HOME=/home/vagrant/programming/build-tool/apache-maven
copy file environment
update aplikasi
Ign http://httpredir.debian.org jessie InRelease            
Hit http://security.debian.org jessie/updates InRelease
Hit http://httpredir.debian.org jessie Release.gpg
Hit http://security.debian.org jessie/updates/main Sources
Hit http://security.debian.org jessie/updates/main amd64 Packages
Hit http://httpredir.debian.org jessie Release                                
Hit http://security.debian.org jessie/updates/main Translation-en  
Hit http://httpredir.debian.org jessie/main Sources
Hit http://httpredir.debian.org jessie/main amd64 Packages                
Hit http://httpredir.debian.org jessie/main Translation-en                
Reading package lists... Done
upgrade aplikasi
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
dist upgrade aplikasi
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Sekian tutorial tentang belajar shell script, bagi anda yang ingin melihat konfigurasi untuk instalasi ubuntu, silahkan akses di Perlengkapan Ubuntu dan terima kasih :).

Sebelum kita membuat konfigurasi reverse proxy, ada baiknya kita membahas sekilas tentang proxy :).

Apa Itu Proxy Server ?

Proxy Server adalah sebuah server yang menyediakan layanan perantara antara client host dengan server lain.

Berikut adalah gambaran umum dari proxy server

Screenshot from 2016-01-03 17:07:12.png

Dari gambar diatas dapat dilihat bahwa sebenarnya user atau client melakukan akses terhadap proxy server, selanjutnya proxy server akan meneruskan akses ke server yang dituju. Biasanya proxy server digunakan sebagai cache, keamanan, load balancing dan lain sebagainya.

Apa Itu Reverse Proxy ?

Reverse Proxy adalah salah satu jenis dari proxy, biasanya reverse proxy digunakan sebagai perantara antara client dengan web server.

Berikut adalah arsitektur dari reverse proxy.

Screenshot from 2016-01-03 17:47:48.png

Dari gambar diatas dapat dilihat bahwa sebuah proxy dapat menghandle beberapa web server. Adapun cara kerjanya adalah client akan melakukan akses terhadap sebuah URL misalnya https://www.google.co.id maka secara otomatis client akan melakukan request terlebih dahulu ke proxy server akan tetapi seolah - olah client melakukan request langsung ke web server. Setelah menerima request dari client, maka proxy server akan meneruskan request tersebut ke web server yang dituju. Untuk mempermudah pemahaman langsung saja kita melakukan setting reverse proxy pada nginx :D.

Setup Vagrant

Pada artikel kali ini, penulis akan menggunakan vagrant. Bagi yang belum tau apa itu vagrant, silahkan lihat di Belajar Vagrant. Pada kesempatan kali ini, penulis menggunakan box ubuntu/trusty64 atau ubuntu 14.04 LTS.

Silahkan buat sebuah folder ubuntu-nginx-reverse-proxy kemudian jalankan perintah berikut di dalam folder tersebut.

vagrant init

Lalu buka file Vagrantfile lalu ubah codingannya menjadi seperti berikut.

Vagrant.configure(2) do |config|

    #konfigurasi box untuk sistem operasi ubuntu trusty 64 bit
    config.vm.box = "ubuntu/trusty64"

    config.vm.provider "virtualbox" do |vb|
    
        #konfigurasi virtual box dengan ram 1 GB
        vb.memory = "1024"
    end
    
    #konfigurasi provisioning
    config.vm.provision "shell", path: "install.sh"
    
    #konfigurasi network
    #port forwarding
    config.vm.network "forwarded_port", guest: 80, host: 8080
end

Membuat File Executable Shell

File ini dibuat berfungsi sebagai provisioning pada vagrant, silahkan buat sebuah file install.sh kemudian isikan codingan seperti berikut.

#! /bin/sh
#
# install.sh
# Copyright (C) 2016 Rizki Mufrizal <mufrizalrizki@gmail.com>
#
# Distributed under terms of the MIT license.
#

echo "mulai Provisioning"

echo "setup software source dan repository"
cp /vagrant/config/sources.list /etc/apt/sources.list
cp /vagrant/config/environment /etc/environment

add-apt-repository -y ppa:git-core/ppa
add-apt-repository -y ppa:nginx/stable

echo "memulai update"
apt-get update

echo "mulai upgrade"
apt-get upgrade -y

echo "mulai dist upgrade"
apt-get dist-upgrade -y

echo "instalasi build essential"
apt-get install -y build-essential libssl-dev

echo "instalasi git"
apt-get install -y git

echo "instalasi nginx"
apt-get install -y nginx

echo "Konfigurasi reverse proxy nginx"
cp /vagrant/config/nginx-proxy /etc/nginx/sites-available/reverseproxy
ln -s /etc/nginx/sites-available/reverseproxy /etc/nginx/sites-enabled/reverseproxy
rm /etc/nginx/sites-enabled/default
service nginx restart

echo "instalasi node js"
curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash -
apt-get install -y nodejs

echo "instalasi coffeescript"
npm install -g coffee-script

echo "instalasi nodemon"
npm install -g nodemon

echo "buat folder untuk project node js"
mkdir Belajar-Reverse-Proxy

echo "ke folder Belajar-Reverse-Proxy"
cd Belajar-Reverse-Proxy

echo "copy app.js ke folder Belajar-Reverse-Proxy"
cp /vagrant/config/app.js /home/vagrant/Belajar-Reverse-Proxy/app.js

echo "jalankan server"
nodemon app.js

Membuat Konfigurasi Reverse Proxy Nginx

Langkah selanjutnya adalah silahkan anda buat sebuah folder config, di dalam folder tersebut silahkan buat sebuah file nginx-proxy. Kemudian isikan codingan berikut pada file tersebut.

server {
    listen 80;

    server_name ubuntu.nginx.com
    access_log /var/log/nginx/access.log;

    location / {
        proxy_pass http://127.0.0.1:3000;
    }

}

Konfigurasi Repository Dan Environment

Karena kita menggunakan ubuntu, maka tahap selanjutnya kita melakukan konfigurasi repository dan environment pada ubuntu. Untuk konfigurasi repository, kita akan menggunakan repository kambing ui. Silahkan buat sebuah file sources.list kemudian isikan codingan berikut.

#repository kambing ui
deb http://kambing.ui.ac.id/ubuntu trusty main universe multiverse
deb http://kambing.ui.ac.id/ubuntu trusty-updates main universe multiverse
deb http://security.ubuntu.com/ubuntu trusty-security main universe multiverse

Untuk konfigurasi environment, silahkan buat sebuah file environment dan berikut adalah isi codingannya.

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
LC_CTYPE="en_US.UTF-8"
LC_ALL="en_US.UTF-8"

Membuat Aplikasi Web Node JS

Semua konfigurasi untuk bagian nginx telah disiapkan, langkah terakhir adalah membuat sebuah aplikasi web dengan node js yang berfungsi sebagai server side sedangkan nginx berfungsi sebagai reverse proxy. Silahkan buat sebuah file app.js di dalam folder config kemudian isikan codingan node js seperti berikut ini.

/*
 * Belajar-Reverse-Proxy.js
 * Copyright (C) 2016 Rizki Mufrizal <mufrizalrizki@gmail.com>
 *
 * Distributed under terms of the MIT license.
 */

var http = require('http');

http.createServer(function (req, res) {
    res.writeHead(200, {
        'Content-Type': 'text/plain'
    });
    res.end('Belajar Reverse Proxy Pada Nginx\n');
}).listen(3000, '127.0.0.1');

console.log('Server jalan di http://127.0.0.1:3000/');

Arsitektur Reverse Proxy

Arsitektur reverse proxy yang akan digunakan adalah sebagai berikut.

Screenshot from 2016-01-03 18:04:39.png

Dari gambar diatas, terdapat 2 teknologi yang kita gunakan diantaranya adalah.

  • Node js : sebagai server side
  • Nginx : sebagai reverse proxy

Node js berjalan pada port 3000 sedangkan nginx akan berjalan pada port 80. Agar nginx dapat dijadikan sebagai reverse proxy, kita harus melakukan beberapa konfigurasi pada nginx. Kongurasi tersebut sebenarnya telah kita buat pada file install.sh. Konfigurasi tersebut adalah pada bagian

#! /bin/sh
#
# install.sh
# Copyright (C) 2016 Rizki Mufrizal <mufrizalrizki@gmail.com>
#
# Distributed under terms of the MIT license.
#
echo "Konfigurasi reverse proxy nginx"
cp /vagrant/config/nginx-proxy /etc/nginx/sites-available/reverseproxy
ln -s /etc/nginx/sites-available/reverseproxy /etc/nginx/sites-enabled/reverseproxy
rm /etc/nginx/sites-enabled/default
service nginx restart

Dari codingan diatas dapat bahwa kita mencopy file nginx-proxy dari folder /vagrant/config/ ke dalam folder /etc/nginx/sites-available/. Kemudian tahap selanjutnya kita melakukan symlink dari file reverseproxy ke dalam folder /etc/nginx/sites-enabled/.

Testing Reverse Proxy

Tahap terakhir yaitu melakukan testing reverse proxy. Silahkan masuk ke folder ubuntu-nginx-reverse-proxy melalui terminal lalu jalankan perintah berikut.

vagrant up

Maka vagrant akan menjalankan sistem operasi ubuntu dan melakukan provisioning, berikut adalah outputnya.

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu/trusty64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/trusty64' is up to date...
==> default: Setting the name of the VM: ubuntu-nginx-reverse-proxy_default_1452844055124_38807
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 80 (guest) => 8080 (host) (adapter 1)
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: 
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default: 
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default: 
    default: Guest Additions Version: 4.3.34
    default: VirtualBox Version: 5.0
==> default: Mounting shared folders...
    default: /vagrant => /home/rizki/Documents/vagrant/ubuntu-nginx-reverse-proxy
==> default: Running provisioner: shell...
    default: Running: /tmp/vagrant-shell20160115-17586-14nuj0k.sh

Jika semua instalasi telah selesai, maka anda dapat melihat outputnya seperti berikut ini.

==> default: jalankan server
==> default: [nodemon] 1.8.1
==> default: [nodemon] to restart at any time, enter `rs`
==> default: [nodemon] watching: *.*
==> default: [nodemon] starting `node app.js`
==> default: Server jalan di http://127.0.0.1:3000/

Output diatas dapat dikatakan bahwa aplikasi node js telah berjalan dengan baik. Kemudian silahkan akses http://127.0.0.1:8080/. Berikut adalah tampilan hasilnya :).

Screenshot from 2016-01-15 14:59:12.png

Untuk source code nya silahkan lihat di ubuntu nginx reverse proxy. Sekian artikel mengenai konfigurasi reverse proxy pada nginx dan terima kasih :)

Ketika kita melakukan development terhadap sebuah aplikasi terkadang kita membutuhkan tool - tool penting untuk membantu pada developer untuk membuat sebuah aplikasi. Ada beberapa masalah yang sering ditemui oleh seorang developer diantaranya adalah :

  • Kesulitan ketika antar developer menggunakan sistem operasi yang berbeda.
  • Kesulitan ketika server yang digunakan menggunakan sistem operasi yang berbeda.
  • Kesulitan ketika project yang sedang dikerjakan tidak dapat berjalan di PC yang lain.

Dari beberapa kesulitan tersebut kita dapat meminimalkannya dengan menggunakan vagrant. Apa itu vagrant ?

Vagrant adalah sebuah software yang menggunakan teknologi virtual machine dimana kita dapat membuat lingkungan development secara portable, konsisten dan lebih fleksible.

Dikarenakan vagrant menggunakan teknologi virtual machine maka kita membutuhkan software seperti virtual box dan VmWare. Tujuannya adalah kita ingin membuat sebuah lingkungan development secara portable, contohnya misalnya pada saat production kita akan menggunakan sistem operasi ubuntu maka pada saat development kita akan menggunakan ubuntu sebagai sistem operasi sehingga pada saat proses deploy ke production diharapkan tidak ada lagi permasalahan yang muncul.

Ketika ingin melakukan duplikasi atau dibagikan kepada team developer yang lain maka kita tinggal menggunakan perintah vagrant sehingga secara otomatis vagrant akan melakukan konfigurasi pada PC masing - masing team developer sehingga mempermudah dalam development sebuah aplikasi.

Instalasi Virtual Box

Pada artikel ini, penulis menggunakan virtual box dikarenakan virtual box merupakan software open source dan lebih mudah dikonfigurasikan. Silahkan buka file sources.list dengan menjalankan perintah.

sudo gedit /etc/apt/sources.list

kemudian tambahkan sintak berikut pada baris akhir

deb http://download.virtualbox.org/virtualbox/debian xenial contrib

Jangan lupa sesuiakan dengan sistem operasi anda, disini saya menggunakan ubuntu 16.04 yaitu xenial, Setelah selesai kemudian disimpan dan untuk memasukkan public key jalankan perintah berikut.

wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -

Kemudian untuk melakukan instalasi virtual box jalankan perintah berikut.

sudo apt-get update
sudo apt-get install virtualbox-5.0

Instalasi Vagrant

Untuk melakukan instalasi vagrant silahkan download vagrant terlebih dahulu di vagrant download, disini penulis menggunakan ubuntu 16.04 64 bit maka penulis memilih versi debian 64 bit. Untuk melakukan instalasinya silahkan jalankan perintah.

sudo dpkg -i vagrant_1.8.1_x86_64.deb

jangan lupa sesuaikan dengan nama file anda. Kemudian lakukan pengecekan vagrant dengan perintah.

vagrant --version

Instalasi Box Vagrant

Box pada vagrant berfungsi sebagai virtual machine yang memuat sistem operasi dan disana juga terdapat seluruh konfigurasi yang kita lakukan. Dengan demikian maka secara tidak langsung sebenarnya kita menggunakan virtual machine maka oleh karena itu kita membutuhkan virtual box sebagai tempat virtual machine.

Mengapa kita menggunakan vagrant ? mengapa tidak menggunakan virtual box saja ?

Salah satu alasannya adalah ketika menggunakan vagrant maka vagrant akan melakukan semua konfigurasi hanya dengan satu perintah pada saat sistem operasi start up sedangkan jika kita menggunakan virtual box maka kita harus melakukan konfigurasi secara manual.

Repository box bisa dilihat di repository box. Berikut adalah bentuk umum untuk melakukan instalasi box.

vagrant box add user/box

bisa dilihat bahwa untuk melakukan instalasi box sangatlah mudah yaitu kita hanya menggunakan perintah diatas dan anda hanya perlu mengganti perintah user/box. Perintah user berarti adalah pembuat box sedangkan perintah box adalah box yang ingin kita gunakan. Disini penulis menggunakan box ubuntu/trusty64 maka jalankan perintah berikut.

vagrant box add ubuntu/trusty64

PERHATIAN !

Untuk melakukan instalasi box membutuhkan koneksi internet dan membutuhkan instalasi yang lama dikarenakan kita akan mendownload sebuah sistem operasi yang berkisar 1 GB > tergantung dari sistem operasi yang akan digunakan.

Membuat Project

Untuk membuat project, silahkan buat sebuah folder misalnya disini penulis membuat folder ubuntu-vagrant. Kemudian jalankan perintah berikut di dalam folder tersebut.

vagrant init

maka akan muncul output seperti berikut.

A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

Kemudian buka file Vagrantfile ubah codingannya menjadi seperti berikut.

Vagrant.configure(2) do |config|
  
  #konfigurasi box untuk sistem operasi ubuntu trusty 64 bit
  config.vm.box = "ubuntu/trusty64"

  config.vm.provider "virtualbox" do |vb|
    
     # konfigurasi virtual box dengan ram 1 GB
     vb.memory = "1024"
   end
end

Setelah selesai untuk menjalankan silahkan jalankan perintah berikut.

vagrant up

dan berikut adalah output pada terminal.

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu/trusty64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/trusty64' is up to date...
==> default: Setting the name of the VM: ubuntu-vagrant_default_1451702137384_76705
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: 
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default: 
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default: 
    default: Guest Additions Version: 4.3.34
    default: VirtualBox Version: 5.0
==> default: Mounting shared folders...
    default: /vagrant => /home/rizki/Documents/vagrant/ubuntu-vagrant

Jika box telah jalan, langkah selanjutnya adalah login ke dalam box yang telah kita jalankan. Untuk login ke dalam box silahkan jalankan perintah berikut.

vagrant ssh

Jika berhasil maka akan muncul output pada terminal seperti berikut.

Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-74-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

 System information disabled due to load higher than 1.0

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.

dan secara otomatis terminal yang kita gunakan akan berubah menjadi seperti gambar berikut.

Screenshot from 2016-01-02 09:41:17.png

Perintah Vagrant

Di dalam vagrant terdapat beberapa perintah penting, berikut adalah beberapa perintah yang sering digunakan di dalam vagrant.

Destroy

Perintah ini biasanya digunakan untuk menghapus project dan konfigurasi box yang telah kita buat. Untuk menghapus project kita dapat masuk ke dalam folder project dan menjalankan perintah.

vagrant destroy

Halt

Perintah ini berfungsi untuk mematikan/shut down box sehingga konfigurasi yang telah kita kita buat di dalam box tidak akan hilang. Untuk mematikan box kita dapat masuk ke dalam folder project dan menjalankan perintah.

vagrant halt

Suspend

Perintah ini biasanya kita gunakan untuk suspend atau sleep box. Sama seperti halt, semua konfigurasi yang telah kita buat tidak akan hilang. Untuk melakukan suspend pada project, kita dapat masuk ke dalam folder project dan menjalankan perintah.

vagrant suspend

Provisioning

Provisioning adalah menginstall/mengkonfigurasi sistem yang terdapat di dalam sebuah box. Biasanya yang kita lakukan sehari - hari adalah melakukan instalasi apache, mysql dan sebagainya, akan tetapi hal - hal seperti ini akan merepotkan ketika kita diharuskan melakukan instalasi terus - menerus ketika kita melakukan vagrant up pada PC yang berbeda. Untuk mengoptimalkannya maka kita akan menggunakan fitur provisioning pada vagrant. Silahkan buat sebuah file install.sh di dalam folder ubuntu-vagrant kemudian isi dengan kodingan berikut.

#!/bin/sh

echo "mulai Provisioning"

echo "software source dan repository"
cp /vagrant/config/sources.list /etc/apt/sources.list
cp /vagrant/config/environment /etc/environment

echo "tambah repository nginx"
add-apt-repository -y ppa:nginx/stable

apt-get update
apt-get upgrade -y
apt-get dist-upgrade -y

echo "Instalasi nginx"
apt-get install -y nginx

silahkan buat folder config, kemudian buat file sources.list di dalam folder config. Isikan codingan berikut ini.

deb http://kambing.ui.ac.id/ubuntu trusty main universe multiverse
deb http://kambing.ui.ac.id/ubuntu trusty-updates main universe multiverse
deb http://security.ubuntu.com/ubuntu trusty-security main universe multiverse

Langkah selanjutnya silahkan buat file environment di dalam folder config kemudian masukkan codingan berikut ini.

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
LC_CTYPE="en_US.UTF-8"
LC_ALL="en_US.UTF-8"

Setelah selesai, langkah selanjutnya adalah lakukan konfigurasi pada file Vagrantfile seperti berikut.

Vagrant.configure(2) do |config|
  #konfigurasi box untuk sistem operasi ubuntu trusty 64 bit
  config.vm.box = "ubuntu/trusty64"

  config.vm.provider "virtualbox" do |vb|
    
     # konfigurasi virtual box dengan ram 1 GB
     vb.memory = "1024"
  end

  #konfigurasi provisioning
  config.vm.provision "shell", path: "install.sh"
end

Untuk menjalankan provisioning silahkan jalankan perintah berikut.

vagrant provision

Konfigurasi Jaringan

Agar kita dapat melakukan akses terhadap jaringan yang terdapat di dalam box vagrant maka kita harus melakukan konfigurasi jaringan. Konfigurasi yang akan kita lakukan adalah port forwarding artinya jaringan yang ada di dalam box akan kita forward ke komputer local berdasarkan port. Misalnya kita ingin melakukan akses port 80 pada vagrant box dengan menggunakan port 8080 pada komputer local. Silahkan buka file Vagrantfile kemudian lakukan konfigurasi seperti berikut ini.

Vagrant.configure(2) do |config|
  #konfigurasi box untuk sistem operasi ubuntu trusty 64 bit
  config.vm.box = "ubuntu/trusty64"

  config.vm.provider "virtualbox" do |vb|
    
     # konfigurasi virtual box dengan ram 1 GB
     vb.memory = "1024"
  end

  #konfigurasi provisioning
  config.vm.provision "shell", path: "install.sh"
  
  #konfigurasi network
  #port forwarding
  config.vm.network "forwarded_port", guest: 80, host: 8080
end

Kemudian silahkan akses http://127.0.0.1:8080/ pada browser anda. Berikut adalah outputnya.

Untuk source code nya silahkan lihat di Belajar Vagrant. Sekian artikel mengenai belajar vagrant dan terima kasih :).

Jika anda adalah seorang developert javascript terutama yang udah sering ngoding di node js pasti udah tidak asing lagi dengan yang namanya gulp :D.

Gulp adalah sebuah build tool yang biasanya digunakan untuk automated task atau bisa dibilang sebagai automator.

Biasanya gulp digunakan untuk melakukan serangkaian kerja seperti membuat minify terhadap file html, css, js, melakukan concat file js, dan sebagainya. Pada artikel kali ini, penulis ingin membahas bagaimana cara penggunaan gulp untuk setup development sebuah project :D.

Instalasi Gulp

Karena gulp basic nya menggunakan node js maka anda diharuskan melakukan instalasi node js, yang belum melakukan instalasi node js silahkan lihat di Instalasi Perlengkapan Coding NodeJS.

Untuk melakukan instalasi gulp silahkan jalankan perintah

npm install -g gulp

Membuat Project

Silahkan buat sebuah folder dimana saja, disini penulis membuat sebuah folder dengan nama Belajar-Gulp. Kemudian masuk ke folder tersebut dengan menggunakan terminal. Jalankan perintah berikut ini.

npm init

Kemudian isikan perintahnya sesuai dengan kebutuhan, jika sudah maka akan terbentuk file package.json dimana file ini nantinya akan berisi library yang kita butuhkan. Kemudian install library gulp untuk kebutuhan project dengan perintah.

npm install gulp --save-dev

Setelah selesai, tahap selanjutnya adalah kita menentukan list task yang akan kita lakukan. List task yang akan penulis lakukan adalah sebagai berikut.

  • Task Minify file css, js dan html
  • Task Server
  • Task Watch
  • Task LiveReload
  • Task Clean dan Build

Task Minify file css, js dan html

Silahkan anda membuat sebuah file di dalam folder tersebut dengan nama gulpfile.js. kemudian kita lakukan instalasi library gulp dengan perintah.

npm install gulp-htmlmin gulp-uglify gulp-minify-css gulp-concat --save-dev

Minifiy CSS

Sama seperti sebelumnya, hanya saja pada minify kita memasukkan plugin minify css.

var gulp = require('gulp');
var gulpMinifyCss = require('gulp-minify-css');

gulp.task('minify-css', function() {
  gulp.src('./src/index.css')
    .pipe(gulpMinifyCss({
      compatibility: 'ie8'
    }))
    .pipe(gulp.dest('./dist/'));
});

kemudian jalankan dengan perintah.

gulp minify-css

Minifiy JS

Sebelum diminify maka kita lakukan concat terlebih dahulu, berikut adalah codingan untuk concat dan minify

var gulp = require('gulp');
var gulpConcat = require('gulp-concat');
var gulpUglify = require('gulp-uglify');

gulp.task('minify-js', function() {
  gulp
    .src([
      './src/index1.js',
      './src/index2.js'
    ])
    .pipe(gulpConcat('bundle.js'))
    .pipe(gulpUglify())
    .pipe(gulp.dest('dist'));
});

kemudian jalankan dengan perintah.

gulp minify-js

Minifiy HTML

Yang terakhir adalah membuat agar file html menjadi lebih kecil yaitu dengan menggunakan plugin gulp-htmlmin, berikut adalah kodingannya.

var gulp = require('gulp');
var gulpHtmlmin = require('gulp-htmlmin');

gulp.task('minify-html', function() {
  gulp.src('src/*.html')
    .pipe(gulpHtmlmin({
      collapseWhitespace: true
    }))
    .pipe(gulp.dest('dist'))
});

kemudian jalankan dengan perintah.

gulp minify-html

Task Server

Gulp juga menyediakan plugin untuk membuat sebuah server sehingga kita bisa langsung mengubah kodingan html, css dan js tanpa server back end. Silahkan jalankan perintah berikut untuk instalasi librarynya.

npm install --save-dev gulp-connect

kemudian tambahkan kodingan berikut pada file gulpfile.js

var gulp = require('gulp');
var gulpConnect = require('gulp-connect');

gulp.task('server', function() {
  gulpConnect.server({
    root: 'src',
    livereload: true
  });
});

Codingan root berfungsi sebagai tempat folder aplikasi yang akan kita jalankan sedangkan livereload berfungsi agar server dapat melakukan hot reload. Silahkan jalankan dengan perintah.

gulp server

maka akan muncul log terminal seperti berikut.

[13:12:05] Using gulpfile ~/Documents/Github Page/Belajar-Gulp/gulpfile.js
[13:12:05] Starting 'server'...
[13:12:05] Finished 'server' after 11 ms
[13:12:05] Server started http://localhost:8080
[13:12:05] LiveReload started on port 35729

silahkan akses di browser pada http://localhost:8080.

Task Watch

Task yang satu ini berfungsi untuk melihat semua aktifitas yang anda kerjakan :D. Fungsi yaitu setiap kali kita melakukan edit sebuah file maka dia akan melakukan task yang lain, misalnya jika kita mengedit file css, js dan html maka dia akan concat dan minify file - file tersebut. Masukkan codingan berikut pada file gulpfile.js.

gulp.task('watch', function() {
  gulp.watch('./src/*.js', ['minify-js']);
  gulp.watch('./src/*.css', ['minify-css']);
  gulp.watch('./src/*.html', ['minify-html']);
});

kemudian jalankan dengan perintah

gulp watch

jika anda melakukan perubahan pada file js, css dan html maka dia akan melakukan compile ulang terhadap masing - masing file tersebut.

Task LiveReload

Task ini biasanya digunakan ketika kita ingin browser melakukan refresh setiap kali kita mengedit file - file css, js dan html. Silahkan ubah kodingan berikut ini.

gulp.task('minify-css', function() {
  gulp.src('./src/index.css')
    .pipe(gulpMinifyCss({
      compatibility: 'ie8'
    }))
    .pipe(gulp.dest('./dist/'))
    .pipe(gulpConnect.reload());
});

gulp.task('minify-js', function() {
  gulp
    .src([
      './src/index1.js',
      './src/index2.js'
    ])
    .pipe(gulpConcat('bundle.js'))
    .pipe(gulpUglify())
    .pipe(gulp.dest('dist'))
    .pipe(gulpConnect.reload());
});

gulp.task('minify-html', function() {
  gulp.src('src/*.html')
    .pipe(gulpHtmlmin({
      collapseWhitespace: true
    }))
    .pipe(gulp.dest('dist'))
    .pipe(gulpConnect.reload());
});

gulp.task('server', function() {
  gulpConnect.server({
    root: 'src',
    livereload: true
  });
});

gulp.task('watch', function() {
  gulp.watch('./src/*.js', ['minify-js']);
  gulp.watch('./src/*.css', ['minify-css']);
  gulp.watch('./src/*.html', ['minify-html']);
});

gulp.task('default', ['watch', 'server']);

kemudian jalankan dengan perintah

gulp

mengapa gulp aja ? dikarenakan kita telah melakukan deklarasi default sehingga gulp akan menjalankan perintah default tersebut. Kemudian akses http://localhost:8080/ pada browser, ubah salah satu file maka browser akan otomatis melakukan reload.

Task Clean dan Build

Yang terakhir adalah task clean dan build, biasanya kita gunakan jika kita ingin membuild semua file yang ada. Silahkan instal library seperti berikut.

npm install --save-dev gulp-clean gulp-sequence

kemudian masukkan kodingan seperti berikut.

var clean = require('gulp-clean');
var gulpSequence = require('gulp-sequence');

gulp.task('clean', function() {
  return gulp.src('dist', {
    read: false
  })
    .pipe(clean());
});

gulp.task('build', gulpSequence('clean', 'minify-css', 'minify-js', 'minify-html'));

untuk menjalankannya dengan perintah

gulp build

Untuk source code nya silahkan lihat di Belajar Gulp. Sekian artikel mengenai berkenalan dengan gulp dan terima kasih :).