Yerel nasıl yönetileceği & Web uygulaması dağıtım Best Practices

8 Cevap php

I am writing php web applications, and simply deploy them via FTP. To make it work, I often have some tweaking/debugging to do given that I have little control over the (free) web server hosting me, so what's working in my local environment might not work live.

For example I keep a separate php file containing class_db_myapp.php which extends a class_db.php with specific DB parameters : db name, username, password which won't be the same local and live. (For information : Lately I started using git for version control)

As my app evolves, some files get renamed / deleted / created. When comes the time to upload a new version, I have to either rely on my memory to know what I have to upload / delete or simply delete all / upload all. But in the second case I need to avoid erasing the class_db_myapp.php file...

Buna uygun bir çözüm ile gelip değil.

Bu alandaki en iyi uygulamalar nelerdir?

Bu yüzden bana gelin lütfen eğer ben, bu konuda varolan tartışmayı kaçırmış olabilir.

Teşekkür ederim.

8 Cevap

Ftp sunucusu sembolik bağlantıları destekleyen Eğer şu yöntemi kullanabilirsiniz:

  1. Public_html klasöre güncel sürümünü içeren klasöre bir sembolik bağ olun. (Örneğin, "version1")
  2. Yeni bir klasöre yeni sürümünü yükleyin.
  3. Yükleme tamamlandığında, böylece yeni sürümü aktif hale sembolik bağ değiştirin.

Bir şey yanlış giderse kolayca yeniden sembolik bağ değiştirerek önceki sürüme dönebilirsiniz.

Veritabanı ve canlı ortamda farklı diğer ayarlar için birkaç seçenek vardır:

  • Bir dosya içeren bir ortam oluşturun: "Canlı" ya da "yerli" ve çevre ayarına göre kodda "if ifadesi" koymak.
  • Eğer php ortamı dectect mümkün iseniz, bir dosya yerine bu kullanın.
  • "VersionX" klasörleri dışındaki bir dosyada tüm ayarları yerleştirin.

1) Ben bu kullanmak sorunu "dev ve canlı sunucular üzerinde farklı yapılandırma" çözmek için:

// Change 'localhost' to your dev server's address
define('IS_LIVE', 'localhost' != $_SERVER['HTTP_HOST']);

// Database configuration
$db_cfg = IS_LIVE?
  array(...): // Live server config
  array(...); // Dev server config

2) ben, beni (S) FTP üzerinden uzak olanlar da dahil olmak üzere tüm dizinleri, karşılaştırmak için izin veren bir görsel fark aracını kullanın Beyond Compare synched dev ve canlı dosyaları tutmak için.

Sol pencere dev sunucu dosyalarını gösterir ki ben bir profil kurmak, doğru bir canlı sunucu dosyalarını gösterir. Bu şekilde ben sunucuları (değiştirilemez, eksik veya eklenen dosyalar) ve beni kolayca tüm dizinleri, dosyaları veya aralarında dosyalarda belirli satırları kopyalamak için izin arasında vardır ne gibi farklar görebilirsiniz. Çok faydalı.

Ayrıca kullanıcı oluşturulan dosyaları veya günlükleri ile olanlar gibi senkronize etmek istemiyorsanız belirli dizinleri, 'görmezden' sağlar.

Moving Files

Sen rsync arıyor, ya da bir şey rsync gibi ediyoruz. Rsync Eğer başka dosyalardan bir dizi senkronize sağlayacak bir program / sistemidir. Basitleştirilmiş vadede, bu kaynak kodu thorugh bakmak ve üretim kodu ve sadece farklı dosyaları upload edecek edebilirsiniz.

rsync -av --cvs-exclude /soure/dir user@example.com:./source/dir

- Cvs-exclude bayrağı biraz yanıltıcı adlandırılır. Değil just. Cvs dizinleri, rsync RCS program cvs sayar dosyaları görmezden yapacaktır. Sen çalıştırarak bayraklar hakkında daha fazla bilgi alabilirsiniz

rsync --help

Eğer üzerinde uygulama barındırma konum sunucusu bir rsync deamonuyla gerekir, ama bu ders için bu gün par bulunuyor.

