Belajar Docker.

Apa itu Docker ?

Docker adalah suatu project open source yang memungkinkan kita untuk membuat sebuah wadah atau container, yang berisikan suatu aplikasi, yang sudah kita konfigurasi, kita kemas, dan kita dapat menjalankannya.

Dalam bahasa yang lebih sederhana adalah, coba teman teman membayangkan tumpukan kontainer peti kemas di pelabuhan laut. Ada kontainer warna biru untuk database Postgresql, ada kontainer warna hijau untuk web server Apache + Php, ada kontainer warna kuning untuk database MySQL, ada kontainer warna merah untuk Bisnis Intelegence Pentaho, ada kontainer warna oranye untuk Django + Python, dan banyak lagi kontainer kontainer yang lainnya.

Nah, masing masing kontainer itu memiliki konfigurasi yang berbeda beda, misalnya ada kontainer warna biru (Postgresql) memerlukan konfigurasi database replikasi Bucardo. Kontainer yang lain tidak perlu konfigurasi Bucardo ini, tetapi memerlukan konfigurasi yang lain, misalnya kontainer warna merah (BI Pentaho) memerlukan konfigurasi JAVA SDK, yang mana konfigurasi ini juga tidak diperlukan di kontainer yang lainnya.

Kontainer kontainer tersebut berada di suatu pelabuhan peti kemas, siap untuk dikirimkan menggunakan kapal laut. Managemen pelabuhan sudah mempersiapkan dokumen tata cara pengiriman kontainer kontainer berjenis DOCKER itu. Syahbandar yang akan melakukan bongkar muat kontainer sesuai permintaan dari kapal yang akan berlabuh.

Kemudian datang sebuah kapal pengangkut peti kemas milik seorang web programmer yang memiliki kemampuan mengangkut kontainer berjenis DOCKER. Syahbandar di pelabuhan kemudian membuat duplikasi kontainer warna hijau (Apache + PHP) dan warna kuning (MySQL) dan meletakkannya ke dalam kapal pengangkut ini.

Tak lama berselang, datanglah kapal pengangkut peti kemas milik seorang database administrator dan dia memerlukan kontainer warna biru (PostgreSQL) dan kontainer warna kuning (MySQL). Syahbandar pelabuhan segera melakukan duplikasi terhadap kontainer kontainer yang di perlukan tersebut.

Nah, kedua kapal ini kemudian melanjutkan perjalanan mengarungi samudra yang luas. Pada suatu saat mereka akan berhenti di pelabuhan tujuan, dan kemudian mereka menurunkan kontainer yang mereka bawa, atau menduplikasi kontainer sebelum meletakkannya di pelabuhan tujuan, atau membawa kontainer yang baru ke dalam kapal.

Dari penjelasan diatas, kita dapat menganalogikan sebagai berikut, bahwa pelabuhan atau kapal adalah suatu platform DOCKER, dimana kita bisa membawa bermacam macam kontainer didalamnya. Suatu Pelabuhan dapat diartikan sebagai suatu Server Komputer, dan suatu kapal dapat diartikan sebagai suatu adalah laptop dari seorang software engineer atau laptop dari seorang system engineer. SuatukKontainer dapat diartikan sebagai suatu applikasi dengan konfigurasi librarynya.

Semoga penjelasan sederhana diatas dapat membantu teman teman memahami mengenai apa itu Docker, dan apa itu kontainer, dan bagaimana penerapan penggunaannya.

Bagaimana pendapat teman teman ?

Download website dengan wget

Kemarin saya memerlukan membaca suatu website tanpa menggunakan internet. Website tersebut akan saya pergunakan untuk memberikan tutorial. Windows memiliki banyak software yang dapat dipergunakan untuk download suatu website secara lengkap, sementara untuk di linux, saya belum pernah melakukannya.

Setelah browsing di google, akhirnya saya mengetahui bahwa wget dapat dipergunakan untuk mendownload suatu website. Berikut adalah perintah yang dipergunakan :

$ wget \
–recursive \
–no-clobber \
–page-requisites \
–html-extension \
–convert-links \
–restrict-file-names=windows \
–domains w3schools.com \
–no-parent \
www.w3schools.com/php/func_date_date_format.asp

