Tercih php dağıtım stratejisi nedir?

15 Cevap php

PHP yeni bir proje başlıyorum ve ben PHP dağıtımı için tercih ettikleri strateji diğer geliştiricilerin bazı geribildirim almak isterim. Ben değişiklikler kararlıyız kez onlar hızlı bir gelişme ya da üretim sunucusuna geçirilebilir böylece şeyler biraz otomatikleştirmek isterim.

Ben Ruby ile Capistrano kullanarak dağıtımları ile deneyiminin yanı sıra bazı temel kabuk komut dosyası var.

Ben kendi başıma ilk dalış kafa önce başkalarının kendi projelerinde bu yaklaştı nasıl duymak harika olurdu.

Further information

Şu geliştiriciler sitenin yerel yüklemeleri üzerinde çalışmak ve bir subversion deposuna değişiklik taahhüt. İlk dağıtımları svn bir etiketli serbest ihracat ve sunucuya bu yükleyerek yapılır.

Ek değişiklikleri genellikle elle değiştirilen dosyaları yükleyerek parça parça yapılır.

15 Cevap

PHP ile SVN'de için Phing inşa komut gitmek için yoludur. Phing ANT benzer ama çok daha kolay PHP geliştiricileri kendi ihtiyaçları için değiştirmek için yapar PHP ile yazılmış.

Aşağıdaki gibi bizim dağıtım rutin:

  • Herkes iş yerinde aynı yerel sunucuda, her geliştirici yanı sıra eve onun makinede bir ödeme var geliştirir.
  • Bir basamak sunucusuna güncelleştiren bir post-commit kanca tetikler kaydeder.
  • Onlar geçirirseniz testleri, hazırlama sunucusunda koştu - devam ediyor.
  • Phing script kurmak koştu olduğunu:
  • "Yapım aşamasında" sayfası etki geçiş, üretim sunucusu aşağı alır
  • Üretim üzerinde ödeme SVN güncelleştirme çalıştırır
  • Runs şema komut deltalar
  • Runs testler
  • Testleri başarısız olursa - run geri alma komut dosyası
  • Testler üretim çıkış geri, sunucu yolları geçmesi halinde

Sürekli Entegrasyon sunucu olduğu, phpUnderControl da bulunuyor. Ben çok kullanışlı web projeleri dürüst olmak için bulamadık.

Şu anda PHP dağıtma ediyorum using Git. Basit git push üretim Git en son kopya ile benim üretim sunucuyu güncelleştirmek için gerekli her şey demek değildir. Git adlı yeterince akıllı, sadece tekrar tekrar diffs değil tüm proje göndermek çünkü kolay ve hızlı. O da (ben de güvenli olması için GitHub itmek olsa) benim son donanım arızası durumunda, web sunucusu üzerinde depo bir yedek kopyasını tutmaya yardımcı olur.

Biz, Webistrano Capistranoda için bir web önyüz kullanmak, ve onunla çok mutluyuz.

Webistrano SVN, GIT ve diğerlerinden çok aşamalı, çok çevre dağıtımları sağlar. Bu vb web, db, app, ayrı sunucu rolleri için geri alma desteği, yerleşik destek ve paralel olarak dağıtır oldu. Size böyle aşamada başına birden çok düzeyleri, config parametreleri geçersiz kılmak için izin verir, ve her dağıtmak sonuçlarını kaydeder, opsiyonel olarak postalamak.

Capistrano ve Webistrano Ruby uygulamalar olsa da, dağıtımı 'tarifleri' sözdizimi kolay ve herhangi bir PHP programcısı anlamak için yeterince güçlü. Başlangıçta Capistrano Raylar projeler üzerinde Ruby için inşa edildi, ancak kolayca PHP projeleri barındırmaktadır.

Bir kez böyle bir sahneleme sürümünü dağıtmadan test olmayan programcılar tarafından kullanılabilecek kadar da kolay yapılandırılabilir.

Hızlı biz uzak sunucuda bir svn çalışma kopya önbelleğini günceller, ve sonra sonucu hardlinks fast_remote_cache yöntemi monte mümkün dağıtmak sağlamak.

Ben elle Git kullanarak bir şeyler yapmak. git push --mirror 'bir kamu repo ed ve canlı sunucusu alır gelişimi için tek depo o çekti üçüncü repo olduğunu. Sanırım bu bölüm kendi kurulum aynıdır.