Eğer gerçekten zeki almak istiyorsanız, SSH tuşlarını kullanarak rsync'i yapılandırabilir, ve hatta bir şifre girmeniz gerekmez. Ancak, bu gerekli hiçbir şekilde.

Different Configuration Information

Tek bir dosya veya dosyaların tek bir set halinde yerel ve canlı sunucuları arasında farklılık olacak herhangi bir yapılandırma bilgilerini ayırın. FTP üzerinden canlı bu dosyaları sunucuya aktarabilir ve kullanımı - bu dosyaları görmezden rsync anlatmak seçeneği hariç.

Değil emin idealdir, ama eğer benim DB giriş yapılandırma dahilinde örneğin ben kodu (sadece kısmi bir kelepir altında) üzerinde çalışan ne ev sahipliği tespit var:

$active_group = "default";
if($_SERVER['SERVER_NAME'] == 'argent.local' || 
   $_SERVER['SERVER_NAME'] == 'beta.website.com') 
   $active_group = "development";

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "username";
$db['default']['password'] = "password";
$db['default']['database'] = "dbname";
$db['default']['dbdriver'] = "mysql";

$db['development']['hostname'] = "localhost";
$db['development']['username'] = "username_dev";
$db['development']['password'] = "password_dev";
$db['development']['database'] = "dbname_dev";
$db['development']['dbdriver'] = "mysql";

Hata çıkışı sırasında çok yararlı olduğu ana sınıfı I (sunucu üretimi veya yerel dev ise bağlı / devre dışı PHP hata çıkışını sağlamak gibi ben de bu birkaç başka yerlerde yapmak (argent.local burada benim yerel dev bir kutu olmaktan) dev, ama ben) üretimde outputted bunu istiyorum asla:

if($_SERVER['SERVER_NAME'] == 'argent.local' || 
   $_SERVER['SERVER_NAME'] == 'beta.website.com') 
    error_reporting(E_ALL);
    else error_reporting(0);

Bu şekilde ben SVN denetlemek kod nerede dağıtmak için takip etmek zorunda kalmadan hem canlı ve dev kutuları üzerinde çalışacak. Bu şekilde ben varolan tüm dosyaları silin ve sadece herhangi bir dosya üzerinde taşıma hakkında endişelenmenize gerek kalmadan taze dağıtmanız olabilir.

ssh erişimi, testi ve yerel makinede her şeyi işlemek zorunda değilsiniz çünkü. o zaman dosyaların değiştirilmiş ne görelim filezilla ftp istemcisi dizin karşılaştırma özelliğini kullanabilirsiniz. Bir şey hatırlamak gerekmez.

en iyi uygulamaları git push ile sunucuya itmek olacaktır. Lütfen seçenekleri sınırlı olduğu, ancak, yukarıda belirtilen çözüm sadece iyi yapacağız.

Bir SVN sunucusu hile yapabilir.

Subversion

Edit: Benim hatam, Aksi takdirde, GYTE iyi çözüm gibi görünüyor ... Eğer web sunucusu üzerinde bir kök kullanıcı olduğunuzu beklediğiniz bir SVN sunucusu yükleme ... düzgün ilk defa okumadım.

Ben Rails dünyadan genelleştirilmiş bir dağıtım aracı Capistrano, tavsiye ederim. Temelde dağıtımları yönetmek için yere kadar tasarlandı. İşte Capistrano sayfası bulunuyor:

http://capify.org/

ve burada diğerleri PHP uygulamasının Capistrano nasıl kullandıklarını gösteren sitelerin bir çift var:

http://www.simplisticcomplexity.com/2006/08/16/automated-php-deployment-with-capistrano/

http://donc.wordpress.com/2006/10/29/deploying-php-with-capistrano/

Not: Eğer dağıtım komut özelleştirmek / yazmak zorunda kalacak, ancak Capistrano size ihtiyacınız olanı yapalım gerekir.

Böyle phing veya ant yapmak isteyen ne yapmak gerekir gibi bir aracı inşa. Küçük bir komut dosyası ile, şu anda uygulama yapılandırmasını almak ve tek bir komut ile uygulamayı yüklemek alıyor adımları otomatik gerekir.