vagrant – website development server

why using vagrant ?

mengapa menggunakan vagrant, jika bisa mengeset server virtual dengan virtualbox ?!

adalah pertanyaan pertama yang muncul saat berkenalan dengan vagrant.

pengalaman saya sebagai IT developer bertemu dengan environment berbeda, misal project A menggunakan nginx sebagai http server, Project B menggunakan Apache, atau mungkin project C harus menggunakan IIS dan database SQL Server, belum lagi dengan saat bertemu dengan software yg tergantung dengan depedensi versi tertentu,

ini bisa di atasi dengan membuat banyak virtual server, debian server dengan apache dan mysql, debian apache dengan nginx dan postgresql, centos server dengan apache mysql, centos nginx plus mongodb, kemudian ubuntu server dengan  … dan berbagai kombinasi server lain nya,

bagaimana dengan saat implementasi di server production, saat anda harus mengingat config apa saja yang anda lakukan pada server sehingga aplikasi dapat running dengan sempurna … dan anda harus menghabiskan satu harian hanya untuk mendebug …

pengalaman pribadi, memisahkan folder source code dengan project, kadang membuat ‘berantakan’ file-file anggaplah ada 20 project dan pada folder www ada 10 project, folder lain ada 5 project, berantakan sekali

itu beberapa daily problem yang  dihadapi oleh developer … contoh How to build 100 web servers in a day

vagrant memberikan solusi

dengan menggunakan vagrant anda dapat mengirimkan pada tim development, bukan hanya source code, tetapi juga configurasi server nya seperti letak folder www, extension (ex rewrite pada apache) yg harus di load. dengan cepat seorang anggota baru dapat merunning aplikasi tanpa harus memikirkan / melakukan configurasi ulang, karena configurasi sudah dilakukan otomatis.

vagrant menggunakan sebuah master image yang dapat digunakan oleh banyak host, sehingga dari sisi bandwith dan hardisk lebih nyaman,

dengan pemisahan setiap project menggunakan ‘server’ nya sendiri, ke kacauan file bisa dikurangi, dan setiap server tidak akan tumpang tindih karena sudah ada software sejenis yang terinstall di virtual.

cara otomasi dengan vagrant

vagrant dan virtualbox telah terinstall

contoh sederhana otomasi yang akan dilakukan adalah

– installasi server nginx

– memindahkan path folder source code ke share folder vagrant


# create folder for our project
$ mkdir proj1 && cd proj1
# set vagrant with minimal config
$ vagrant init hashicorp/precise32 --minimal
# edit vagrant config add the necessary value
$ nano Vagrantfile

# input the script for Vagrantfile

Vagrant.configure(2) do |config|
config.vm.box = "hashicorp/precise32"
config.vm.hostname = "proj1-dev"
config.vm.provision "shell", path:"proj1.sh"
config.vm.network "forwarded_port", guest: 80, host:8080, id:"nginx"
end

# create auto setup shell script

$ nano proj1.sh

# input the script for proj1.sh

apt-get -y update
apt-get -y install nginx
rm -rf /usr/share/nginx/www/
ln -s /vagrant/www /usr/share/nginx/www
service nginx start

# make dir www and create new index.html

mkdir www && nano www/index.html

# put this line to your index.html

<b>your nginx</b>

# now running vagrant

vagrant up
# if you not see the 'your welcome page', reload the provision
vagrant provision

check in your browser

01 nginx run

add new drive / partition linux (virtualbox)

– add new drive (virtualbox), my new drive is webdisk.qed (8GB)
webdisk

– start linux box
– check mounting hardisk


ub@svr:~$ df -k
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda1        2614880 1990860    492948  81% /
udev             1016984       4   1016980   1% /dev
tmpfs             205156     328    204828   1% /run
none                5120       0      5120   0% /run/lock
none             1025768       0   1025768   0% /run/shm

 

– check partition


ub@svr:~$ cat /proc/partitions
major minor  #blocks  name

   8        0    3145728 sda
   8        1    2621440 sda1
   8        2          1 sda2
   8        5     521216 sda5
   8       16    8388608 sdb
  11        0    1048575 sr0

 