Büyük fark (Ben şu anda yaklaşık 5 var) üzerinde çalışıyorum neredeyse her değişiklik için şube kullanımı ve bunların arasında ileri ve geri çevirmek eğiliminde olmasıdır. Ana dal diğer şubeleri birleştirme dışında doğrudan değiştirilemez almaz.

Ben ana dalından canlı sunucu direkt çalıştırın, ve ben başka bir şube ve birleştirmek için hazır bitmiş olduğumda, bir süre için bu şube sunucusunu çevirin. Kırılırsa, usta geri koyarak saniye sürer. Eğer çalışırsa, o ana birleştirilecek alır ve canlı kod güncellenir. Ben SVN bu bir benzetme iki çalışma kopyalarını olan ve bir sembolik bağ üzerinden canlı bir işaret olacağını varsayalım.

I Apache Ant farklı hedef dağıtmak (dev, QA ve yaşamak) için kullanabilirsiniz. Ant Java dağıtım için çalışmak üzere tasarlanmıştır, ancak keyfi dosyaları dağıtmak için oldukça yararlı genel durumda çözüm sağlar.

Build.xml dosyasının sözdizimi öğrenmesi oldukça kolay - Eğer komut satırında karınca programı çağırdığınızda çalışan farklı hedefler ve onların bağımlılıklarını tanımlamak.

Örneğin, ben, bizim CVS sunucusundan en son kafa revizyon kontrol cvsbuild hedefe bağlıdır, her biri dev, QA için hedefleri var ve yaşamak, kopyalar sonra uygun (dosya gurubu etiketini kullanarak) inşa dizinine dosyaları ve uygun sunucuya rsyncs inşa dizini. Orada öğrenmek için birkaç tuhaflıklar ve öğrenme eğrisi tamamen düz değil, ama ben merak ediyorum ama ben, sizin durumunuz için bunu tavsiye ederim o hiçbir sorun ile yıllardır bu şekilde yapıyorum ne diğer Yanıt 'll Bu konuya bakın.

I Phing Şimdi bir kaç kez söz edilmiştir biliyorum, ama ben phpUnderControl ile büyük şans oldu. Bizi biz

  1. Yerel makinelere şube bireysel kopyalarını kontrol
  2. Şubeler test edilmiş ve sonra Trunk birleştirilir
  3. Trunk taahhüt otomatik phpUnderControl tarafından inşa edilmiştir testleri çalıştırır ve tüm belgeleri oluşturur, veritabanı deltalar geçerlidir
  4. Trunk kalite testleri ile çalıştırın ve sonra bizim Kararlı şube birleştirilecek alır
  5. Yine, phpUnderControl otomatik Kararlı oluşturur testleri çalıştırır ve dokümantasyonunda ve güncellemeleri veritabanı oluşturur
  6. Biz üretime zorlamaya hazır olduğunuzda biz Üretim yedekler veritabanını günceller ve daha sonra dosyaları iter bir rsync komut dosyasını çalıştırın. Biz birisi promosyon izliyor emin olun, böylece rsync komutu elle çağrılır.

Ben yol geç partiye duyuyorum, ama ben bizim yöntemlerini paylaşmak düşündüm. Biz Phingistrano, pre-built inşa dosyaları ile Phing için Capistrano gibi işlevselliğini sağlayan ile Phing kullanın. Bu çok güzel, ama şu anda Git kullanıyorsanız yalnızca çalışır.

ev yapımı dağıtım komut için bir alternatif sizin için bir sürü iş uzakta soyutlayan bir platform olarak-a-hizmet dağıtmak için. Bir dağıtma yararı da var Bir PaaS genellikle kendi kod dağıtım aracı sunacak, hem de ölçekleme, hata toleransı (donanım başarısız olduğunda örneğin aşağı gidiş değil), ve izlenmesi için genellikle büyük bir araç, vb kontrol log zaman (sizin için daha az bir baş ağrısı üzerinde) kadar güncel tutulacaktır iyi yapılandırmayı da bilinir.

Ben tavsiye ederim PaaS dotCloud olduğunu, PHP ek olarak (see their PHP quickstart) aynı zamanda MySQL, MongoDB ve ek hizmetler bir sürü dağıtabilirsiniz. Ayrıca, sıfır kesinti dağıtım, anında geri alma, vb SSL ve WebSocket için tam destek Ve her zaman güzel ücretsiz bir kademe var gibi güzel güzellikler vardır :)

