Ubuntu13でCapistranoを使用してPHPアプリのデプロイプロセスを自動化する方法
序章
最新のWebアプリケーション開発は、フレームワークに大きく依存しています。 これらの簡単に準備できるライブラリのセットにより、実際のプログラミングは、昔とは異なり、実際のプログラミングよりもはるかに簡単になります。 これらは、認証から暗号化、Cookieとセッションの処理、ファイルのアップロードまで、さまざまなツールを提供します。
PHPプログラミング言語とその多くの優れたフレームワークの人気にもかかわらず、開発者が夢見るWebサイト(またはAPI)を作成するという楽しい部分から離れてしまう時間のかかる課題がまだあります。
このDigitalOceanの記事では、Capistrano Automation Toolシリーズに続いて、別の小さなフレームワーク(またはツール)を導入する方法を説明します。今回は、SFTPファイルマネージャーを処理せずにコードをサーバーにプッシュするのに役立ちます–自動的に!
用語集
1. キャピストラーノの概要
2. RubyインタプリタとCapistranoの入手
- Rubyインタプリタ
- キャピストラーノ
3. デプロイメントサーバーの準備
- デプロイメントユーザーとグループの作成
- アプリケーションデプロイメントディレクトリの作成
- PHPとNginxのセットアップ
4. 自動デプロイメントのためのPHPアプリケーションの準備
- Gitの開始
- キャピストラーノの開始
- Capistranoデプロイメントの構成
- Capistranoを使用した本番環境の構成
- 本番サーバーへのデプロイ
5. トラブルシューティング
注: Capistranoに必要な依存関係をダウンロードして設定する方法を説明しますが、 Ruby 2.1.0
)展開プロセスを自動化するために、この記事では、Ubuntu13クラウドサーバーにオンラインで配置ドロップレットが機能するWebサイトインストールで準備されていることを前提としています。
キャピストラーノの概要
Capistranoは、Rubyプログラミング言語ベースのオープンソースサーバー(またはデプロイメント)管理ツールです。 Capistranoを使用すると、Capistranoにスクリプトを実行させることで、直接干渉することなく仮想サーバー上で任意の機能と手順を実行できます(つまり、 リストされているすべての指示を含むレシピ)。 一般的な意味で、このツールは開発者自身の展開アシスタントと見なすことができ、リモートマシンでコードを取得することから、オンライン取得プロセス全体をブートストラップすることまで、ほとんどすべてを支援します。
もともとはRailsフレームワークのデプロイを支援するために作成されたもので、最新バージョンでは、Capistrano 3は、PHPを含むほとんどすべてのもので(そしてそのために)使用できるようになりました。
注: CapistranoとRubyの詳細については、 Capistranoを使用して展開を自動化する方法:はじめにに関する記事をご覧ください。
RubyインタプリタとCapistranoの入手
Rubyインタプリタ
PHP開発マシンでは、Capistranoを実行するために、利用可能な最新のRubyインタープリターが必要です。 Ubuntu VPSでRubyを入手する方法を説明する以下の手順は、実際には詳細なチュートリアルの簡単な要約です: Ruby2.1.0を実行するためのUbuntu13サーバーの準備。
# Update the software sources list # And upgrade the dated applications: aptitude update aptitude -y upgrade # Download and install the build-essential package: aptitude install -y build-essential # And some additional, commonly used tools: aptitude install -y cvs subversion git-core libyaml-dev mercurial # Get the Ruby Version Manager curl -L get.rvm.io | bash -s stable # And to create a system environment with RVM: source /etc/profile.d/rvm.sh # Download and install Ruby using RVM: rvm reload rvm install 2.1.0
キャピストラーノ
Rubyをインストールすると、デフォルトのRubyパッケージマネージャーRubyGemsを使用してCapistranoをセットアップできます。
次のコマンドを実行して、gem
を使用してCapistrano3をダウンロードしてインストールします。
gem install capistrano --no-ri --no-rdoc
デプロイメントサーバーの準備
成熟した自動化ツールとして、Capistranoは安定性とセキュリティを念頭に置いて構築されています。 これを使用してPHPWebアプリケーションをデプロイするには、最初にデプロイメントサーバーでいくつかの作業を実行する必要があります。 Capistranoに接続するために使用するユーザーグループを作成します。
デプロイメントユーザーとグループの作成
新しいユーザーグループを追加します。
# Usage: sudo addgroup [group name] sudo addgroup www
新しいユーザーを作成し、このグループに追加します。
# Create a new user: # Usage: sudo adducer [user name] sudo adduser deployer # Follow on-screen instructions to user-related # information such as the desired password. # Add the user to an already existing group: # Usage: sudo adducer [user name] [group name] sudo adduser deployer www
テキストエディタnano
を使用して/etc/sudoers
を編集し、ユーザーがdeployer
sudo
を将来展開できるようにします。
nano /etc/sudoers
ファイルを下にスクロールして、root
が定義されている場所を見つけます。
.. # User privilege specification root ALL=(ALL:ALL) ALL ..
root ALL=(ALL) ALL
の直後に次を追加します。
deployer ALL=(ALL:ALL) ALL
/etc/sudoers
ファイルのこのセクションは次のようになります。
.. # User privilege specification root ALL=(ALL:ALL) ALL deployer ALL=(ALL:ALL) ALL ..
CTRL + Xを押し、Yで確定して保存して終了します。
注: SSHとsudoの詳細については、 LinuxBasicsに関するDigitalOceanコミュニティの記事をご覧ください。
アプリケーションデプロイメントディレクトリの作成
デプロイメントサーバーでは、Webサーバーがアプリケーションを実行するためのPHPコードベースが配置されるディレクトリも定義および作成する必要があります。
/var
内にwww
Webアプリケーションディレクトリを作成します。
sudo mkdir /var/www
そして、Webサーバーにアクセスできるようにするためのアクセス許可を設定します(つまり、 Nginx):
# Set the ownership of the folder to members of `www` group sudo chown -R :www /var/www # Set folder permissions recursively sudo chmod -R g+rwX /var/www # Ensure permissions will affect future sub-directories etc. sudo chmod g+s /var/www
PHPとNginxのセットアップ
Capistranoの義務は、展開を自動化することです。 Webアプリケーションを機能させるには、PHPとNGinx(またはその他のWebサーバーとインタープリターの組み合わせ)をセットアップする必要があります。
PHP Webアプリケーションを実行するためのデプロイメントサーバーを完全に準備するには、次の記事を確認してください。
- Nginx、PHP、MySQL:
Linux、nginx、MySQL、PHP(LEMP)スタックをインストールする方法
- phpMyAdmin:
LEMPサーバーにphpMyAdminをインストールする方法
自動デプロイメントのためのPHPアプリケーションの準備
開発サーバーへのRubyとCapistranoのインストールと、デプロイメントマシンへのデプロイメントユーザーの追加が完了すると、Capistranoを「開始」してツールを開始する方法を確認できます。
注:このセクションでは、Webアプリケーションのソースコードが/home/developer1/my_app
ディレクトリにあることを前提としています。 以下のコマンドは、内から実行する必要があります。
# cd /path/to/your/app/on/dev/server cd /home/developer1/my_app
Gitの開始
Gitは、開発者が一般的に使用するソースコード管理システムおよび再訪ツールです。 Capistranoは、Gitリポジトリを介してアプリケーションのライフサイクルとデプロイプロセスを制御および管理します。
このセクションでは、一元的にアクセス可能なGitリポジトリを作成し、Gitを開始して、プロジェクトをアップロードし、Capistranoがデプロイ中に使用できるようにします。
注:このセクションに従うには、Githubアカウントと空のリポジトリを作成する必要があります。
アプリケーションのソースコードが配置されているディレクトリ内で、次のわかりやすいコマンドを実行します(例: my_app
)リポジトリを開始するには:
# !! These commands are to be executed on # your development machine, from where you will # deploy to your server. # Instructions might vary slightly depending on # your choice of operating system. # Initiate the repository git init # Add all the files to the repository git add . # Commit the changes git commit -m "first commit" # Add your Github repository link # Example: git remote add origin [email protected]:[user name]/[proj. name].git git remote add origin [email protected]:user123/my_app.git # Create an RSA/SSH key # Follow the on-screen instructions ssh-keygen -t rsa # View the contents of the key and add it to your Github # by copy-and-pasting from the current remote session by # visiting: https://github.com/settings/ssh # To learn more about the process, # visit: https://help.github.com/articles/generating-ssh-keys cat /root/.ssh/id_rsa.pub # Set your Github information # Username: # Usage: git config --global user.name "[your username]" # Email: # Usage: git config --global user.email "[your email]" git config --global user.name "user123" git config --global user.email "[email protected]" # Push the project's source code to your Github account git push -u origin master
注: Gitの操作の詳細については、DigitalOceanコミュニティページのGitを効果的に使用する方法チュートリアルをご覧ください。
キャピストラーノの開始
このステップでは、Capistranoに、プロジェクトディレクトリ内の構成ファイルと展開ファイルを自動的にスキャフォールディングさせます。
以下を実行して開始します(つまり、 install )Capistranoファイル:
cap install # mkdir -p config/deploy # create config/deploy.rb # create config/deploy/staging.rb # create config/deploy/production.rb # mkdir -p lib/capistrano/tasks # Capified
Capistranoデプロイメントの構成
ファイルconfig/deploy.rb
には、デプロイメントサーバーに関連する引数と設定が含まれています。 ここでは、接続してデプロイするサーバーをCapistranoに指示します。
次のコマンドを実行して、nano
テキストエディタを使用してファイルを編集します。
nano config/deploy.rb
以下のコードブロックを追加し、独自の設定に合わせて変更します。
# !! When editing the file (or defining the configurations), # you can either comment them out or add the new lines. # Make sure to **not** to have some example settings # overriding the ones you are appending. # Define the name of the application set :application, 'my_app' # Define where can Capistrano access the source repository # set :repo_url, 'https://github.com/[user name]/[application name].git' set :scm, :git set :repo_url, 'https://github.com/user123/my_app.git' # Define where to put your application code set :deploy_to, "/var/www/my_app" set :pty, true set :format, :pretty # Set your post-deployment settings. # For example, you can restart your Nginx process # similar to the below example. # To learn more about how to work with Capistrano tasks # check out the official Capistrano documentation at: # http://capistranorb.com/ # namespace :deploy do # desc 'Restart application' # task :restart do # on roles(:app), in: :sequence, wait: 5 do # # Your restart mechanism here, for example: # sudo "service nginx restart" # end # end # end
CTRL + Xを押し、Yで確定して保存して終了します。
Capistranoを使用した本番環境の構成
注: config/deploy.rb
と同様に、config/production.rb
ファイルにいくつかの修正を加える必要があります。 以下のブロックを追加するよりも、コードを変更する方がよいでしょう。
以下を実行して、nanoテキストエディタを使用してファイルを編集します。
nano config/deploy/production.rb
以下のように、サーバーの設定を入力します。
# Define roles, user and IP address of deployment server # role :name, %{[user]@[IP adde.]} role :app, %w{[email protected]} # Define server(s) # Example: # server '[your droplet's IP addr]', user: '[the deployer user]', roles: %w{[role names as defined above]} # server '162.243.74.190', user: 'deployer', roles: %w{app} server '162.243.74.190', user: 'deployer', roles: %w{app} # SSH Options # See the example commented out section in the file # for more options. set :ssh_options, { forward_agent: false, auth_methods: %w(password), password: 'user_deployers_password', user: 'deployer', }
CTRL + Xを押し、Yで確定して保存して終了します。
本番サーバーへのデプロイ
設定が完了したら、デプロイします。
開発マシンで次のコードを実行して、運用サーバーにデプロイします。 上記のファイルで定義されているように、Capistranoは次のことを行います。
- デプロイメントサーバーに接続します
- アプリケーションソースをダウンロードする
- 展開アクションを実行します
すべての設定が完了したら、次のコマンドを実行して、Capistranoにアプリケーションソースを開発サーバーからデプロイメントマシンにデプロイさせることができます。
cap production deploy
以上です! これで、Capistranoがコードをオンラインで取得し、最新のコードベースを追跡するのを見ることができます。
トラブルシューティング
Capistranoでの作業は、見た目ほど簡単ではありません。 残念ながら、ツールはガイドではなく文句を言うのが好きで、現在の段階ではドキュメントは少し制限されています。
すべてがスムーズに機能するようにするには、次のことを試してください。
- ディレクトリ名とリポジトリ名を一致させます。
- すべてを正しく入力してください。
- 開発サーバーと展開サーバーに必要なすべてのツールが含まれていることを確認してください(つまり、 sqlite3、ライブラリなど)。
- Capistranoに実行させる前に、すべての操作と実行を手動でテストしてください。
- Capistranoの公式ドキュメントに従って、より安全な認証方法を実装することを検討してください。
Capistranoとその機能の詳細については、Capistranoのドキュメントを読むことを検討してください。