Развертывание приложений PHP при помощи Capistrano в Ubuntu
PHP, 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 больше, читайте официальную документацию инструмента.
Tags: Capistrano, Git, LEMP Stack, NGINX, PHP, Ruby, Ubuntu 13