Artikel ini akan membantu anda menggunakan Vagrant untuk mengelola mesin virtual anda, dan menjelaskan bagaimana anda dapat mengambil keuntungan dari Puppet menentukan berbagai sumber daya, seperti PHP dan PostgreSQL.

Pengenalan

 Pengembang memiliki banyak cara untuk membangun lingkungan pengembangan web mereka.

Pengembang memiliki banyak cara untuk membangun lingkungan pengembangan web mereka. Anda dapat menggunakan pilihan “lokal, seperti menginstal pre-built server all-in-one”, seperti Zend Server, XAMPP, MAMP, WAMP, dll, atau Anda dapat menginstal komponen sendiri dari sumber, atau melalui sistem manajemen paket seperti Homebrew, Apt, dan Yum.

Hal ini dapat bertambah saat Anda bekerja pada berbagai proyek dengan: PHP 5.3 dan PHP 5.4, MySQL, SQLite, MongoDB, Postgres, PEAR, PHPUnit, Rails 3.1, memcached, Redis, gearman, NodeJS, dll. Jika Anda meng-upgrade komputer atau komputer anda mati , Anda harus mulai dari awal lagi.

Anda bisa memiliki “remotesetup, menggunakan server di jaringan dengan Samba untuk berbagi, atau server SSH yang dipasang dengan alat sepertiExpanDrive. Opsi terakhir dapat menyebabkan latency pada saat membaca/menulis file, hal yang sangat menjengkelkan. Anda bisa menggunakan SSH + Vim untuk segala sesuatu, yang cepat, tapi itu hanya bekerja jika Anda ingin menggunakan Vim untuk semuanya.

Pengembangan vs. Produksi

Meskipun Anda mungkin senang dengan bagaimana Anda melakukan hal yang benar sekarang, berapa banyak dari Anda pernah mendengar (atau berkata) Yah itu bekerja pada komputer saya“. Ini mengerikan dan itu terjadi ketika lingkungannya berbeda, bahkan untuk detail yang paling sepele.

Hal ini sangat penting untuk memastikan bahwa lingkungan pengembangan Anda identik dengan lingkungan produksi, dan sesuai dengan server pementasan/staging dan pengujian jika Anda memiliki orang-orang untuk itu juga.

Itu mungkin terdengar mudah jika Anda hanya berpikir tentang menginstal Apache, PHP dan beberapa salinan MySQL, tetapi ada satu juta faktor untuk dipikirkan. Jika Anda mengembangkan di OSX dan menyebarkan ke sistem Ubuntu, maka Anda akan melihat masalah dengan kapitalisasi berkas. Hal ini biasa terjadi di CodeIgniter, ketika seseorang memiliki library lowercase first letter. Ini akan berjalan baik pada OSX, tetapi akan pecah bila digunakan untuk produksi. Proses pembangunan Anda mungkin baru saja kehilangan beberapa urusan, semua karena beberapa perbedaan OS yang sepele yang tak dipikirkan sebelumnya sampai terlambat untuk diketahui kemudian.

Pengembangan = Produksi

Memaksa pengembang untuk menggunakan OS yang sama akan menyebabkan masalah.

Jadi apa solusinya? Memaksa semua pengembang Anda untuk membuang alat-alat mereka yang berbeda dan mengembangkannya pada model yang sama persis dari laptop? Jika pengembang Anda semua mendapatkan merek baru MacBook, maka Anda tidak mungkin mendapatkan terlalu banyak keluhan, tapi kemudian Anda akan perlu untuk menggunakan OSX Server untuk semuanya.

Anda bisa menggunakan Linux untuk semuanya, tapi kemudian Anda harus berjuang distribusi mana yang akan digunakan. Memaksa pengembang untuk menggunakan OS yang sama akan menyebabkan masalah, penurunan produktivitas dan mempromosikan kutupertempuran (nerd-fighting).

Virtualisasi adalah jawabannya dan itu bukan hal yang baru, tetapi ketika orang berpikir tentang virtualisasi mereka sering berpikir masalah kinerja dan fans mereka saat laptop mereka mati-matian mencoba untuk menjalankan dua sistem operasi.

Masih terjadi kasus untuk mencoba menjalankan Windows pada mesin bertenaga rendah, tapi hari ini, sebuah Mac rata-rata memiliki 4 GB RAM secara umum, yang lebih dari cukup untuk sebuah instalasi server Ubuntu berjalan dalam mode command line dan semua alat pengembangan biasa (IDE, browser, alat debugging, dll). Ada beberapa pilihan untuk virtualisasi, tapi aku lebih menyukai VirtualBox dari Oracle (yang gratis). Perangkat lunak ini menangani semua beban berat untuk virtualisasi, kemudian alat yang disebut Vagrant mengelola instansiasinya.