Perintah diatas akan mendownload halaman func_date_date_format di w3schools.com. Untuk opsi parameternya, penjelasannya sebagai berikut :

  • –recursive: download keseluruhan website.
  • –no-clobber: file yang sudah ada jangan di timpa/di tumpuk
  • –page-requisites: download semua elemen html untuk membangun halaman tersebut, seperti image, css, js, dan seterusnya.
  • –html-extension: simpan file dalam format ekstensi .html.
  • –convert-links: konversi semua html link supaya bisa dipergunakan secara lokal/offline.
  • –restrict-file-names=windows: konversi semua filename supaya bisa dipergunakan di operating sistem windows.
  • –domains w3schools.com : jangan mendownload link diluar domain w3schools.com.
  • –no-parent: jangan mendownload link diluar direktori /php/ .

 

Akhirnya dengan wget ini, saya bisa mendownload suatu website. Bagaimana dengan rekan rekan yang lain ?

Instalasi OCSInventory Server di Ubuntu 13.10

ocsinventory32  OCSInventory menurut Wikipedia adalah sebagai berikut :

Open Computer and Software Inventory Next Generation (OCS inventory NG) adalah software gratis yang memungkinkan pengguna untuk melakukan inventarisasi terhadap aset aset IT mereka. OCS-NG akan mengumpulkan informasi hardware dan software dari mesin mesin yang terhubung didalam jaringan komputer yang menjalankan program OCS-Client (“OCS Inventory Agent”). OCS dapat dipergunakan untuk menampilkan inventaris melalui web.

