Mendirikan Staging Environment
() translation by (you can also view the original English article)
Itu adalah praktek yang umum untuk bekerja secara lokal pada revisi proyek dan push ke server produksi, tetapi langkah yang orang sering skup adalah server staging. Server staging adalah campuran antara produksi dan pengembangan; Anda mendapatkan untuk menguji aplikasi Anda seolah-olah dalam produksi. Mari kita tinjau beberapa isu-isu yang Anda harus mempertimbangkan, serta langkah-langkah yang diperlukan untuk mereplikasi production Platform as a Service (PAAS).
Itu terjadi lebih dari sekali: saya push revisi aplikasi saya ke dalam produksi, hanya untuk menemukan masalah setelah itu menjadi public. Masalah ini dapat menjadi sederhana seperti lupa untuk menambahkan gambar ke repositori Anda, atau mungkin sebagai besar seperti mengubah struktur database lokal dan lupa untuk mengupdate database produksi. Masalah terjadi kepada semua orang, terutama ketika Anda memiliki deadline yang sebentar lagi. Dalam situasi ini, itu adalah ide yang cerdas untuk setup staging environment. Idenya adalah untuk memiliki sebuah server yang erat replikasi lingkungan produksi, untuk menguji aplikasi Anda sebelum di publikasi.
Staging enviroment tidak hanya menangkap kesalahan manusia, tetapi juga terkait perangkat lunak isu-isu.
Anda dapat menemukan dan memperbaiki masalah ini karena staging area memiliki perangkat lunak yang sama sebagai lingkungan produksi Anda. Ini adalah dalam kontras ke komputer lokal Anda, di mana Anda mungkin memiliki versi yang berbeda dari perangkat lunak yang diinstal (misalnya 5,3 PHP vs PHP 5.4) atau bahkan berbeda fitur. Aku telah push push kode yang terkandung panggilan ke file_get_contents
hanya untuk menemukan bahwa server produksi tidak mendukung fungsi tersebut.
Jadi bagaimana Anda pergi tentang pengaturan server staging? Nah, langkah pertama adalah sedikit pengintaian.
Itu adalah semua dalam rincian (kebanyakan)
Masalah terjadi kepada semua orang, terutama ketika Anda dikejar deadline.
Menciptakan stagin envionment khusus untuk lingkungan produksi Anda. Ada solusi ajaib yang bekerja dalam setiap situasi. Tetapi umumnya mengikuti pola yang sama, dan saya akan membahas poin-poin penting seperti yang kita pergi bersama-sama.
Wajar untuk menganggap bahwa kebanyakan orang deploy aplikasi mereka dengan semacam versioning tool (seperti GIT). Pada kesempatan aneh bahwa Anda sedang bekerja pada sebuah proyek tua yang masih menggunakan FTP, situs seperti ftploy.com atau deployHQ.com dapat bertindak sebagai penyangga antara GIT dengan server Anda. Jeffrey Way mengumpulkan informatif video yang merinci bagaimana untuk mengatur itu.
Selain GIT, Anda harus berpikir tentang bahasa, perangkat lunak, dan "khusus" feature yang ditawarkan server produksi. Saya menggunakan PHP-PAAS based, bernama Fortrabbit, karena mereka menawarkan up-to-date PHP, Apache, dan dukungan GIT. Mereka juga menyediakan kemampuan untuk menambahkan kata kunci dalam pesan komit GIT yang memicu composer untuk menginstal dependensi proyek Anda.
Ini adalah sistem yang aku akan saya setup di seluruh artikel ini. Fitur-set nya standar, serta fitur khusus composer, membuat Fortrabbit cocok untuk berbagai macam host. Hanya ingat: ini bukanlah solusi ajaib, tetapi langkah-langkah yang terlibat mengikuti pola yang sama yang Anda gunakan untuk men-setup lingkungan staging sebagian besar proyek. Menyesuaikan proses untuk kebutuhan spesifik Anda.
Jadi tanpa basa-basi lagi, mari kita coba.
Membuat Server
Menciptakan lingkungan staging khusus untuk lingkungan produksi Anda.
Ada banyak sistem operasi yang berbeda Anda dapat jalankan di server. Fortrabbit berjalan Debian Squeeze pada server mereka, dan karena kami mencoba untuk mencocokkan mereka, saya memutuskan untuk menjalankannya juga.
Saya akan menggunakan Vagrant untuk mengatur ini. Jangan khawatir jika Anda belum pernah menggunakan Vagrant; kami tidak akan melakukan apa pun yang lebih jauh. Pastikan Anda memiliki VirtualBox dan Vagrant terinstall (Vagrant adalah CLI untuk VirtualBox; jadi VirtualBox diperlukan).
Vargant mengambil snapshot virtual dari sistem operasi sebagai dasar 'box', dan Anda dapat membuat beberapa VMs dari image. Jadi pertama, kita perlu men-download base box untuk Debian Squeeze. Aku tidak benar-benar yakin mana salinan saya berasal dari, jadi saya upload ke DropBox bagi Anda untuk men-download dan menggunakan. Untuk menginstal, membuka jendela terminal dan ketik:
1 |
|
2 |
vagrant box add debian https://dl.dropbox.com/u/30949096/debian.box |
Ini menambah box ke gelandangan dengan nama, 'debian'. Kita dapat membuat sebuah instance dari kotak ini untuk staging area kami. Pertama, mari kita buat folder baru:
1 |
|
2 |
mkdir ~/staging_server
|
3 |
cd ~/staging_server
|
Selanjutnya, buat file konfigurasi Vagrang dengan mengetik:
1 |
|
2 |
vagrant init debian |
Hal ini menciptakan sebuah file config, bernama "VagrantFile", yang berisi semua setting untuk server Anda. Kelihatannya cukup ramai ketika Anda membukanya, tetapi kebanyakannya hanya komentar. Anda hanya perlu uncomment baris : config.vm.network: bridged
. Menghapus semua komentar membuat Anda dengan sebuah file yang terlihat seperti ini:
1 |
|
2 |
Vagrant::Config.run do |config| |
3 |
config.vm.box = "debian" |
4 |
config.vm.network :bridged |
5 |
end
|
Pilihan ini memberitahu Vagrang untuk menciptakan mesin virtual baru berdasarkan box basis Debian Squeeze. Ini kemudian set modus jaringan menjadi 'bridged'. Sebuah VM dengan bridged jaringan muncul sebagai mesin fisik baru ke router Anda, sehingga secara otomatis mengambil alamat IP-nya sendiri. Hal ini memungkinkan Anda mengakses mesin dari perangkat pada jaringan Anda (mungkin di luar jaringan Anda jika Anda mengkonfigurasi router Anda).
Sekarang, kita bisa meluncurkan VM dengan perintah: "
vagrant up
" (tanpa tanda kutip).
Anda harus melihat output dari Vagrant menciptakan VM Anda. Jika komputer Anda memiliki beberapa nic terhubung ke jaringan, Vagrant akan meminta Anda untuk memilih NIC Bridge.
Kita akan menggunakan SSH untuk login, tetapi kita harus menggunakan built-in Vagrang 's "vagrant ssh
" perintah untuk login. Menurut praktik terbaik vagrant, semua kotak harus memiliki pengguna bernama "vagrant" dengan password, dan password untuk keduanya root dan vagrant, "vagrant" Pengguna vagrant ditambahkan sebagai pengguna sudo
yang tidak perlu memasukkan sandi, sehingga Anda dapat langsung menggunakan perintah sudo
.
Mari kita bergerak dan mengatur perangkat lunak server.
Perangkat lunak
Fortrabbit's setup meliputi:
- Apache 2,2
- PHP 5.4
- Composer
Selain itu, mereka menggunakan dotdeb repositori untuk menginstal sebagian besar dari itu. Bagi mereka yang tidak terbiasa, dotdeb adalah sebuah proyek oleh Guillaume Plessis yang menginstall versi terbaru dari paket server web yang populer.
Kami siap untuk memulai. Memastikan bahwa jendela terminal terbuka dan login ke server melalui SSH. Pertama, tambahkan dotdeb repo ke APT (manajer paket) dengan menambahkan sebuah file baru ke direktori sources.d:
1 |
|
2 |
sudo vim /etc/apt/sources.list.d/dotdeb.list
|
Ini akan membuka sebuah file baru yang bernama dotdeb.list
di vim (editor teks). Nama ini tidak penting karena semua file dalam direktori ini membaca ke APT. Kita perlu menambahkan empat baris file ini. Jika Anda belum pernah menggunakan VIM, cukup ketik "i
" untuk memasuki modus insert dan copy/paste empat baris berikut :
1 |
|
2 |
deb http://packages.dotdeb.org squeeze all |
3 |
deb-src http://packages.dotdeb.org squeeze all |
4 |
deb http://packages.dotdeb.org squeeze-php54 all |
5 |
deb-src http://packages.dotdeb.org squeeze-php54 all |
Untuk menyimpan, tekan tombol esc
dan ketik: wq
. Itu adalah perintah untuk menulis dan berhenti, yang pada dasarnya berarti menyimpan dan keluar.
Menekan enter menyimpan file dan kembali ke command line.
Kami sekarang telah menambahkan repos, tetapi kita masih perlu untuk menambahkan signature sebelum kita dapat menggunakannya. Ketik perintah berikut untuk menambahkan tombol GNU:
1 |
|
2 |
curl http://www.dotdeb.org/dotdeb.gpg | sudo apt-key add -
|
Ini download kunci dotdeb dan menambahkannya sebagai sumber ditandatangani. Sekarang diperbaharui APT untuk menarik paket baru dengan mengetikkan:
1 |
|
2 |
sudo apt-get update
|
Ini dapat mengambil satu menit atau lebih, tetapi Anda akan memiliki semua paket dotdeb tercantum di APT ketika itu selesai. Karena bagaimana dotdeb setup dan bagaimana APT dependensi tersebut dimuat, kita dapat menginstal Apache, PHP, dan pada saat yang sama dengan mengetik:
1 |
|
2 |
sudo apt-get install php5 |
Dengan ini satu baris, APT menginstal dan mengkonfigurasi Apache2 dan PHP5. Jika Anda menggunakan Fortrabbit memcache add-on, kemudian Anda dapat menginstalnya dengan:
1 |
sudo apt-get install memcached |
Tapi aku tidak akan pergi ke memcache pada contoh dalam artikel ini.
Sekarang kita perlu menginstal ekstensi yang menggunakan Fortrabbit. Jalankan perintah berikut:
1 |
|
2 |
sudo apt-get install php5-xdebug php5-tidy php5-sqlite php5-redis php5-pgsql \ |
3 |
php5-mysqlnd php5-memcache php5-memcached php5-mcrypt php5-imagick php5-http \
|
4 |
php5-gmp php5-gd php5-curl php5-apc php5-intl |
Hal terakhir yang kita perlu menginstal adalah composer. Aku akan menginstal secara global karena kami akan menggunakannya di beberapa lokasi yang berbeda. Perintah untuk menginstal secara global composer adalah:
1 |
|
2 |
curl -s https://getcomposer.org/installer | php
|
3 |
sudo mv composer.phar /usr/local/bin/composer
|
Perintah pertama download dan menjalankan installer; perintah kedua memindahkan composer ke bin folder sehingga kita dapat menggunakannya tanpa menyatakan path. Mari kita beralih ke konfigurasi.
Menyiapkan Apache
Kemungkinan baik bahwa Anda mungkin bekerja pada lebih dari satu proyek. Jika hal ini terjadi, memiliki sebuah server staging untuk setiap proyek menciptakan banyak overhead. Untuk memungkinkan beberapa situs pada sebuah server tunggal, kita perlu menambahkan berbasis nama host virtual untuk Apache, dan harus memisahkan direktori dan repos untuk setiap proyek.
Mari kita mulai dengan virtual host.
Saya akan terus menggunakan vim, tapi tahu bahwa jika Anda ingin menggunakan program Anda sendiri, Anda dapat menyalin dan menyisipkan atau menyimpannya dalam folder
staging_server
yang Anda buat pada komputer Anda.
Folder yang shared ke VM Anda, dan Anda dapat mengakses file dalam direktori root vagrant
. Anda dapat menggunakan: sudo cp/vagrant/file newfile
atau sudo mv/vagrant/filee newfile
untuk menyalin atau memindahkan file, masing-masing.
Untuk membuat virtual host baru, kita perlu membuat file dalam /etc/apache2/sites-available /
direktori. Untuk melakukan ini dengan VIM, ketik berikut ini:
1 |
|
2 |
sudo vim /etc/apache2/sites-available/demo.site
|
Di dalam, masukkan berikut (ingat tekan "i
" untuk modus insert):
1 |
|
2 |
<VirtualHost *:80>
|
3 |
ServerAdmin youremail@provider.com |
4 |
ServerName demo.dev |
5 |
DocumentRoot /var/www/demo |
6 |
|
7 |
<Directory /var/www/demo> |
8 |
Options Indexes FollowSymLinks MultiViews |
9 |
AllowOverride ALL |
10 |
Order allow,deny |
11 |
allow from all |
12 |
</Directory> |
13 |
|
14 |
ErrorLog ${APACHE_LOG_DIR}/demo.log |
15 |
LogLevel debug |
16 |
</VirtualHost> |
Baris pertama menyatakan sebuah host virtual yang mendengarkan permintaan pada setiap IP di port 80. Selanjutnya, kami menetapkan server admin email dan nama server. Email adalah untuk tujuan pelaporan kesalahan, dan server nama pilihan memberitahu Apache ketika membaca host virtual ini. Host virtual biasa bekerja dari IPs. Sebagai contoh, setiap vhost listern pada IP yang berbeda; Itulah bagaimana Apache membedakan mereka.
Karena Anda mungkin hanya memiliki satu IP, kita dapat menggunakan name-based Virtual host, memungkinkan Anda untuk memberikan nama yang berbeda pada IP yang sama.
Dalam contoh kita, setiap request yang ditujukan demo.dev dijemput oleh host virtual ini.
Baris berikutnya set folder root document. Ini adalah mana Apache mengambil file untuk vhost ini. Pernyataan di dalam Directory
direktif menetapkan izin untuk vhost ini. Aku tidak akan pergi ke terlalu banyak detail, tapi kami pertama membuat direktori Apache pilihan, kemudian kita menetapkan apa dapat diganti dalam .htaccess file, dan akhirnya kita menetapkan yang dapat mengakses situs (semua orang bisa dalam kasus kami).
Dua baris terakhir memberitahu Apache apa nama log file dan apa yang harus ditulis ke log. File log dinamai demo.log dalam folder log Apache yang terletak di /var/log/apache2/
pada VM ini.
Untuk mengaktifkan vhost ini, ketik berikut ini:
1 |
|
2 |
sudo a2ensite demo.site
|
Hal ini menciptakan symlink antara file dalam folder sites-available untuk file dalam folder situs-enabled. Setelah menjalankan perintah ini, Anda diminta untuk me-restart Apache. Anda akan mendapatkan error jika Anda mencoba untuk me-restart Apache karena kami belum membuat direktori situs. Ini mudah dengan menciptakan folder demo
yang kami dirujuk dalam vhost file:
1 |
|
2 |
sudo mkdir /var/www/demo
|
Kita tidak ingin user root mempunyai folder sendiri, sehingga mengubah vagrant user dengan perintah chown
:
1 |
|
2 |
sudo chown -R vagrant:vagrant /var/www/demo |
Sekarang restart Apache:
1 |
|
2 |
sudo service apache2 restart</code>
|
Situs baru kami sekarang harus sepenuhnya berfungsi. Langkah berikutnya adalah untuk men-setup GIT.
Menindaklanjuti dengan beberapa GIT Magic
Pastikan bahwa Anda berada di direktori home dengan mengetik cd ~
. Buat folder baru untuk repo: mkdir demo.git
, masukkan folder, dan menginisialisasi baru, repo GIT:
1 |
|
2 |
cd demo.git
|
3 |
git init --bare
|
bare repo adalah pada dasarnya repo standar tanpa direktori kerja. Jika Anda ingin mempelajari lebih lanjut tentang GIT, memeriksa Andrew Burgess' seri video.
Kita sekarang perlu kemampuan untuk push kode ke folder situs, dan ada banyak cara untuk mencapai hal ini. Tapi saya ingin membuat benda terlihat sedekat mungkin ke layanan yang saya tiru. Berikut adalah gambar fortrabbit di git proses diambil dari situs mereka:



Anda dapat melihat proses push melewati tiga langkah. Ini akan menampilkan pesan update ketika terhubung, dan itu menyebarkan situs ke direktori. Langkah terakhir menginstal semua jika pesan komit berisi kata kunci "[trigger:composer]". Kemudian setelah tiga langkah selesai, Anda akan ditampilkan ">> semua selesai
Sebelum kita membuat hook, saya ingin berbicara tentang warna.
Saya melakukan sebagian besar pekerjaan saya di terminal, dan lebih sering daripada tidak, terminal apps meninggalkan segala sesuatu dengan warna yang sama. Menambahkan warna yang berbeda untuk aplikasi Anda tidak hanya meningkatkan readability, tetapi juga meningkatkan kemampuan seperti. Jadi lebih baik menyebar "warna praktek" pada terminal apps, aku akan mengambil waktu untuk mendiskusikan bagaimana mereka bekerja.
Terminal warna
Terminal dilengkapi dengan enam belas ANSI warna yang dapat dikonfigurasi dan digunakan di seluruh terminal. Berikut adalah gambar iTerm2 layar pengaturan, menampilkan warna 16 slot:



Anda dapat mengaksesnya di terminal dengan mengetik karakter escape, diikuti dengan braket persegi terbuka, dan kemudian kode warna. Anda dapat melihat dalam gambar ini bahwa warna terbagi menjadi dua baris: satu berlabel "Normal" dan yang lain "Bright". Kode warna normal adalah nomor 30-37 diikuti huruf "m", dan warna-warna cerah dari 90-97 lagi diikuti oleh m. Anda dapat menguji ini dalam jendela terminal menggunakan echo
. Untuk membuat karakter escape, ketik ctrl-v
diikuti oleh ctrl-[
Anda akan mendapatkan sebuah karakter yang mirip ^ [
, tetapi itu tidak akan bekerja jika Anda cukup mengetikkan "^ [" (shift-6 dan kemudian buka braket persegi). Jadi dalam jenis jendela terminal:
1 |
|
2 |
echo "^[[31m Hello World ^[[0m" |
Sekali lagi, pertama ^ [
tidak diketik tetapi diciptakan dengan ctrl-v
dan kemudian ctrl-[
. 0m
kode karakter adalah kode reset; menghilangkan semua format. Hal ini karena kode warna tidak berakhir setelah kata berikutnya, mereka terus sampai mereka menerima kode yang berbeda.
Jika dilakukan dengan benar, kode di atas output kata-kata "hello world" menjadi merah (kecuali jika Anda memiliki slot untuk warna yang berbeda).
Sepanjang sisa tutorial, saya akan menambahkan warna untuk perintah. Merasa bebas untuk mengikuti bersama atau menghilangkan mereka; mereka tidak benar-benar diperlukan. Tetapi jika Anda ingin menggunakan warna, merasa bebas untuk menggunakan color-helping class. Sekarang, mari kita pergi kembali ke menulis hook.
Menciptakan Hook
Jika Anda mengambil melihat gambar Fortrabbit, Anda akan melihat bahwa ini akan menampilkan pesan "Step1: memperbarui repositori" sebelum memperbarui repo. Untuk melakukan ini dengan benar, kita harus menempatkan pesan ini di pre-receive hook, yang mengeksekusi sebelum repo diperbarui. Dalam jendela terminal ketik:
1 |
|
2 |
vim ~/demo.git/hooks/pre-receive |
Ini akan membuka hook untuk diedit. Tambahkan kode berikut:
1 |
|
2 |
#!/usr/bin/php |
3 |
<?php
|
4 |
$yellow = "^[[33m"; |
5 |
$blank = "^[[0m"; |
6 |
echo $yellow . "Step1: Updating repository" . $blank . "\n"; |
7 |
?>
|
Baris pertama memberitahu OS bahwa ini adalah PHP file dan untuk menjalankannya seperti itu. Kemudian kami menetapkan warna dan urutan reset untuk variabel. Langkah terakhir echo
s baris.
Hook berikutnya sedikit lebih rumit karena hal ini menangani seluruh action. Kami akan mengambil langkah demi langkah, sehingga menghemat hook pertama (: wq) dan Buka hook berikutnya:
1 |
|
2 |
vim ~/demo.git/hooks/post-receive |
Post-receive hook berjalan setelah repo diperbarui. Kita harus pertama memperbarui situs dan kemudian cek untuk memicu composer. Berikut adalah kerangka program kami, meninggalkan logika apapun yang baru:
1 |
|
2 |
#!/usr/bin/php |
3 |
<?php
|
4 |
$yellow = "^[[33m"; |
5 |
$cyan = "^[[36m"; |
6 |
$blank = "^[[0m"; |
7 |
|
8 |
//print OK for first step
|
9 |
echo " -> " . $cyan . "OK" . $blank . "\n"; |
10 |
|
11 |
echo $yellow . "Step2: Deploying" . $blank . "\n"; |
12 |
/*TODO: Deploy to site */
|
13 |
echo " -> " . $cyan . "OK" . $blank . "\n"; |
14 |
|
15 |
/*TODO: Check if commit has trigger */
|
16 |
|
17 |
echo $yellow . ">> All Done <<" . $blank . "\n"; |
18 |
?>
|
Ini adalah hanya sebuah kerangka untuk bekerja dari. Hal pertama yang kita butuhkan untuk dimasukkan ke dalam adalah fitur untuk menarik repo versi baru ke direktori situs. Secara tradisional, saya hanya akan ketik berikut jika aku berada di folder:
1 |
|
2 |
git fetch origin |
3 |
git reset --hard origin/master
|
Anda bisa menggunakan sesuatu seperti git pull
, tetapi melakukan sehingga dapat menyebabkan kesalahan. Jika file langsung berubah, atau jika Anda melewatkan commit, kemudian git pull
tidak akan memungkinkan Anda menarik atau menghapus file yang tidak terlacak.
Ini adalah dua perintah sederhana, tetapi Anda akan mendapatkan error jika Anda mencoba dan menjalankan mereka dari hook.
GIT menetapkan beberapa variabel environment sebelum menjalankan hook. Anda dapat menghindari hal ini dengan salah satu dari dua solusi, dan aku akan menunjukkan Anda keduanya.
Yang pertama adalah untuk menggantikan variabel environemtn, melewati dalam info langsung. Kedua benar-benar menghapus variabel. Saya akan menggunakan opsi pertama dalam contoh ini dan opsi kedua ketika kita bekerja di composer trigger. Ganti komentar saya menambahkan di atas dimana tertulis "Deploy TODO Deploy to site" dengan berikut:
1 |
|
2 |
$git = "git --git-dir=/var/www/demo/.git/ --work-tree=/var/www/demo/"; |
3 |
|
4 |
exec("$git fetch -q origin"); |
5 |
exec("$git reset --hard origin/master"); |
Ini menimpa environment variabel dan memanggil fungsi tersebut. Parameter tambahan - q
memberitahu GIT untuk "quiet", melarang GIT menampilkan pesan.
Sekarang kita perlu untuk memeriksa composer trigger. Mari kita istirahat ini menjadi dua langkah. Kami pertama kali Periksa trigger, dan kemudian kita jalankan composer. Ganti komentar TODO kedua dengan berikut:
1 |
|
2 |
$msg = exec("$git log -n 1 --format=format:%s%b"); |
3 |
if(strpos($msg, "[trigger:composer]") !== false){ |
4 |
echo $yellow . "Step3: Composer Hook" . $blank . "\n"; |
5 |
echo " -> Triggering install - get a " . $cyan . "coffee" . $blank . "\n"; |
6 |
|
7 |
//run composer
|
8 |
|
9 |
echo " -> " . $cyan . "OK" . $blank . "\n"; |
10 |
}
|
Baris pertama mengambil pesan commit menggunakan perintah git log
dan dimasukan dalam format khusus untuk mengecualikan informasi tambahan. Selanjutnya, kami memeriksa apakah string memiliki pemicu khusus kata, dan echo langkah ketiga dan pesan OK. Kami memeriksa untuk kata kunci composer, tetapi Anda dapat mengimplementasikan beberapa kata kunci untuk fitur lain seperti: migrasi pada Laravel atau menjalankan unit test. Tambahkan apa-apa untuk meningkatkan alur kerja Anda.
Langkah terakhir adalah untuk melaksanakan Composer. Composer memiliki dua perintah: composer install
dan composer update
.
install command tidak membaca
composer.json
file jika ia menemukancomposer.lock
, dan karena beberapa orang mungkin menambahcomposer.lock
berkas .gitignore mereka, itu lebih aman untuk menjalankancomposer update
(itu selalu terlihat padacomposer.json
file.
Isu kedua adalah bahwa kadang-kadang Composer menggunakan GIT untuk men-download paket, dan usaha-usaha ini gagal karena variabel environment. Jadi di sini adalah tempat yang baik untuk hanya menghapus variabel environment "GIT_DIR". Ganti komentar untuk menjalankan composer dengan berikut:
1 |
|
2 |
chdir("/var/www/demo"); |
3 |
putenv("GIT_DIR"); |
4 |
exec("composer update"); |
Kode ini adalah mudah dipahamai. Kita memindahkan proses PHP ke situs folder, dan kemudian menghapus variabel environment GIT_DIR
sehingga GIT fungsi normal. Baris terakhir mengeksekusi Composer.
Mengikat Loose Ends
Kami sekarang memiliki kedua kait setup, tetapi kita tidak benar-benar siap untuk mulai menggunakan server kami. Pertama, kita perlu membuat kait ini dapat dijalankan:
1 |
|
2 |
chmod a+x ~/demo.git/hooks/pre-receive
|
3 |
chmod a+x ~/demo.git/hooks/post-receive
|
Selanjutnya, buat GIT repo di folder situs. Kita akan mendapatkan error jika kita mencoba untuk menjalankan hook kami karena situs folder bukan GIT repo. Untuk memperbaiki ketik ini:
1 |
|
2 |
cd /var/www/demo
|
3 |
git init |
4 |
git remote add origin /home/vagrant/demo.git |
Dua baris pertama membuat repo, dan kemudian kita tambahkan repositori telanjang sebagai asal repo ini.
Anda juga harus menambahkan key publik ke server ini resmi host sehingga Anda dapat mengakses server melalui GIT tanpa password. Anda dapat menyalin key publik dengan mengetik di komputer Anda (tidak VM):
1 |
|
2 |
cat ~/.ssh/id_rsa.pub | pbcopy
|
Kemudian, paste ke server di file ~/.ssh/authorized_keys:
1 |
|
2 |
vim ~/.ssh/authorized_keys |
Hanya menambahkannya ke file, tetapi meninggalkan apa pun sudah di dalam.
Selanjutnya, kita perlu menambahkan IP server ini ke file host kami. Untuk mencari IP, ketik:
1 |
|
2 |
ip -4 -o addr show label eth* |
Ini menunjukkan Anda IP dari semua perangkat jaringan pada VM ini. Menambahkan salah satu yang terhubung ke jaringan lokal Anda. Jika Anda tidak dapat menentukan alamat IP yang akan digunakan, Salin dan sisipkan salah satu ke dalam browser Anda. Jika menghubungkan, maka Anda memiliki alamat IP yang benar.
Mengambil IP dan menambahkannya ke file host komputer Anda (tidak VM host file). Berkas hosts pada Mac terletak di etc/hosts
:
1 |
|
2 |
sudo vim /etc/hosts
|
Selanjutnya, tambahkan baris berikut:
1 |
|
2 |
#Format: IP_address site_name
|
3 |
192.168.0.110 demo.dev |
Jika berjalan, Anda akan mampu menavigasi ke http://demo.dev
di browser Anda. Sementara masih pada Mac Anda, membuat folder dan menginisialisasi GIT repo:
1 |
|
2 |
mkdir ~/demo
|
3 |
cd ~/demo
|
4 |
git init |
5 |
echo "Hello World" > index.php |
6 |
git add .
|
7 |
git commit -am "added index.php" |
8 |
git remote add staging vagrant@demo.dev:demo.git |
9 |
git push staging master |
Jika semuanya berjalan dengan baik, Anda harus melihat Balasan dari hook GIT. Menavigasi ke http://demo.dev
harus menghasilkan "Hello World" pesan ditampilkan dalam browser Anda.



Kesimpulan
Jadi itu adalah bagaimana Anda dapat membuat lingkungan staging yang meniru fungsi PAAS. Jika Anda mengalami kesulitan mengikuti terus, atau Anda perlu untuk men-setup beberapa lingkungan staging, saya membuat sebuah script yang benar-benar mengotomatiskan proses. Untuk informasi lebih lanjut, Anda dapat mengunjungi stagr.gmanricks.com.
Saya harap Anda menikmati artikel. Merasa bebas untuk menanyakan pertanyaan apapun yang mungkin Anda miliki di komentar. Terima kasih sudah membaca.