Step 1 – Menginstal VirtualBox

Pertama Download VirtualBox and instal. Pada sistem *nix (Mac OSX, Linux, dll), kamu harus mengubah .bash_profile (or .zsh_profile) kamu untuk memperluas variabel $PATH:

PATH=$PATH:/Applications/VirtualBox.app/Contents/MacOS/
export PATH

Ini akan memberitahu Vagrant dimana VirtualBox terinstal, dan akan, tentu saja, berbeda untuk tiap sistem operasi.

Step 2 – Menginstal Vagrant

Kamu bisa mendownload vagrant siap pakai untuk sistem operasi kamu, atau menginsalnya sebagai gem jika tidak tersedia satupun:

$ gem install vagrant

Step 3 – Membuat Instance

Buatlah di suatu tempat agar setup vagrant  bisa hidup:

mkdir -p ~/Vagrant/test
cd ~/Vagrant/test

Kami akan menggunakan Ubuntu 12.04 LTS (Precise Pangolin), yang sudah memiliki “box” yang telah disetup.

vagrant box add precise32 http://files.vagrantup.com/precise32.box

Anda lihat di sini argumen precise32″ yang merupakan nama panggilan untuk URL tersebut. Anda sekarang dapat membuat sebuah instance, yang akan mendownload box ini.

vagrant init precise32
vagrant up

Sekarang instance akan berjalan. Mudah! Jika Anda ingin masuk ke dalamnya, melalui SSH, gunakan perintah ini:

vagrant ssh

Step 5 – Konfigurasi

Anda akan memiliki file, disebut Vagrantfile, yang berisi konfigurasi untuk instance ini:

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant::Config.run do |config|
    config.vm.box = "precise32"
    config.vm.box_url = "http://files.vagrantup.com/precise32.box"
    # Assign this VM to a host-only network IP, allowing you to access it
    # via the IP. Host-only networks can talk to the host machine as well as
    # any other machines on the same network, but cannot be accessed (through this
    # network interface) by any external networks.
    config.vm.network :hostonly, "192.168.33.10"
    # Set the default project share to use nfs
    config.vm.share_folder("v-web", "/vagrant/www", "./www", :nfs => true)
    config.vm.share_folder("v-db", "/vagrant/db", "./db", :nfs => true)
    # Forward a port from the guest to the host, which allows for outside
    # computers to access the VM, whereas host only networking does not.
    config.vm.forward_port 80, 8080
    # Set the Timezone to something useful
    config.vm.provision :shell, :inline => "echo \"Europe/London\" | sudo tee /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata"
    # Update the server
    config.vm.provision :shell, :inline => "apt-get update --fix-missing"
    # Enable Puppet
    config.vm.provision :puppet do |puppet|
        puppet.facter = { "fqdn" => "local.pyrocms", "hostname" => "www" }
        puppet.manifests_path = "puppet/manifests"
        puppet.manifest_file  = "ubuntu-apache2-pgsql-php5.pp"
        puppet.module_path  = "puppet/modules"
    end
end

Ini, jika Anda tidak memperhatikan, adalah sintaks Ruby; sehingga Anda bisa lebih kreatif dengan file ini, tapi ini adalah dasar-dasarnya.

Ini akan menunjukkan nickname mana yang akan digunakan dan memiliki URL dalam kasus nickname tidak diatur secara lokal (bagus untuk dibagikan ke sekitar).

Baris share_folder benar-benar berguna untuk pemetaan folder dalam contoh ke folder lokal. Menggunakan nfs => true instance akan dapat menulis dan mengubah hak akses dari file, yang berguna jika Anda, misalnya, mencoba untuk menginstal CMS di sana.

Port forwarding memungkinkan Anda untuk mengakses instance Anda pada http://localhost:8080 dan, tentu saja, mengubahnya ke port yang berbeda jika terjadi konflik.

File konfigurasi ini juga akan mengatur zona waktu ke Eropa/London, kemudian jalankan aptget update, yang harus memaksa sistem anda menjadi up-to-date setiap kali boot. Jika Anda melewatkan konfigurasi ini, Anda mungkin menemukan beberapa paket menolak untuk diinstal sebab referensi sekarang telah usang.

