2009-07-17 3 views
22

Wie Sie Anwendungen von der Entwicklung bis zur Produktion korrekt bereitstellen und wie Sie mit mehreren Standortkonfigurationen umgehen können. Alle meine Entwicklung sind durch Svn bei var/svn/myapp/trunk und der eigentliche Produktionscode ist in/var/www/myapp getan.Wie Sie Ihre PHP-Anwendungen korrekt bereitstellen?

Ich checke den neuesten Code auf meinem lokalen Rechner in ein Verzeichnis namens "myapp_latest_svn". Ich habe Website und Standort-spezifischen Code in meinem Haupt settings.php, die H_PATH = ‚http://myapp.com‘ & db Konfigurationseinstellungen für db_host, db_user_name und db_password hat, die, wie Sie in lokalen Maschineneinstellungen kennen unterscheidet (wo localhost/myapp. com ist nur ein Apache-Alias) & auf der Produktion (Live-Site läuft auf myapp.com) Server.

Auch die .htaccess-Datei unterscheidet sich von der auf dem Produktionsserver. Kurz gesagt, es gibt eine Reihe von Unterschieden zwischen Entwickler und Produktion.

Ich behalten alle meine Arbeit in SVN. Jeden Morgen benutze ich SVN Update, das den neuesten Code in mein lokales SVN-Repository aktualisiert. Wenn ich bereit bin, live zu gehen, baue ich eine Veröffentlichung mit Svn Commit.

Dann in der Version muss ich daran denken, alle entsprechenden Dev-Dateien zu ihrer Produktion Gegenstück zu ändern. Jetzt musste ich die Produktion settings.php & .htaccess manuell bearbeiten, um die sitespezifischen Änderungen widerzuspiegeln.

Ich bin auf der Suche nach einem automatisierten Weg von der Entwicklung zur Produktion mit Versionierung und keine manuelle Bearbeitung von Dateien, die fehleranfällig und schlechte Praxis ist.

Eine Möglichkeit besteht darin, die Produktionsversion von Dateien schreibgeschützt zu machen (0444). Auf diese Weise, wenn ich einen SVN-Export, sie nicht von der dev-Version der Dateien überschrieben werden, und ich habe keine Sorgen über die Bearbeitung von Dateien auf jeder Umzug von der Entwicklung zur Produktion. Aber das ist eine schlechte Art, Dinge wie kontinuierliche Integration zu tun.

Auch durch mehrere Kopien der settings.php (eine für localhost, beta und prod). Dann mit einem Shell-Skript , das von Svn exportiert, und dann, sobald der Export fertig ist, ersetzt es die Einstellungen.php mit der richtigen settings.php, abhängig von der Position, die wir bereitstellen. So ist alles automatisiert. Aber das ist auch ein lahme Weg zu gehen.

Letzter Weg ist

if(eregi ("myapp.com$", $_SERVER['HTTP_HOST'])){ 

    define('H_PATH', 'myapp.com'); 

} else { 

    define('H_PATH', 'localmyapp.com'); 

} 

Das ist in Ordnung so weit wie settings.php betrifft. Aber was ab dem .htaccess, können Sie nicht wie oben in .htaccess überprüfen.

Was ich nicht tun möchte jedes Mal, wenn ich meine Website bereitstellen, dass ich Einstellungen ändern muss.

Mein DB-Schema ist nicht in der Versionskontrolle, so db ist kein Problem mit mir, nur die settings.php und .htaccess.

Auch wie kann ich svn sagen, einige Verzeichnisse nicht zu aktualisieren, da das auch ortsspezifisch ist (/ log,/cache,/assets,/downloads). Auch ich muss den Apache (www_data) Schreibzugriff für die oben genannten Dateien intakt erhalten.

Schließlich möchte ich nicht das leere Stammverzeichnis und die .svn-Dateien auf den Produktionsserver kopieren, wenn ich exportieren.

Wie kann ich Phing oder sogar ein Shell-Skript zu integrieren, ohne diese Probleme beim Aufbau von Svn zu Produktionsservern zu verursachen.

Dies könnte für viele Möchtegern-App-Entwickler da draußen in der Wildnis nützlich sein.

Vielen Dank im Voraus,

ocptime

Antwort

13

würde ich empfehlen Sie bei Capistrano suchen für Ihre Bereitstellung woes. Ich habe es verwendet, um PHP-Systeme zu implementieren, und es wird alles tun, was Sie beschreiben (mit einem kleinen Skript, das in Ihrem Bereitstellungsrezept funktioniert).

