Bir PHP web projesi, altyapı kurma

5 Cevap php

Ben geliştirme, hazırlama ve üretim sunucuları var ki nasıl ben en iyi benim PHP (LAMP) geliştirme ortamı kurabilirsiniz. Bir-herhangi bir revizyon için bu herhangi bir dağıtım, hem de tek-tıklama geri alma "tıklayın". Rollback Ayrıca kaynak kodu mevcut iken nasıl oldu veritabanı şeması ve veri geri alma gerekir.

Şu anda kabuk komut dosyalarını kullanarak bir uygulama için (DB geri alma yeteneği hariç) tüm bu yaptık. Ben başkalarının ortamlar kurulum nasıl merak ediyorum, ve orada herhangi bir jenerik araçlar ya da en iyi uygulamalar varsa da kadarıyla düzen söz konusu olduğunda takip etmek.

Peki, bunu nasıl yaparsınız? Ne mevcut araçları kullanmak mı?

Teşekkürler!

GÜNCELLEME: Ben ilgilendiğim ne hakkında bazı karışıklık olmadığı gibi netleştirmek için

Ben gerçekten insanların ortamı kurmak nasıl uymak istiyorum.

Eğer bir PHP projeyi çalıştırmak ve sürüm kontrolü DB şema varsa, bunu nasıl yaparsınız? Hangi araçları kullanıyorsunuz? Onlar içi ya da hepimiz bir yere web bunları bulabilirim?

Eğer bir PHP projeyi çalıştırmak ve taahhüt üzerine otomatik test (ve / veya gece), bunu nasıl yaparsınız yoksa? Ne kaynak sürüm sistemi kullanıyorsunuz? Eğer SVN kullanımı ve post-commit kanca testlerinizi çalıştırmak mı?

Birden dev sunucuları ile bir PHP projesi, bir sahneleme sunucu ve üretim sunucusu (ler) çalıştırırsanız, bunları nasıl organize ederim ve nasıl dağıtmak?

Ne bu çıkmak için umut diğerleri her şeyi birlikte tutkal nasıl iyi bir fikirdir.

5 Cevap

Bizim üretim ortamı aşağıdakileri içerir:

  • Sitemizin hizmet 3 önyüzleridir
  • 2 veritabanı backends (Master-Slave, çoğaltma)
  • 1 karışık hangi AdServing için httpd ve veritabanı çalışır

Bizim geliştirme ortamı veritabanı ve httpd hem de çalışan tek bir sunucu, yapılandırma-bilge biz herkesin kurulum için farklı çalışma alanları var ve bizim VC yıkılma olduğunu. Sahneleme de oldukça basit - bu Frontenflerin birinde çalışır.

Database changes

Başlangıçta biz veritabanı tasarımı üzerinde çok zaman geçirdim ve gerçekten işe yaramış gibi görünüyor. Biz şimdi beş ay içinde önemli bir şey değişmedi. Biz dağıtmak değişikliklerin çoğu önyüz vardır. Şimdi, bugüne kadar elle veritabanına tüm değişiklikleri çalıştırmak ve ben her zaman dönmek için küçük bir script yazdım.

Onlardan daha fazla olsaydı, ben Doctrine kullanmak istiyorum ve Migrations burada. Ben aslında üretimde bunları kullanmak için şansı vardı hiç ama ben zaten yoğun olan oynadım ve çok güçlü görünüyor.

Deployment

Biz evreleme kontrol kod etiketi oluşturmak yeni bir sürümünü dağıtmak Yani, her zaman vb çek bir çift listeleri geçmesi ve daha sonra biz üretim Frontenflerin üzerinde kodunu dağıtmak. Dağıtımın tüm yapıyor, ben Capistrano bir kaç görevleri kurulum var.

Bu örnek Çıkış capfile:

role :www, "web01", "web02", "web03"
role :web, "web01", "web02", "web03", "web04"
role :db, "db01", "db02"

desc "Deploy sites"
task :deploy, :roles => :www do
    run "cd /usr/www/website && sudo svn --username=deploy --password=foo update"
end

Capistrano ayrıca bir görevi tanımlayan olmadan başka komutu çalıştırmak için izin verir:

cap invoke COMMAND="uptime" ROLES=web

(role "web" kurulum için gerektirir. Yukarıdaki örneğe bakın.)

Coding style and documentation

Biz hoş çok biz PHP_CodeSniffer (phpcs) kullanılarak kontrol ki, PEAR Coding standard bağlı. Ben hemen hemen derken, ben sağlanan sniffs çatallı ve kendi gusto bir kaç istisna ekledi anlamına gelir.

Kodlama stili üstüne, hem de inline belgelere ilgili kontroller phpcs. Bu belgeler sonunda phpDocumentor tarafından oluşturulur.

CI

Bizim CI-sunucu bu araçlar kurulum her ikisi de (continuos-integration), phpUnderControl kullanarak hangi yukarıda ve CruiseControl, phpUnit, {[(3) ]} (bir çift kod ölçümleri ...), vb.

birim test şu anda eksikliği şeydir. Ama biz şu anda yapılacak her hata ile biz geri gelmez emin olmak için bir test yazmak, (biz bazı biçimleri içine metin ayrıştırmak) bizim ayrıştırma motoru bulmak olduğunu. Ben de URL yönlendirme ve iç XMLRPC API kontrol etmek için bazı temel testler yazdım ama bu gelişme gerçekten tabidir. Biz de phpunit tarzı testleri ve phpt hem de istihdam.

CI-server builds yeni bir sürümü günde birkaç kez, grafikler, belgeler ve raporlar her türlü üretir.

Belirtilen tüm araçlar üstüne, biz de Google Apps (öncelikle e-posta için) kullanımı ve diğer tüm belgelerle birlikte bir Google Sites wiki tutmak. Örneğin, vb dağıtım prosedürü, QA test listesi,.

Ben bu kadar maruz almıyor fark ettim. Ayrıca ben size Phing farkında mısınız ilgilendiğim şey? Bunu denediniz mi?

Andrew

Veritabanı değişiklikleri için, VCS bir dizin var:

+ dbchanges
|_ 01_database
|_ 02_table
|_ 03_data
|_ 04_constraints
|_ 05_functions
|_ 06_triggers
|_ 07_indexes

Eğer doğru dizine. Sql dosyasını koymak veritabanına bir değişiklik yapmak ve sırayla bu dizinleri geçer entegrasyon komut dosyasını çalıştırın, ve db içine her değişikliği alırken.

Sql dosyaları entegrasyon komut ne yaptığını açıklayan, değişiklik aldığında kullanıcıya görüntülenen bir açıklama ile başlamak zorunda zorunda. Bu bir dosyaya her ithal sql dosyanın adını günlükleri, böylece komut dosyası dahaki çalıştırdığınızda, yine aynı değişikliği geçerli olmayacaktır.

Bu şekilde, tüm geliştiricileri sadece bugüne kadar db kalkmak için komut dosyasını çalıştırabilirsiniz.

@ Andrew: Ben Phing denedim ve phpUnderControl ile sona erdi ettik. Phing ile sorun kodu kapsama yönetmek, aslında bizim proje için sadece bunu yapmaz, proje tüm dosyaları dahil olmasıdır. CruiseControl bir yaklaşım bizim için iyi çalıştı. Onlara bir şans verin, onlar hem kurulumu kolay - zor iş testleri inşa etmektir ....