2009-08-11 8 views
12

オフライン開発からウェブ開発でウェブサーバーを正しくライブ展開する方法を知りません。私は主に直感に頼っていますが、これまでのやり方は多かれ少なかれです:私はPythonやPHPでWebアプリケーションを持っており、ライブWebサーバー上でそれをホストしています。私はソースがsvnの下にあるオフライン開発版を使用します。ウェブアプリケーションをリリースするには?

ここで、私はオフラインバージョンを開発するので、私はsvnへのコミットを実行します。時間は、リリースのために来たとき、私はどちらかでした:

  1. がオフラインサーバーからのライブウェブサーバ上の一時ディレクトリにコードをコピーし、その後、(。リンク付きなど)新しいものと古いコードベースを交換し、または...
  2. チェックアウトsvnでライブWebサーバーが動作し、svn updateを実行するだけです。

私は通常、ライブデプロイメントの前にデータベースをアップグレードする必要がありますが、通常アップグレードSQLスクリプトを作成し、ライブデータベースで最初に実行してからチェックアウトします。

このタスクのベストプラクティスは何ですか。

+0

ステファノ、私の答えはいいと思いますか? – TheJacobTaylor

+0

@TheJacobTaylor:私は数週間おきにセッションを受け入れます。今週末に私はすべての答えを読んで受け入れます。 –

答えて

10

チェックアウトの代わりにSVNエクスポートを利用することをおすすめします。このようにして、SVNファイルを世界に公開することはありません。また、一般に、よりクリーンなフォルダ構造を作成します。

ステージとプロダクションの間でファイルを移動する前にrsyncを活用しました。

私の典型的な展開を進め、次のように:

  • バックアップ生産現場
  • は、エクスポートがリポジトリからコード
  • すべての外部IPアドレスからダウンサーバーをロックし、ステージサーバへのバックアップからのリストアtempフォルダに(小変更の場合は2つのフォルダを任意にdiffする)
  • 一時フォルダからステージサーバーフォルダへのrsycファイル
  • 変更が必要なファイルのみが実際に変更されたことを検証します。
  • DB
  • にSQLスクリプトを適用するテストアップグレード
  • は早送りにこれらのステップを再生、生産に展開する、今、ウェブサーバ

のロックを解除します。スクリプトを使用する方がはるかに簡単です。

+0

私は同意しますが、たくさんのファイルがある場合、svnのエクスポートは遅くなる可能性があります! –

+0

ほとんどのウェブサーバーでは、.svnフォルダを提供しないようにするフィルタを設定するのは簡単なことですので、 "svn update"を使用しない理由として考えません。最初にサーバーをセットアップしたときには、何かを覚えておいてください。 – rmeador

+0

ローカル(ディスクまたはネットワーク)svnからエクスポートする場合、一般的に速度は問題になりません。またはそれは ?私は、svnが速いのではないことを意味します。それから遠い。 –

1

理論上、私はsvnをウェブサーバ上の新しい領域に書き出します。新しい領域を使用するようにWebサーバーを再構成し、再起動します。

4

これをすべて自動化する展開スクリプトを検討する必要があります。あなたが間違いをするのを防ぐのに役立ちます。 SQLアップグレードスクリプトは一生懸命ですが、実際のデータベースでそれらを実行する前に、常にライブデータベースのコピーでそれらをテストする必要があります。

ステージングサーバーがあると思われるものは何ですか?ローカルの変更を行い、次にステージングサーバーにsvn checkoutを実行して、アップグレードスクリプトもそこで実行します。ステージングサーバーで受け入れテストを行います。すべてがうまくいくと、ライブサーバーに永遠に展開します。これは、いくつかのスクリプトを実行するのと同じくらい簡単なはずです。すなわち、update-staging.plおよびupdate-prod.pl。

データベースにバージョンテーブルを追加することで、SQLスクリプトの自動化を容易にすることができます。更新スクリプトを作成するたびに、それをバージョンでタグ付けします。デプロイスクリプトは更新スクリプトのバージョンとデータベースのバージョンを確認し、必要に応じて更新を適用することができます。これにより、バックアップからのリストアも可能になります。変更を加えてからバックアップに復元する場合は、アップグレードスクリプトを実行するだけで、DBが最新のバージョンに更新されます。

+0

実際、可能な限り「ロールバック」スクリプトも書いています。私はデータを再挿入しないので、それがどれほど有益なのか分かりませんが、少なくとも私はSQL構造をダウングレードする方法を持っています。 –

3

私は、&のスクリプトにCapistranoを使用して、展開プロセスを自動化します。私のローカルワークステーションからcap deployと入力すると、何が起きるのかの概要は次のとおりです。

カプリストラノはそうです。 。 。

  1. 私のウェブサーバ上の(例えば/var/http/mywebsite.com/releases/20090715014527に)タイムスタンプ付きのディレクトリにあるソースのチェックアウトの最新バージョンは、必要に応じて、任意のパスワードは私のローカルワークステーション@私を促します。

  2. ライブディレクトリにファイル名を指定して実行前処理スクリプト(例えば、更新データベーススキーマ)

  3. ソフトリンクサイト:

    LN -sf /var/http/mywebsite.com/releases/20090715014527/VAR/HTTP/mywebsite.com /現在

  4. 実行後処理スクリプト(たとえば、多分あなたは、Apacheや何かを再起動する必要があります)

途中で問題が発生した場合、Capistranoは以前の作業リリースにロールバックします。

CapistranoはRubyで書かれていますが、どの言語/フレームワークでもWebアプリケーションを展開できます。アイデアについては、"Deploying non-rails apps" section of the tutorialsを参照してください。 railsless-deployは、Capistranoを使用してPHPやPythonアプリケーションを管理する場合に特に便利です。小型、PHPベースのシステムのための

1

は、私たちが行うために使用することはこれです:コードの変更のための

は、我々はリモートでローカル(DEV)システムを比較日食から実行しているAntスクリプトを使用する(QA/prod/whatever)のシステムを起動し、変更されたすべてのファイルをzipし、zipをリモートシステムにscpして、ターゲット上に解凍します。もちろん自動バックアップなどがあります。これが興味のある場合は、数日後にサンプルスクリプトを投稿することができます。

sqlの変更では、(通常はバグトラッカーの)変更ごとにスクリプトを維持し、ターゲットシステムの各変更を手動で実行しようとします。

大規模なシステムでは、実際にはもっと頑丈なものを使用します。

あなたのプロダクトシステムがsvnから直接引き抜かれている場合は、正しくテストされていない可能性がある変更をディプロイすることに注意してください(何かをコミットするのを忘れてローカルシステムをテストし、

+0

about zip:古いファイルを削除するとどうなりますか?最後の発言のために+1 +1私はちょっとした。 –

+1

実際、私は古いzipファイルを常に保管しています。私はそれらの名前をyyyymmddhhmiss.zipと呼んでいますので、正確に何のコードが貼られているか正確に知ることができます。また、バックアップが失敗した場合でも古いバージョンに戻すことができます。私はディスクスペースが足りなくなるときにのみそれらを削除します。 –

1

私は最初のオプションをお勧めします。コードのバージョンを入れてリンクを変更してコードのバージョンを入れ替えることができる構造であれば、svnのチェックアウトだけの場合よりもロールバックする方がはるかに簡単です。 svnを使用すると元のバージョンにマージして元に戻す必要があります。

関連する問題