カピストラーノとphp

画像 みなさんこんにちは。 今日、私は素晴らしい展開能力を持つカピストラーノについてもう一度お話したいと思います。

Capistranoは、主にWebアプリケーションに使用される複数のサーバーでスクリプトを実行するためのオープンソースツールであることを思い出してください。 1つ以上のWebサーバーに新しいバージョンを展開するプロセスを自動化でき、データベースの変更などのタスクのサポートが含まれます。

CapistranoはRubyで書かれており、Ruby on Railsフレームワークの「モジュール」(またはコンポーネント、どちらが優れているかわかりません)です。

このトピックの大部分は、プロジェクトページからgithubへのチュートリアルの翻訳であり、いくつかの追加、変更、およびphp(または「not RoR」)に固有の略語が追加されています。 複数のサーバーとデータベースを使用する場合の問題は扱いません。これは初心者向けの小さなガイドです。

したがって、ローカルコンピューターの/ path / deploy /パッケージに、phpで記述されたアプリケーションがあるとします。 このアプリケーションには、現在のコードとともにexample.net/project.gitにあるgitリポジトリがあります。 example.comには、sshアクセスと、ファイルをアップロードするフォルダーへの/ path / deploy /のホスティングもあります。 ftpクライアントを常に混乱させたくないので、capistranoデプロイヤを理解するために数時間を費やすことにしました。 始めましょう。

設置


インストールから始めましょう。 コンソールを開き、次を入力します。

$ sudo apt-get install ruby rubygems $ sudo gem install capistrano 

RoRの構成ファイルはconfigフォルダーにあるため、capistranoはそれがあると想定します。 存在しない場合は、作成する必要があります。

  $ mkdir /path/deploy/from/config 

configディレクトリを作成するディレクトリがサーバーのルートディレクトリでもある場合、Apacheの.htaccessファイルを配置することを忘れないでください。これにより、このディレクトリのファイルの表示が禁止されたり、他のWebサーバーの設定でこのディレクトリへのアクセスが制限されます。

Capification


capistranoをインストールした後に最初にすべきことは、アプリケーションを「capify-nute」することです。 「Capfaction」は、アプリケーションをデプロイするためにcapistranoを構成するプロセスです。 これは非常に簡単です。プロジェクトのルートディレクトリにいることを確認し、次のように入力します。

  $ cd /path/deploy/from $ capify . 

このコマンドは、2つのファイルを作成します。

Capfileは、capistranoが必要とするメインファイルです。 makeがMakefileを使用し、rakeがrakefileを使用するように、CapistranoはデフォルトでCapfileを検索してダウンロードします。 最初に生成されるCapfileは非常に単純です。「config / deploy.rb」をロードするだけです...

config/deploy.rbアプリケーションの「設定」を含むファイル。
一般的に、Capfileをそのままにして、config / deploy.rbファイルに密接に取り組む必要があります。 最初は、次のようになります。

  set :application, "set your application name here" set :repository, "set your repository location here" set :scm, :subversion # Or: `accurev`, `bzr`, `vcs`, `darcs`, `git`, `mercurial`, `perforce`, `subversion` or `none` role :web, "your web-server here" # Your HTTP server, Apache/etc role :app, "your app-server here" # This may be the same as your `Web` server role :db, "your primary db-server here", :primary => true # This is where Rails migrations will run role :db, "your slave db-server here" # If you are using Passenger mod_rails uncomment this: # if you're still using the script/reapear helper you will need # these http://github.com/rails/irs_process_scripts # namespace :deploy do # task :start do ; end # task :stop do ; end # task :restart, :roles => :app, :except => { :no_release => true } do # run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}" # end # end 

この設定は私たちに合わないので、書き直します。

構成


最初に、アプリケーションに名前を付ける必要があります。 「私のphpアプリケーション」と呼びましょう。

  set :application, "my php application" 

次に、コードが置かれているリポジトリを指定する必要があります。 このリポジトリは、ローカルマシンとプロジェクトをデプロイするホスティングの両方からアクセスできる必要があります。 リポジトリを設定します。

  set :repository, "ssh://git@example.net/project.git" 

ローカルマシンとサーバーからリポジトリにアクセスするためのURLが異なる場合(たとえば、sshの外部ポートが異なる場合)、両方のアドレスを指定する必要があります。

  set :repository, "ssh://git@example.com:22100/project.git" set :local_repository, "ssh://git@example:project.git" 

デフォルトで割り当てられているSubversion以外のバージョン管理システムを使用しているため、次の行を入力する必要があります。

  set :scm, :git 

ここで、プロジェクトを展開するサーバー上のフォルダーにCapistranoを指定する必要があります。 これが何を意味するのかを理解するには、Capistranoがアプリケーションの展開に使用するディレクトリ構造を考慮する必要があります。

ディレクトリ構造Capistrano


Capistranoで正常にデプロイされたプロジェクトは、次のような構造になります([deploy_to]はプロジェクトをデプロイするディレクトリです)。

  [deploy_to] [deploy_to]/releases [deploy_to]/releases/20080819001122 [deploy_to]/releases/... [deploy_to]/shared [deploy_to]/shared/log [deploy_to]/shared/pids [deploy_to]/shared/system [deploy_to]/current -> [deploy_to]/releases/20100819001122 