sdb connected

– start fdisk

 ub@svr:~$ sudo fdisk /dev/sdb

 

– check if partition true


Command (m for help): p

Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders, total 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb29446a9

   Device Boot      Start         End      Blocks   Id  System

 

– create new partition


Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-16777215, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-16777215, default 16777215):
Using default value 16777215

 

– check again


Command (m for help): p

Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders, total 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb29446a9

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    16777215     8387584   83  Linux

 

– write partition


Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

 

– read (again) partition


ub@svr:~$ cat /proc/partitions
major minor  #blocks  name

8        0    3145728 sda
8        1    2621440 sda1
8        2          1 sda2
8        5     521216 sda5
8       16    8388608 sdb
8       17    8387584 sdb1
11        0    1048575 sr0

– check with fdisk

ub@svr:~$ sudo fdisk -l

Disk /dev/sda: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 cylinders, total 6291456 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000e416a

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     5244927     2621440   83  Linux
/dev/sda2         5246974     6289407      521217    5  Extended
/dev/sda5         5246976     6289407      521216   82  Linux swap / Solaris

Disk /dev/sdb: 8589 MB, 8589934592 bytes
86 heads, 1 sectors/track, 195083 cylinders, total 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x16dba2a4

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    16777215     8387584   83  Linux

– format partition with ext4 extension


ub@svr:~$ sudo mkfs -t ext4 /dev/sdb1
mke2fs 1.42 (29-Nov-2011)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
524288 inodes, 2096896 blocks
104844 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2147483648
64 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

–  create dir for mounting


ub@svr:~$ mkdir /home/ub/websites
ub@svr:~$ ls
websites

– mounting otomatis at boot


ub@svr:~$ sudo nano /etc/fstab

# add this line
/dev/sdb1 /home/ub/websites ext4 defaults 1 2

– change owner to user


ub@svr:~$sudo chown ub websites

– mounting all partition


ub@svr:~$sudo mount -a

– check all volume


ub@svr:~/websites/myadmin$ df -k
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda1        2614880 1971904    511904  80% /
udev             1016984       4   1016980   1% /dev
tmpfs             205156     332    204824   1% /run
none                5120       0      5120   0% /run/lock
none             1025768       0   1025768   0% /run/shm
/dev/sdb1        8361296  278640   7663280   4% /home/ub/websites

– test create file

ub@svr:~$ echo "Ganteng" > websites/test2.txt
ub@svr:~$ ls -al websites
total 40
drwxr-xr-x 5 ub   root  4096 May 18 19:00 .
drwxr-xr-x 8 ub   ub    4096 May 18 18:18 ..
drwx------ 2 root root 16384 May 18 18:17 lost+found
-rw-rw-r-- 1 ub   ub       8 May 18 19:00 test2.txt

VirtualBox – Enlarge Hardisk

first time i decide to make virtualbox just for Apache MySQL PHP server, but next i installed PostgreSQL, MongoDB, and next i want to install Oracle Database, and then i want play Service Oriented Architercture (SOA), and Python.

how can it enough with 2.5GB hd? nope .. lets enlarge the space become twice (5GB)


g3n1k@n43s:~$ VBoxManage modifyhd "/vbox_clone/ubsvr_c1.qed" --resize 5120

virtuabox-enlarge-hardisk

install virtualbox, ubuntu 13.04

install virtualbox linux ubuntu 13.04

remove all virtualbox
————————————————————————

sudo apt-get remove virtualbox* --purge

add repository virtualbox
————————————————————————

wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -
sudo sh -c 'echo "deb http://download.virtualbox.org/virtualbox/debian $(lsb_release -sc) contrib" &gt;&gt; /etc/apt/sources.list'

update repository
————————————————————————

sudo apt-get update

install linux headers
————————————————————————

sudo apt-get install linux-headers-$(uname -r) build-essential module-assistant dkms

install virtualbox
————————————————————————

sudo apt-get install virtualbox-4.2

note you must install linux headers

Konfigurasi VMware 6.0 – CentOS