Ben orada çalışmak beri Tabii ki ben biraz önyargılı değilim! DotCloud ek olarak incelemeye değer diğer seçenekler Pagodabox ve Orkestra (Motor Yard şimdi parçası) vardır.

Bu yardımcı olur umarım!

Solomon

Otomatik ve körü körüne üretim sunucularına bir depodan değişiklikleri almak tehlikeli geliyor. Sizin taahhüt kod regresyon hata içeriyor, bu nedenle üretim uygulaması glitchy alır ne olur?

PHP için bir Sürekli Entegrasyon sistemi istiyorsanız Ama, ben Phing PHP için en iyi seçimdir sanırım. Ben örneğin manuel yolla şeyler yok gibi ben olsa, kendim test etmedim scp.

Ben sunucu üzerinde bir SVN bırakma şube çalışan bir kopyası var. (Şema değişiklikleri yokken) site güncelleniyor bir SVN update komutunu veren kadar kolaydır. Hatta site çevrimdışı almak zorunda değilsiniz.

Eğer xml yapılandırma dosyalarının ağrı durabiliriz Phing, muhtemelen en iyi bahistir. Symfony framework (muhtemelen onları ayırmak olabilir rağmen) komisyon kendi liman oldukça iyi çalışıyor (pake), var, ama oldukça sıkı Symfony kalanı için birleştirilmiştir.

Başka bir seçenek Capistrano kullanmaktır. O Ruby ile yaptığı gibi Açıkçası, PHP ile de entegre değildir, ama yine de bir sürü şey için kullanabilirsiniz.

Son olarak, her zaman kabuk komut dosyaları yazabilirsiniz. Şimdiye kadar, ben ne yaptın.

http://controltier.org/wiki/Main_Page

Biz çoklu sunucu dağıtımları için kullanmak için gidiyoruz & edilmektedir bakım.

Benim işte ben ve ekibim Capistrano'nun dağıtmak için bir Phing odaklı yedek geliştirdik ve biz de PHPUnit test, phpcs ve phpDocumentor gibi phing mevcut güzellikler bazı dahil ettik. Biz git içinde bir altmodülün olarak bir projeye eklenebilir bir git repo yaptık ve çok iyi çalışıyor. Ben projelerin bir avuç onu ekledim ve o bizim çeşitli ortamlarda (evreleme, test, üretim, vs ..) herhangi herhangi bir proje ile iş yapmak kolay olduğunu yeterince modüler bulunuyor.

Phing inşa komut ile elle komut satırından bunları çalıştırabilirsiniz, ve ben de build / Hudson ile rutinleri dağıtmak ve şimdi Jenkins ci otomatik başarı elde ettik.

Repo henüz kamuya açık değildir, çünkü ben şimdi herhangi bir bağlantıları açamazsınız, ama biz var bu yüzden eğer ilgileniyorsanız benimle temas kurmaktan çekinmeyin lütfen ya, bazen yakında kaynak Açmak için gidiyoruz söylendi Phing ve git ile kendi dağıtım otomasyonu üzerinde herhangi bir soru.

Ben SVN dağıtma yolu çok iyi değil sanırım. Çünkü:

Sen bütün dünya için SVN erişimi açmak gerekir

birçok. üretim web sunucuları svn var

Ben Phing bir dal + tüm js / css birleştirmek + tüm www sunucularına sahne yapılandırma + ssh yükleme yerine üretmek için düşünmek daha iyi bir yoldur.

10 www sunucu ve svn up ssh da sorun.

One year late but... In my case, deployment is not automatic. I find it dangerous to deploy code and run database-migration scripts automatically.

Bunun yerine, yıkılma kanca sadece test / hazırlama sunucusuna dağıtmak için kullanılır. Kod testler ve işlerin emin yaptıktan sonra, bir yinelemenin sonunda üretime dağıtılır. Dağıtım kendisi için, ben dosyaları aktarmak için rsync kullanan bir ısmarlama Makefile kullanmaktadır. Makefile de uzak sunucu, duraklatma / devam web ve veritabanı sunucuları üzerinde geçiş komut dosyalarını çalıştırabilirsiniz.