プロジェクトをデプロイするたびに、「releases」フォルダーに新しいディレクトリが作成され、そこに最新バージョンがコピーされます。 その後、シンボリックリンク「current」が更新され、新しいディレクトリをポイントします。 アプリケーションの構造が、プロジェクトルートとWebディレクトリが異なるRoRまたは別のアプリケーションの構造に類似している場合、サーバーがこのディレクトリに構成されていることを確認する必要があります(RoRでは、これは[deploy_to] / current / publicです)。

構成に戻る


したがって、アプリケーションをデプロイするサーバー上の場所を指定する必要があります。 デフォルトでは、これはフォルダー「/ u / apps /#{application}」です(#{application}は、変数「:application」で上で指定した名前です)。 ディレクトリはデフォルトのディレクトリとは異なるため、明示的に指定します。

  set :deploy_to "/path/deploy/to" 

次に、サーバーの場所を指定する必要があります。 一般的に、Capistranoはデフォルトで、Railsアプリケーションをデプロイするために、web、app、dbの3つのロールを使用します。 これらの役割の詳細な説明は、元の記事に記載されています。 サーバーは1つしかなく、ロール機能は必要ないため、次の構文を使用できます。

  server "example.com" 

詳細設定


ここで、役に立つかもしれない追加の変数を見てみましょう。

カピストラーノチーム


レシピを書いた後、カピストラーノにいくつか質問をすることができます。

セットアップ


capistranoを使用してサーバーとやり取りしてみましょう。 最初に、ディレクトリの基本構造を作成する必要があります。

  $ cap deploy:setup 

このコマンドが起動されると、capistranoはサーバーに接続し、一連の「mkdir」コマンドを実行します。 プロジェクトを展開するディレクトリへのアクセス権を持つすべてのものが順番に揃っていることを事前に確認してください。

依存性チェック


フレームワークができたので、プロジェクトの開発を継続するために必要なものがすべて揃っているかどうかをcapistranoに尋ねることができます。

  $ cap deploy:check 

Kapistranoは、ローカルおよびリモートサーバーで必要なものをチェックします。 何かが欠落している場合、たとえば、操作に対する権限がない、gitがサーバーにインストールされていない、などのエラーメッセージが表示されます。

サーバーへのコードの送信


これから本格的な展開を実行するのではなく、コードをサーバーにアップロードして、この段階ですべてが正常であることを確認してください。

  $ cap deploy:update 

このコマンドは、リポジトリからサーバーにコードをダウンロードし、現在のリンクを更新します。

展開する


最後に、デプロイメントに直接到達しました。 実際、deployコマンドは、他のいくつかのコマンドの単なるラッパーであり、単純にそれらを順次実行します。 次の図でこれをどのように見ることができますか:

画像

deploy:updateおよびdeploy:finalize_updateコマンドはruby on railsアプリケーションに固有であるため、それらを再定義する必要があります。 これらの2つのコマンドに加えて、RoR用にシャープ化され、実行されるとエラーにつながる可能性があるため、deploy:startおよびdeploy:stopコマンドを再定義することをお勧めします(実際、他の特定のコマンドがありますが、最も基本的なコマンドのみを再定義します):

  namespace :deploy do task :start do end task :stop do end task :restart do end task :finalize_update do end end 

基本的に、今ではdeployコマンドはdeploy:updateコマンドと変わりませんが、必要なタスクでアプリケーション固有のアクションを記述することでこれを変更できます。

これでデプロイヤの準備が整いました。 説明した機能では不十分な場合は、プロジェクトwikiページのDSLドキュメントセクションをよく理解し、各標準タスクのcap -eコマンドの出力を注意深く読むことをお勧めします。 それらを読んだ後、この種の構造を簡単に書くことができます:

  after "deploy", "deploy:cleanup" 

このような行をレシピに追加すると、各展開後に/ path / deploy / to / releasesディレクトリが自動的に削除されます(デフォルトでは、最後の5つを除くすべてのリリースが削除されます)。

多段


開発では、capistrano-ext拡張機能も使用します。これにより、いわゆるマルチステージを実行できます。 テストサーバーと運用サーバーがあるとします。 それぞれに個別の構成を記述し、目的のサーバーに対してのみdeployを実行できます。
コマンドラインで拡張機能をインストールするには、次のように入力します。

  $ gem install capistrano-ext 

次に、フォルダ/パス/ deploy / from / config /に新しいディレクトリを作成します。

  $ mkdir /path/deploy/from/config/deploy 

そして、その中にレシピを入れます:例えばproduction.rbとstaging.rb。 構成に必要なのは、 / path / deploy / from / config / deploy.rbファイルに2行を書き込むことだけです。

  set :stages, %w(staging production) require 'capistrano/ext/multistage' 

これで、「cap production deploy」コマンドと「cap staging deploy」コマンドを使用してデプロイできます。 別の設定が必要な場合は、配置ディレクトリに配置し、変数に名前を追加します:stages

  set :stages, %w(staging production develop) 

「cap deploy」コマンドを実行しようとすると、capistranoは、デプロイを実行する必要があるレシピを指定する必要があることを警告し、作業を中断します。 デフォルトのレシピを使用するには、変数「default_stage」を定義できます。

  set :stages, %w(staging production develop) set :default_stage, "develop" require 'capistrano/ext/multistage' 

cap deployコマンドはcap deploy deployコマンドと同等になります。

それだけです、ご清聴ありがとうございました。

PS:チュートリアルの半分以下であるため、私は出版物の名前を翻訳に変えませんでした。 多くのことは他の記事や個人的な経験から取られています。

オリジナルのチュートリアル
多段に関する記事
help.github.com/capistrano

Source: https://habr.com/ru/post/J110021/


All Articles