Развертывание приложений PHP при помощи Capistrano в Ubuntu

Сегодня процесс разработки веб-приложений в значительной степени зависит от фреймворка. Именно благодаря фреймворкам (грубо говоря, это группа  предварительно подготовленных библиотек) современное  программирование стало намного проще и быстрее. Фреймворки предоставляют разработчику богатый арсенал инструментов, среди которых – инструменты аутентификации, загрузки файлов, шифрования, управления файлами cookie и сессиями, им многое другое.

Несмотря на популярность языка программирования PHP, в его многочисленных фреймворках все еще остались некоторые трудоемкие рутинные задачи, которые делают процесс создания веб-сайта (или API) скучным. В данном руководстве речь пойдет об инструменте автоматизации Capistrano, который способен толкать код на сервер, не обращаясь при этом к менеджерам файлов SFTP, – абсолютно автоматически!

Примечание: Хотя статья продемонстрирует загрузку и установку зависимостей Capistrano (например, Ruby 2.1.0), рекомендуется заранее подготовить сервер развертывания.

Краткий обзор Capistrano

Capistrano – это открытый инструмент управления сервером или развертыванием на основе Ruby. Capistrano позволяет без прямого вмешательства выполнять произвольные функции и процедуры на виртуальных серверах; это делается путем  запуска скрипта Capistrano, который содержит все необходимые инструкции. В целом, этот инструмент можно назвать персональным ассистентом разработчика, поскольку он способен выполнить почти любую задачу, от обмена данными с удаленной машиной до полноценного развертывания приложения.

Изначально Capistrano был разработан для фреймворка Rails, но его последняя версия, – Capistrano 3, – может быть использована с абсолютно любым фреймворком, включая PHP.

Загрузка интерпретатора Ruby и Capistrano

Интерпретатор Ruby

Чтобы запустить Capistrano, на машине разработки PHP необходимо установить последнюю доступную версию интерпретатора Ruby. Ниже приведены краткие инструкции по установке Ruby на виртуальный выделенный сервер Ubuntu.

# Обновите список пакетов системы
# и приложения до последней версии:
aptitude    update
aptitude -y upgrade
# Загрузите и установите пакет build-essential:
aptitude install -y build-essential
# Установите некоторые общие инструменты:
aptitude install -y cvs subversion git-core libyaml-dev mercurial
# Загрузите Ruby Version Manager
curl -L get.rvm.io | bash -s stable
# Создайте окружение при помощи RVM:
source /etc/profile.d/rvm.sh
# Загрузите и установите Ruby через RVM:
rvm reload
rvm install 2.1.0

Установка Capistrano

После установки Ruby используйте менеджер пакетов RubyGems для установки Capistrano.

Запустите следующую команду:

gem install capistrano --no-ri --no-rdoc

Подготовка сервера развертывания

Будучи зрелым инструментом автоматизации, Capistrano разработан с акцентом на стабильность и безопасность.

Чтобы использовать Capistrano для развертывания веб-приложений PHP, нужно сначала подготовить сервер развертывания; для начала необходимо создать пользователя и группу для 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

Отредактируйте /etc/sudoers при помощи текстового редактора nano, чтобы пользователь deployer sudo мог разворачивать приложения:

nano /etc/sudoers

Найдите в файле следующий блок:

..
# User privilege specification
root    ALL=(ALL:ALL) ALL
..

Сразу после root внесите строку:

ALL=(ALL) ALL:
deployer ALL=(ALL:ALL) ALL

Теперь этот раздел файла имеет такой вид:

..
# User privilege specification
root     ALL=(ALL:ALL) ALL
deployer ALL=(ALL:ALL) ALL
..

Нажмите CTRL+X, чтобы закрыть и сохранить файл, и Y для подтверждения.

Создание каталога для развертывания приложений

Также на сервере развертывания нужно создать отдельный каталог, в котором будет расположена база исходных текстов PHP для запуска приложения.

В каталоге /var  создайте каталог веб-приложения по имени www:

sudo mkdir /var/www

Измените права на этот каталог, чтобы веб-сервер (в данном случае это 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 – это автоматизация развертывания приложений. Чтобы это было возможно, нужно еще настроить PHP и Nginx (как и любой другой веб-сервер и интерпретатор).

Чтобы полностью подготовить сервер развертывания к запуску веб-приложения PHP, ознакомьтесь со следующими статьями:

Подготовка PHP-приложения к автоматическому развертыванию

Успешно установив на сервер разработки Ruby и Capistrano, а также добавив отдельного пользователя, нужно запустить Capistrano, чтобы инструмент начал автоматически разворачивать веб-приложения.

Примечание: В этом разделе предполагается, что исходный код приложения находится в каталоге /home/developer1/my_app. В нем и нужно выполнить следующие команды.

# cd /path/to/your/app/on/dev/server
cd /home/developer1/my_app

Запуск Git

Git – это широко используемая система управления исходным кодом. Capistrano  управляет жизненным циклом приложений и процессами развертывания через репозитории 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 git@github.com:[user name]/[proj. name].git
git remote add origin git@github.com: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 "user123@domain.tld"
# Push the project's source code to your Github account
git push -u origin master

Примечание: Подробнее об использовании Git можно прочесть в руководстве «Продуктивное использование Git».

Запуск Capistrano

После установки и запуска Capistrano он будет автоматически выполнять scaffold конфигураций и файлов развертывания в каталоге проекта.

Чтобы установить 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{deployer@162.243.74.190}
# 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 не всегда так проста, как может показаться на первый взгляд. К сожалению, на нынешнем этапе вместо подсказок из руководства и документации инструмент выводит жалобные извещения.

Чтобы все работало должным образом, попробуйте проверить:

  • Имена каталогов и репозиториев;
  • Все ли набрано без ошибок;
  • Что серверы разработки и производства имеют все необходимые инструменты (т.е. sqlite3, библиотеки и т.п.);
  • Выполнение всех операций вручную, прежде чем передать их Capistrano.

Также рекомендуется подобрать более безопасный метод аутентификации согласно официальной документации Capistrano.

Чтобы узнать о работе Capistrano больше, читайте официальную документацию инструмента.

Чтобы узнать о работе Capistrano больше, читайте официальную документацию инструмента.

Tags: , , , , , ,

Добавить комментарий