2009-07-17 6 views
22

アプリケーションを開発から運用に正しく展開する方法と、複数のサイト構成を処理する方法。 私のすべての開発はvar/svn/myapp/trunkにあるsvnを通して行われ、 実際の生産コードは/ var/www/myappにあります。PHPアプリケーションを正しく展開するには?

ローカルマシンの最新コードを "myapp_latest_svn"というディレクトリにチェックアウトします。 は、私はあなたが ローカルマシンの設定(ローカルホスト/ myappの中に異なる知っているようであるDB_HOST、db_user_nameとDB_PASSWORDためH_PATH =「http://myapp.com」 &デシベルのコンフィグ設定があり、私のメインのsettings.phpにサイトや場所の特定のコードを持っています。 comは単なるApacheエイリアス)&(実稼働サイトはmyapp.comで稼動しています)サーバです。

また、.htaccessファイルは本番サーバーのファイルとは異なります。要するに、開発者と生産の間にはいくつかの違いがあります。

私はすべて私の仕事をSVNに保管しています。毎朝、ローカルのsvnリポジトリに最新のコードを更新するSVN Updateを使用します。 ライブに行く準備ができたら、私はsvn Commitでリリースをビルドします。

その後、リリースでは、適切なすべてのdevファイルをその製造元に変更することを忘れないようにしなければなりません。 これで、サイト固有の変更を反映するためにproduction settings.php & .htaccessを手作業で編集しなければなりませんでした。

私は、バージョン管理とバージョン の完全なプロダクションに移行する自動化された方法を探しています。これは、エラーが発生しやすく、悪い習慣であるファイルを手作業で編集するものではありません。

1つの方法は、ファイルのプロダクションバージョンを読み取り専用(0444)にすることです。そうすれば、私はsvnのエクスポートを行うときに、 ファイルのdevバージョンで上書きされることはなく、私は 上のファイルの編集について心配する必要はありません。しかし、それは継続的な統合のようなことをする悪い方法です。

また、settings.php(localhost、beta、およびprodの1つ)の複数のコピーを作成することで、次に、svnからエクスポートするシェルスクリプト を使用して、エクスポートが完了すると、展開先のロケーションに応じて、settings.phpを正しいsettings.php、 に置き換えます。そうすれば、すべてが自動化されます。 しかし、これはまた行き届かない道です。

最後の方法は、これは、限りのsettings.phpが懸念しているようで結構です

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

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

} else { 

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

} 

です。 しかし、.htaccessのabtは、上記の.htaccessのようにチェックできません。

私は設定を変更する必要がある私のサイトを展開するたびに終わりをしたくない。

私のDBスキーマはバージョン管理されていないので、dbは私の問題ではなく、settings.phpと.htaccessだけです。

また、サイト固有の(/ log、/ cache、/ assets、/ downloads)ので、svnにいくつかのディレクトリを更新しないように指示することもできます。 また、私は上記のファイルのためにそのままapache(www_data)書き込みアクセスを保持する必要があります。

最後に、エクスポートするときに空のトランクディレクトリと.svnファイルを本番サーバーにコピーしたくありません。

どのように私はphingまたはシェルスクリプトを使用して、svnからプロダクションサーバーにビルドするときにこれらの問題を引き起こすことなく統合できますか。

これは野生の野生の多くのアプリ開発者にとって役に立ちます。事前に

おかげで、

ocptime

答えて

13

私はあなたの展開の苦境のためCapistranoを見てお勧めします。私はそれをPHPシステムのデプロイに使用しました。あなたが記述したすべてのことを行います(展開レシピで少しスクリプトを使って)。

私はリモートリポジトリに設定ファイルを保存しません。私はdevでチェックアウトしたときに一度追加してから無視して、偶然にそれらをチェックしません。デプロイメントに関しては、デプロイされたバージョンに設定ファイルを書き込むように、私のキャップ展開レシピが設定されています。こうすることで、重要なものの配備や欠落を心配する必要はありません。

キャップはアップロードされたアセット(ディレクトリのシンボリックリンクにより、各デプロイ時にその場所に残るようにシンボリックリンク)を処理し、すべてのアセットファイルとデータベースをAmazon S3に自動的にバックアップします。かなり元気ですか?

+0

グレートリンクを持っています!ありがとう! –

+0

シンボリックアセットディレクトリが何をしているのか説明できますか? – dave1010

2

私の設定ファイルと.haccessは、名前が変更されたファイル名でSVNに保存されます。 settings.php.exampleと.htaccess.example。こうすることで、新しいリリースを作成するときに、上書きすることについて心配する必要はありません。

8

私は設定と呼ばれるPhingタスクを持っています。これは、コードを設定したい環境を教えてくれます。私は環境にそれを教えてくれたら、それは適切な.propertiesファイルを読み込み、(すなわちlocal.properties、production.properties、など)

ローカル、開発、ステージング、生産など

:タスクは、いくつかの可能な値を受け入れます

設定とhtaccessファイルのを保存し、それらのトークンがプロパティファイルの値に置き換えられるようにfilterChain replaceTokensタスクを実行します。

これらのファイルを作成します。

共通/構築/テンプレート/ settings.tpl

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

ビルド/テンプレート/ htaccess.tpl

http://##H_PATH## 

ビルド/プロパティ/ local.properties

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

ビルド/プロパティ/ production.properties

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

コモン/ビルド/ビルド。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>        

あなただけの入力ローカルで実行するためのサイトを設定したい:

phing config 

次のように入力します。

local 

とReturnキーを押します。それでおしまい! これの大きな利点の1つは、あなたのコード内にANY if/elseステートメントはもう必要ないということです。さらに、$ _SERVER変数に依存しないので、コマンドラインでうまく動作します。

0

あなたはCapistrano、Magallanes、Deployerについて考えることができますが、それらもスクリプトです。 yii2と一緒にPHPで書かれたデプロイメントツールwalle-webを試してみることをお勧めします。私は数ヶ月間私たちの会社でそれを主催しました。テスト環境、シミュレート環境、生産環境を展開しながらスムーズに動作します。

プレデプロイメント、デプロイメント後、リリース後のタスクを設定することができます。次に、cp db_test.php db.phpなどの環境設定を変更できます。

enter image description here

それはbashのツールのグループに依存し、rsyncを、gitの、リンクが、操作のために一般的によくウェブUI、試し:)

関連する問題