Ketika kamu mengubah konfigurasi, kamu bisa meload ulang instance untuk menggunakannya:

vagrant reload

Sekarang server kami telah berjalan dan siap untuk langkah selanjutanya, kita perlu menginstal beberapa perangkat lunak. Kami tidak hanya akan menggunakan apt-get install untuk menginstal banyak paket melalui baris perintah, kita akan provision” server kita.

Step 4 – Provisioning

Server Provisioning bukanlah sesuatu yang banyak pengembang perlu memikirkannya.

Server Provisioning bukan sesuatu yang banyak pengembang perlu memikirkannya, karena biasanya diserahkan kepada sysadmin. Idenya adalah untuk membuat beberapa catatan tentang perangkat lunak apa dan konfigurasi apa saja yang telah dibuat pada server sehingga Anda dapat membuat lingkungan pengembangan baru, server pementasan baru yang meniru produksi, atau membuat server produksi lain untuk memuat keseimbangan antara keduanya.

Provisioning Cara Lama

Bagaimana sysadmin menangani hal ini bervariasi, tetapi segala macam solusi telah digunakan di masa lalu – dari menjaganya dengan wiki untuk perintah yang dijalankan (yang bisa besar dan usang dengan cepat) dan pendekatan menarik menggunakan “multiterminal”, di mana Anda mengetik perintah ke dalam satu jendela dan meniru perintah yang sama pada 7 server lain pada waktu yang sama. Metode ini semua adalah mengerikan.

Salah satu solusinya adalah dengan membangun sendiri file .box Anda, atau membuat backup .iso sehingga server baru hanya dapat didasarkan pada itu, tapi mempertahankan images tersebut menciptakan banyak pekerjaan tambahan, dan tidak peduli seberapa keras Anda mencoba, mesin-mesin pembangunan akan menjadi tidak sinkron seiring waktu.

Provisioning Cara Modern

Ada dua sistem populer saat ini, yang disebut Puppet dan Chef.

Ada dua sistem populer saat ini, yang disebut Puppet dan Chef. Keduanya telah ada selama bertahun-tahun, tapi sudah mulai menjadi jauh lebih populer dengan meningkatnya metode pengembangan DevOps . Ide-ide untuk keduanya sama dan Anda harus menyelidiki kedua sistem, tapi tutorial ini akan fokus secara eksklusif pada Puppet.

Pada dasarnya, alih-alih menjalankan sekelompok perintah dan berharap semuanya bekerja dengan baik, Anda membangun sebuah manifest untuk Puppet menjelaskan segala sesuatu yang Anda perlu memastikan telah dilakukan. Bila Anda menjalankan perintah di terminal, Anda pada dasarnya mengatakan kepada komputer:

“Install Apache”

Dengan Puppet, kita akan mengatakan:

“Ensure Apache is installed”

Atau, bukannya:

“Make a new folder, called /var/wwwand set permissions to www-data:www-data”

Dengan Puppet, kita berkata:

“Ensure /var/www exists and has permissions matching www-data:www-data”

Perbedaannya di sini adalah bahwa memanifestasikan ini dapat dijalankan beberapa kali (pada tugas cron per jam atau harian) untuk menjaga hal-hal up to date, dan tidak akan ada hasil yang tidak diharapkan dari sesuatu yang mencoba untuk menginstal dua kali.

Ini juga akan membantu Anda menguji bahwa semuanya berjalan seperti yang diharapkan, ketika salah satu dari aturan-aturan ini gagal akan melemparkan kesalahan yang lebih mudah untuk dilacak dari greping sejumlah besar hasil perintah bash. Puppet akan melemparkan kesalahan merah besar (big red errors) membiarkan Anda tahu bahwa PHP tidak terinstal, atau modul tertentu tidak dapat dikonfigurasi.

Manifest dan Module

Manifests sedikit membingungkan pada awalnya, tetapi, setelah beberapa saat, mereka mulai masuk akal.

Berikut contoh dasar manifest:

file {'testfile':
  path    => '/tmp/testfile',
  ensure  => present,
  mode    => 0640,
  content => "I'm a test file.",
}

Tidak perlu untuk menjelaskan apa yang terjadi di sini, kan?

File ini dapat kemudian dimaksud ke dalam manifest Anda sebagai testfile” yang berarti dapat terdaftar sebagai dependensi untuk tindakan lainnya.

Contoh lebih jauh, kita akan mengacu pada manifests Puppet di GitHub untuk PyroCMS.