CentOS Adalah salah satu linux keturunan dari RedHat. situs CentOS dapat diakses pada http://www.centos.org/

CentOS dapat diinstall dengan  Graphical User Interface (GUI), atau tanpa  GUI (text mode).  Text mode memiliki kelebihan dari segi ‘hemat’ resource yang dipakai oleh computer.

Untuk beginner lebih baik  menggunakan mode GUI karena lebih mudah dalam mempelajarinya, pada beberapa hal akan lebih menghemat waktu jika menggunakan GUI dibanding Modus Text.

Saya sendiri lebih menyukai modus text, karena kecepatan dan efisiensi.

VMware bukanlah satu-satunya perangkat lunak untuk virtualisasi. Qemu dan VirtualBox salah satu perangkat lunak virtualisasi, bedanya dengan VMware perangkat lunak ini bersifat Open Source.
VMware adalah software berbayar yang digunakan untuk melakukan virtualisasi operating system , mudahnya adalah “membuat sebuah computer secara virtual”.

real_comp_lan1

komputer dengan 1 operating system

real_comp_virtual_lan1komputer virtual yang terhubung dengan jaringan

sebuah computer virtual dapat diperlakukan sebagai salah satu computer lainnya, computer virtual dapat terhubung pada lan, mengakses sumber daya lan dan hal lainnya, seperti computer real.
Jika computer virtual dapat diperlakukan seperti computer biasa, maka computer  virtual pun dapat melayani computer lain dalam jaringan.
Dengan spesifikasi computer yang cukup, sebuah computer virtual  dapat digunakan untuk menjadi sebuah server.

Salah satu contoh,  saat jumlah mesin server  terbatas, anggaplah hanya tersedia dua mesin server, tetapi dibutuhkan beberapa layanan server, anggaplah layanan server itu WEB server, DNS server, dan DHCP server. Dengan memperhatikan trafick server dimasa yang akan datang, diperkirakan WEB server akan memiliki trafick yang tinggi setiap harinya, sehingga membutuhkan resource computer yang cukup besar. Sementara untuk DHCP dan DNS server tidak terlalu membutuhkan resource yang besar, jika menggunakan virtual , dengan dua mesin yang tersedia kita bisa membuat tiga layanan server.

contoh_server_virtual1

virtual untuk mengatasi mengatasi kekurangan mesin, dan pengefektipan server

Cara penginstalan CentOS di VMware sedikit berbeda dengan penginstalan Operating Sistem lainya:
jika VMware tidak diseting dengan benar, penginstalan CentOS akan gagal dan memberikan keterangan :
An Error has occurred – no valid devices were found on wich to create new file systems. Please check your hardware for the cause of this problem.

error_centos_vmware_error

Setting VMware untuk CentOS

  1. buat sebuah file virtual mesin yang baru
  2. Pada select the appropriate program pilih Custom tekan Next, tekan Next sekali lagisellect_the_appropriate_configuration
  3. Pada Select a Guest Operating System pilih Linux, kemudian  RedHat Linux , tekan Nextselect_a_guest_operating_system
  4. Pilih Virtual machine name berikan nama CentOS , tekan  Next, pilihlah jumlah processor yang diinginkan (default one), memory virtual machine (default 256).
  5. Pilih jenis network bridged agar mesin virtual ini dapat dikenali oleh jaringan.neetwork_type
  6. Pada Select I/O Adapter Type pilih LSI Logic (default BusLogic)select_io_adapter_type
  7. Select a Disk pilih Create a new virtual diskselect-a-disk1
  8. Select a Disk Type pilih SCSIselect-a-disk-type
  9. Disk Size silahkan diatur sesuai kebutuhan, penulis menggunakan 3 GB
  10. Kemudian Next, next saja sampai ada pemberitahuan bahwa pembuatan virtual mesin yang baru telah selesai
  11. Pada CD-ROM pilih drive yang berisi cd CentOS, pada bagian ini kita juga bisa menggunakan file ISO sebagai media penginstalannya.use-iso
  12. tekan Start dan penginstallan dimulai dan tidak akan memberikan pesan kesalah seperti diatas
    start_centos1