Ich habe keine Konfigurationsdateien in meinem Remote-Repo - wenn ich in Dev auschecke, kann ich sie einmal hinzufügen, dann ignoriere ich sie, so dass ich sie nicht aus Versehen überprüfe. Wenn es um die Bereitstellung geht, ist mein Cap-Bereitstellungsrezept so eingerichtet, dass es die Einstellungsdateien in die bereitgestellte Version schreibt. Auf diese Weise muss ich mir keine Gedanken über die Bereitstellung und das Fehlen kritischer Dinge machen.

Cap kümmert sich auch um hochgeladene Assets (Symlinks zwischen den Verzeichnissen, damit sie bei jeder Bereitstellung bestehen bleiben) und sichert automatisch alle Asset-Dateien und die Datenbank bei Bereitstellung auf Amazon S3. Ziemlich nett, oder?

+0

Großen Link! Vielen Dank! –

+0

Können Sie erklären, was die Symlinking-Asset-Verzeichnisse tun? – dave1010

2

Ich speichere meine Einstellungsdateien und .haccess in SVN mit umbenannten Dateinamen, z. settings.php.example und .htaccess.example. Auf diese Weise muss ich beim Erstellen eines neuen Releases keine Angst haben, Dinge zu überschreiben.

8

Ich habe eine Phing-Aufgabe namens config, die mich fragt, in welcher Umgebung ich den Code konfigurieren möchte. Die Aufgabe übernimmt mehrere mögliche Werte: lokale, Entwicklung, Inszenierung, Produktion usw.

Sobald ich es die Umgebung sagen, es liest in der entsprechenden .properties-Datei (dh local.properties, production.properties usw.)

Der nächste Schritt ist der Schlüssel für Sie: Speichern Sie TEMPLATES Ihrer Konfigurations- und htaccess-Dateien und führen Sie dann eine filterChain replaceTokens-Task für sie aus, damit ihre Token durch die Werte aus der Eigenschaftendatei ersetzt werden.

Erstellen Sie diese Dateien:

common/build/templates/settings.tpl

define('H_PATH','##H_PATH##'); 
define('ENVIRONMENT', '##ENVIRONMENT##'); 

build/templates/htaccess.tpl

http://##H_PATH## 

build/Eigenschaften/local.properties

site.H_PATH = localmyapp.com 
site.ENVIRONMENT = local 

build/Eigenschaften/production.properties

site.H_PATH = myapp.com 
site.ENVIRONMENT = production 

common/bauen/build.xml

<target name="config"> 
    <input propertyname="env" validargs="local,production">Enter environment name:</input> 
    <property file="build/properties/${environment}.properties" /> 
    <copy file="build/templates/settings.tpl" 
    tofile="config/settings.php" overwrite="true"> 
    <filterchain> 
     <replacetokens begintoken="##" endtoken="##">  
      <token key="H_PATH" value="${site.H_PATH}" /> 
      <token key="ENVIRONMENT" value="${site.ENVIRONMENT}" /> 
     </replacetokens>   
    </filterchain> 
    </copy>  
    <copy file="build/templates/htaccess.tpl" 
    tofile="public/.htaccess" overwrite="true">  
    <filterchain> 
     <replacetokens begintoken="##" endtoken="##">  
      <token key="H_PATH" value="${site.H_PATH}" />               
     </replacetokens>   
    </filterchain> 
    </copy>    
    <echo msg="Configured settings.php and .htaccess for ${environment}" />    
</target>        

Nun, wenn Sie möchten, um die Site zu konfigurieren, für die Ausführung vor Ort geben Sie einfach:

phing config 

geben Sie dann:

local 

und drücken Sie die Eingabetaste. Das ist es! Ein großer Vorteil davon ist, dass Sie keine ANY if/else Anweisungen in Ihrem Code benötigen. Plus, es ist nicht abhängig von $ _SERVER-Variablen, also wird es auf der Kommandozeile gut funktionieren.

0

können Sie über Capistrano, Magallanes, Deployer denken, aber sie sind Skript auch. Ich kann Ihnen empfehlen, versuchen Sie , ein Deployment-Tool in PHP mit yii2 aus der Box geschrieben. Ich habe es in unserem Unternehmen seit Monaten gehostet, es funktioniert reibungslos während der Bereitstellung von Test, Simulation, Produktionsumgebung.

Es unterstützt Sie bei der Konfiguration von Vorbereitungs-, Post-Deploy- und Post-Release-Aufgaben. Anschließend können Sie Ihre Umgebungskonfiguration ändern, z. B. cp db_test.php db.php.

enter image description here

es auf Gruppen von bash-Tool ab, rsync, git, Link, aber ein Web-UI im Allgemeinen gut für den Betrieb, hat einen Versuch :)