include apache
$docroot = '/vagrant/www/pyrocms/'
$db_location = "/vagrant/db/pyrocms.sqlite"
# Apache setup
class {'apache::php': }
apache::vhost { 'local.pyrocms':
    priority => '20',
    port => '80',
    docroot => $docroot,
    configure_firewall => false,
}
a2mod { 'rewrite': ensure => present; }

Ini termasuk modul apache”, set up beberapa variabel, menjalankan manifest tambahan apache::phppada modul apache, membuat sebuah virtual host kemudian memastikan bahwa mod_rewrite” diaktifkan.

Semua kelas ini didefinisikan dalam modul Apache yang kami disertakan.

Selanjutnya, kami juga ingin menginstal PHP:

include php
php::module { ['xdebug', 'pgsql', 'curl', 'gd'] :
    notify => [ Service['httpd'], ],
}
php::conf { [ 'pdo', 'pdo_pgsql']:
    require => Package['php5-pgsql'],
    notify  => Service['httpd'],
}

Ini potongan menifest yang akan menginstal ekstensi PHP yang kita butuhkan, kemudian pilihan notify akan memberi tahu Apache bahwa Anda telah menginstal konfigurasi baru, yang berarti akan merestart apache.

include postgresql
class {'postgresql::server': }
postgresql::db { 'pyrocms':
    owner     => 'pyrocms',
    password => 'password',
}

Hal ini akan membuat server postgres, membuat database, yang disebut pyrocms” dan memastikan pengguna, yang disebut pyrocms” ada dengan password yang diberikan.

Hampir selesai! Langkah terakhir adalah untuk memastikan bahwa Anda memiliki file dan folder yang dapat ditulis dan diatur dengan benar:

file { $docroot:
    ensure  => 'directory',
}
file { "${docroot}system/cms/config/config.php":
    ensure  => "present",
    mode    => "0666",
    require => File[$docroot],
}
$writeable_dirs = ["${docroot}system/cms/cache/", "${docroot}system/cms/config/", "${docroot}addons/", "${docroot}assets/cache/", "${docroot}uploads/"]
file { $writeable_dirs:
    ensure => "directory",
    mode   => '0777',
    require => File[$docroot],
}

Ini akan memastikan bahwa dokumen root Apache ada, file konfigurasi diatur ke 0666, dan beberapa folder yang dapat ditulis diatur ke 777.

Inilah semua yang kita miliki!

Untuk menjalankan semua ini, hanya reboot Vagrant Anda, atau

vagrant provision

Jika semuanya telah bekerja dengan benar, Anda akan melihat banyak teks sinyal biru yang semuanya sedang diinstal, namun, jika terjadi kesalahan, Anda akan melihat warna merah. Google kesalahan-kesalahan itu dan coba lagi.

Modul yang digunakan di sini adalah: Apache, Postgres, PHP dan Anda dapat melihat semuanya dalam tindakan dengan kloning repo PyroCMS Vagrant:

git clone --recursive git://github.com/pyrocms/devops-vagrant.git ~/vagrant/pyrocms
cd ~/vagrant/pyrocms
vagrant up

Arahkan browser kamu ke http://localhost:8089/ dan kamu seharusnya akan melihat installer. Mudah kan?

Catatan: Ini akan menginstal dengan MySQL karena dukungan Postgres dan SQLite di PyroCMS masih dalam pengembangan, menunggu fitur PDO CodeIgniter untuk diselesaikan. Jika kamu tertarik, kamu bisa bereksperimen dengan manifest Vagranfile untuk digunakan ubuntu-apache2-pgsql-php5.pp, hancurkan instance, dan jalankan ulang. Submodul pyrocms juga perlu untuk di cek di feature/pdo.

Kesimpulan

Pada artikel ini, kami menggunakan vagrant, VirtualBox dan Puppet untuk tidak hanya satu server contoh bagi kita , tapi kami telah membuat test suite untuk server kami untuk memastikan bahwa semuanya berjalan, diinstal dan dikonfigurasi dengan benar.

Kami juga telah membuat checklist untuk persyaratan, dan akan, di masa depan, dapat membuat sejumlah server identik dalam hitungan menit, bukan jam!

diterjemahkan secara bebas dari : http://code.tutsplus.com/tutorials/vagrant-what-why-and-how–net-26500

Advertisements

About phpgeek programmer

pemimpi yang berharap menjadi the best programmer di zamannya

One response »

  1. aginanjarm says:

    thanks for sharing gan 😀

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s