web-dev-qa-db-ja.com

ユーザーを待たせずにサイトを更新するにはどうすればよいですか?

ダウンタイムはユーザーにとって不便であり、現在はサイトのエンジンがアップグレードされるたびに待機する必要があります。さらに、市販のスクリプトを使用する場合、設定の変更が意図したとおりに機能しないというリスクがあります(ステージングサイトでテストされた場合でも)。

サーバー上でサイトの複数のバージョンを保持し、ダウンタイムを発生させずにそれらを切り替えるにはどうすればよいですか(たとえば、htaccessファイルを使用)。

8
Gelatin

Linux/BSDマシンを使用していますか?その場合、シンボリックリンクを使用して簡単にこの目標を達成できます。

ここでサイトのバージョン1を作成します。

/var/www/www.example.org.v1

このディレクトリを指すシンボリックリンクを作成します

cd /var/www
ln -s www.example.com.v1 www.example.com

これにより、次のようなディレクトリ一覧(ls -la)が表示されます。

lrwxr-xr-x   1 userid  users    18 Aug  3 03:35 www.example.com -> www.example.com.v1
drwxr-xr-x   2 userid  users   512 Aug  3 03:35 www.example.com.v1

/var/www/www.example.comをドキュメントルートとして使用するようにWebサーバーを設定します。これを変更する必要はありません。すべての再ポイントはファイルシステムレベルで行われます。

さて、サイトのバージョン2に交換したいときは、新しいバージョンを次の場所に配置するだけです。

/var/www/www.example.org.v2

そして、このバージョンを指すようにシンボリックリンクを更新します。

ln -sfh www.example.com.v2 www.example.com

これにより、ディレクトリ出力は次のようになります。

lrwxr-xr-x   1 userid  users    18 Aug  3 03:43 www.example.com -> www.example.com.v2
drwxr-xr-x   2 userid  users   512 Aug  3 03:42 www.example.com.v1
drwxr-xr-x   2 userid  users   512 Aug  3 03:41 www.example.com.v2

ご覧のとおり、www.example.comシンボリックリンクは、サイトのバージョン2を指しているようになりました。これはアトミックな操作であり、ファイルが使用できないことに関連するダウンタイムを引き起こすことはありません。

もちろん、データベース構造の更新、静的リソースの使用(および正しいバージョンへのリンク)などの確保には依然としてかなりの複雑さが必要ですが、少なくともこれにより、すべての適切なリソースが新しいサイトがすぐに利用できます。

Windows VistaおよびServer 2008は、mklinkコマンドを使用したシンボリックリンクもサポートしていますが、直接的な経験はありません。

6
JasonBirch

Apacheの仮想ホストを使用して、2つの異なるURLで2つのバージョンのコードを作成できます。一般的に使用される例は次のとおりです。

test.example.com-> /var/www/version1.2

www.example.com-> /var/www/version1.1

どちらも同じサーバー上にありますが、おそらく世界でアクセスできるのは1つだけです。 test.example.comが機能していることが確認できたら、Apache configでそれらが指す場所を変更するだけで済みます。新しいサイト、新しいコード。データベーススキーマの変更がなかったと仮定すると、これは機能するはずです。そのため、変更後は次のようになります。

test.example.com->/var/www/newtestversion

www.example.com-> /var/www/version1.2

次に、仮想ホストのApache構成ディレクティブの例を示します。

<VirtualHost *:80>

     ServerAdmin gabe@localhost

     DocumentRoot "/var/www/version1.1"

     ServerName test.example.com

</VirtualHost>

これを行う方法の詳細については、 Apache virtual Host documentation を参照してください

IISでこれを行う方法はわかりませんが、方法もあると思います。

何か問題が発生した場合は、仮想ホストを元のホストに戻すと、古いサイトが元に戻ります...問題ありません。これらの変更を有効にするには、Apacheを再起動する必要がありますが、それは一般的に非常に高速です。

7
gabe.

IISでは、更新で2つ目の仮想ディレクトリをセットアップできます。

次に、すべてのリクエストをリダイレクトするか、2番目のサイトのバインディングを目的のホスト名に再マッピングします

IIS 7のHTTPリダイレクト: http://technet.Microsoft.com/en-us/library/cc732930(WS.10).aspx

1
Rickjaah

私が提案するもの:

  • 変更をアップロードする前に、開発サーバーでローカルにテストします。テストサーバーで動作することが合理的に確認されるまで、ライブサーバーで変更を加えないでください。
  • 交通量の最も少ない時間にメンテナンスを行ってください。ほとんどのWebサイトでは、これは週末の早朝に行われます。週末が選択肢にない場合は、その週の最もトラフィックの少ない時間にそれを行います。
  • 事前にスケジュールされたメンテナンスについてユーザーに警告してください。
0
Virtuosi Media