Langkah langkah untuk instalasi OCSInventory Server:

  • Install Apache, MySQL dan PHP
  • Install komponen pustaka yang dibutuhkan oleh OCSInventory :
    • apt-get install libapache2-mod-perl2 libapache-dbi-perl libxml-simple-perl libio-compress-perl libdbi-perl libdbd-mysql-perl libnet-ip-perl php5-gd php5-mysql make
  • Install komponen pustaka di perl :
    • masuk ke console perl
      • perl -MCPAN -e shell
    • install pustaka SOAP::Lite
      • install SOAP:Lite
    • install pustaka XML::Entities
      • install XML::Entities
  • Download source OCSInventory terbaru :
    • wget -c https://launchpadlibrarian.net/136538282/OCSNG_UNIX_SERVER-2.1rc1.tar.gz
  • Extract source tersebut, dan masuk ke folder ocs
    • tar -xvf OCSNG_UNIX_SERVER-2.1rc1.tar.gz
    • cd OCSNG_UNIX_SERVER-2.1rc1
  • Jalankan perintah setup instalasi ocs yang terbaru
    • ./setup.sh
  • Jawablah beberapa pertanyaan yang muncul, berikut yang muncul di komputer saya :
    • Do you wish to continue ([y]/n)?
    • Which host is running database server [localhost] ?
    • On which port is running database server [3306] ?
    • Where is Apache daemon binary [/usr/sbin/apache2] ?
    • Where is Apache main configuration file [/etc/apache2/apache2.conf] ?
    • Which user account is running Apache web server [www-data] ?
    • Which user group is running Apache web server [www-data] ?
    • Where is Apache Include configuration directory [//etc/apache2/conf.d/] ?
    • Where is PERL Intrepreter binary [/usr/bin/perl] ?
    • Do you wish to setup Communication server on this computer ([y]/n)?
    • Where to put Communication server log directory [/var/log/ocsinventory-server] ?
  • Kemudian abaikan pertanyaan berikut :
    • Checking for Apache2::SOAP PERL module… *** Warning: PERL module Apache2::SOAP is not installed ! This module is only required by OCS Inventory NG SOAP Web Service. Do you wish to continue ([y]/n] ?
  • dan lanjutan pertanyaannya :
    • Do you wish to continue ([y]/n] ?
    • Do you allow Setup renaming Communication Server Apache configuration file to ‘z-ocsinventory-server.conf’ ([y]/n) ?
    • Do you wish to setup Administration Server (Web Administration Console) on this computer ([y]/n)?
    • Do you wish to continue ([y]/n)?
    • Where to copy Administration Server static files for PHP Web Console [/usr/share/ocsinventory-reports] ?
    • Where to create writable/cache directories for deployement packages and IPDiscover [/var/lib/ocsinventory-reports] ?
  • Buat VirtualHost untuk OCSInventory
    • vim /etc/apache2/sites-available/000-default.conf
  • Tambah parameter berikut dan simpan file tersebut
    • Alias /ocsreports “/usr/share/ocsinventory-reports/ocsreports/”
      <Directory “/usr/share/ocsinventory-reports/ocsreports/”>
      Options Indexes MultiViews FollowSymLinks
      AllowOverride None
      Order allow,deny
      Allow from all
      </Directory>
  • Kemudian edit file dbconfig
    • vim /usr/share/ocsinventory-reports/ocsreports/dbconfig.inc.php
  • Tambahkan parameter berikut ini dan simpan file tersebut
    • < ? php
      $_SESSION[“SERVEUR_SQL”]=”localhost”;
      $_SESSION[“COMPTE_BASE”]=”$user”;
      $_SESSION[“PSWD_BASE”]=”$password”;
      ? >
  • Setelah itu proses instalasi melalui web, buka alamat berikut di dalam perambah anda dan ikuti proses instalasinya hingga selesai.
    • http://localhost/ocsreports/install.php
  • Update file z-ocsinventory-server.conf
    • vim conf.d/z-ocsinventory-server.conf
  • Ubah nilai parameter berikut menjadi 1, agar semua client dapat berkomunikasi dengan OCSInventory server
    • PerlSetEnv OCS_OPT_ACCEPT_TAG_UPDATE_FROM_CLIENT 1
  • Buat link symbolik dari file tersebut di directory conf-enabled dari apache configuration
    • sudo ln -s /etc/apache2/conf.d/z-ocsinventory-server.conf /etc/apache2/conf-enabled/z-ocsinventory-server.conf
  • Proses Instalasi OCSInventory telah selesai, kita harus merubah file install.php menjadi file yang lain, atau agar lebih aman file tersebut di hapus.
    • mv /usr/share/ocsinventory-reports/ocsreports/install.php /usr/share/ocsinventory-reports/ocsreports/install.php_1
  • Silahkan login OCSInventory melalui http://localhost/ocsreports dengan user admin dan kemudian ubah default passwordnya.

RAID bukan untuk BACKUP Data

  Woa, apa tidak salah itu ? Menurut pengalaman saya, tidak, itu benar adanya. Tetapi setiap orang pasti memiliki pendapat masing masing. Jadi pendapat saya ini pun bisa di sanggah juga.

Mari kita lihat apa tujuan backup tersebut. Menurut Wikipedia, Backup adalah ” a backup, or the process of backing up, refers to the copying and archiving of computer data so it may be used to restore the original after a data loss event.”.

Jadi backup adalah proses untuk menduplikasi data dan menyimpannya sehingga data tersebut dapat dipergunakan untuk proses restore atau mengembalikan data setelah terjadinya kejadian kehilangan data.

Proses kehilangan data dapat disebabkan oleh berbagai hal, antara lain :

  • Kesalahan Manusia (Human Error)
    • salah delete data
    • pencurian
  • Kegagalan Perangkat Keras (Hardware Failure)
    • komputer rusak
    • kontroller media penyimpanan rusak
  • Kejadian Alam ( Catastropic Damage)
    • banjir
    • puting beliung
    • gempa bumi
  • Virus Komputer (Computer Virus)
  • Kesalahan Perangkat Lunak (Software Bugs)
  • dan sebagainya.

Sistem RAID tidak dapat menangani semua penyebab kehilangan data, hanya sebagian kecil dari bagian kegagalan perangkat keras saja. Sehingga RAID tidak seharusnya dipergunakan untuk BACKUP DATA.

RAID adalah teknologi yang dirancang untuk meningkatkan performa media penyimpanan dengan cara menggabungkan beberapa media penyimpanan dalan satu unit yang besar. RAID sekarang adalah teknologi yang murah dan mudah di dapat. RAID arti lengkapnya adalah Redundant Array of Independent Disks. Kata kata Redundant inilah yang sering disalah artikan sebagai BACKUP.

Jadi BACKUP lebih luas artinya daripada RAID. Saya tetap memerlukan RAID, tetapi RAID bukan untuk BACKUP.

Migrasi redmine ke server yang lain

  Saya memakai software project management bernama Redmine. Redmine adalah software gratis dan open source, project management dan bug tracking software berbasis web, Fiturnya termasuk kalender , Gantt-Chart dan menangani banyak project secara bersamaan.

Redmine yang saya pakai adalah versi 0.7.3, dan akan saya upgrade ke version 1.3.2 di mesin Ubuntu 12.04. Berikut adalah langkah langkah yang saya lakukan untuk melakukan upgrade.

Langkah di server lama adalah sebagai berikut :

  • Backup Mysql Databasedan kirim file backup ke server yang baru
    • mysqldump -u root -p redmine > redmine.dmp
    • scp redmine.dmp root@192.168.0.2:/root
  • Transfer directory files
    • scp -r /opt/redmine.0.7.3/files root@192.168.0.2:/root
  • create configuration files

Langkah di server baru adalah sebagai berikut :

  • Install semua paket yang dibutuhkan
    • sudo apt-get install apache2 mysql-client mysql-common mysql-server ruby1.8 ruby1.8-dev ruby-i18n ruby-rails-2.3 ruby-tmail rubygems ruby-builder ruby-coderay ruby-text-format ruby-blankslate ruby-mysql ruby-net-ldap ruby-rack ruby-rchardet redmine redmine-mysql
  • Buat symbolic-link halaman web redmine ke /var/www/redmine
    • sudo ln -s /usr/share/redmine/public /var/www/redmine
  • Ubah hak akses halaman web redmine
    • sudo chmod a+x /usr/share/redmine/public
  • Buat file konfigurasi untuk redmine
    • sudo vim /etc/init/redmine.conf
    • # Redmine
      description "Redmine"
      start on runlevel [2345]
      stop on runlevel [!2345]
      expect daemon
      exec ruby /usr/share/redmine/script/server webrick -e production -b 192.168.0.2 -d
  • login ke database mysql
    • mysql -u root -p
  • Buat ulang database redmine default dengan cara drop database yang lama dan buat yang baru
    • drop database redmine_default; create database redmine_default;
  • Keluar dari mysql
    • \q
  • Import database redmine yang lama ke database redmine yang baru
    • mysql -u root -p redmine_default < redmine.dmp
  • Masuk direktori redmine
    • cd /usr/share/redmine
  • Update database redmine yang lama ke database yang baru
    • rake db:migrate RAILS_ENV=production
  • Hapus semua cache yang ada
    • rake tmp:cache:clear
    • rake tmp:sessions:clear
  • Restart apache web server
    • sudo service apache2 start
  • Start redmine server
    • sudo service redmine start
  • Akses redmine melalui web browser
    • http://192.168.0.2:3000/
  • Done

Sekarang redmine saya udah menggunakan redmine 1.3.2. Semoga bermanfaat.

Migrasi server SVN

  Saya memiliki SVN server. SVN atau Subversion adalah open source version-control yang saya pergunakan untuk menyimpan kode sumber saya dan team. Pada saat kita memulai proyek , version-control yang ada hanyalah CVS dan SVN saja. Sehingga kita pakailah SVN. Kalau sekarang sudah banyak software version control yang open source yang memiliki fitur fitur lebih hebat daripada SVN seperti GIT, Mercurial dan Bazaar.

Nah, saat ini ada kebutuhan dari team untuk memindahkan SVN Server kita ke mesin yang lebih baru.

Berikut adalah langkah langkah di Server yang lama :

  • Backup repository
    • cd /data/svn/
    • svnadmin dump repository > repository.dump
  • Transfer ke server yang baru
    • scp repository.dump root@192.16.0.1:/root

Langkah langkah di Server yang baru :

  • Install SVN dan Apache
    • sudo apt-get install subversion apache2 libapache2-svn
  • Aktifkan package dav_svn
    • vim /etc/apache2/mods-enabled/dav_svn.conf
  • Buat User Admin
    • sudo htpasswd -cm /etc/apache2/dav_svn.passwd admin
  • Tambahkan User Member yang lainnya
    • sudo htpasswd -m /etc/apache2/dav_svn.passwd member_1
  • Buat repository di direktory /data/svn
    • cd /data/svn/
    • sudo svnadmin create repository
  • Load data repository ke svn
    • sudo svnadmin load repository < repository.dump
  • Ubah hak akses direktory repository
    • sudo chown www-data:www-data repository -R
  • Masuk ke Web Browser dan akses melalui
    • http://server_baru/svn
  • Done

Semoga bermanfaat.