Хостинг под Rails проекты, часть 1

  • написал: MpaK
  • 124

В общем-то это не будет какой-то большой и развернутый пост с рассуждениями, а скорее простая инструкция-заметка, которая будет полезная программистам, которые еще и немного занимаются администрирование хостинга под свои Ruby on Rails проекты. Уровень начинающего или недавно столкнувшегося с необходимостью самостоятельно разворачивать свои RoR приложения.

Вокруг Rails витает дух слухов и домыслов, что есть сложности с хостингом, что это сложно, что это дорого, что неудобно. Это все веит из мира PHP, где конечно же простейшим инструментом развертывания был всегда ftp, а разворачивание данных на базу данных происходило хорошо если через консоль, но чаще всего через phpMyAdmin веб клиента.

Этой маленький инструкцией я бы хотел показать, что настроить недорогой vds за 10-20$ в месяц, можно так же быстро, как и в дальнейшем разворчивать свои множественные приложения на этом хостинге без особых усилий.

К примеру вы уже купили vds сервер у какого-либо хостера, мое последние открытие например www.transip.eu/vps/pricing-and-purchase/ очень недорого, надежный и довольно производительный хостинг (4 gb ram за 20$ в месяц это отличное предложение, из минусов вижу пока только 2 ядра дают на машину в эту сумму, но этого для меня вполне достаточно на данный момент).

Мы хотим настроить linux операционную систему, чтобы мы могли удобный и быстро разворачивать через capistrano множественные проекты на базе фрэймворка Ruby on Rails (хотя думаю и Sinatra можно так же).

Для начала нам хочется создать пользователя deployer от будет в группе staff все проекты будут разворачиваться в собственной подпапке каждого проекта /home/deployer/project_name — где project_name будет на каждый наш новый проект. Веб-сервер приложений будет Unicorn, а внешний NGINX, запускать мы их тоже хотим от deployer пользователя, и в целом связка NGINX + Unicorn очень приятная и скоростная.

Инструментом разворачивания (деплоя) приложения будет Capistrano (есть еще попроще аналог Mina), отличны инструмент с сотней рецептов в сети и обильной документацией. Маленький нюанс, что каждую новую версию проекта capistrano разворачивает в подпапке проекта current, то бишь последняя версия наших приложений будет лежать в /home/deployer/project_name/current

Ну и чтобы пробовать разные версии Ruby интерпретатора, да и еще например держать в «связке» библиотеки и их версии одного проекта не смешивая с другим, то будем использовать RVM — это очень удобный инструмент для управления версиями языка и пакетами библиотек, так сказать держать мух от котлет подальше.

Разумеется для всего этого на нашем vds должна стоять OS, я более или менее последнее время работал с Ubuntu и Debian, последняя мне кажется предпочтительнее так как все эти замарочки с sudo вводят меня немного в ступор и вносят путаницу, а с обычным root аккаунтом запутаться сложно. Потому все ниже буду писать под Debian, но различия будут минимальные, так все установки делают пот root аккаунтом, то в ubuntu вам надо будет сделать sudo su или каждый раз дополнять команду префиксом sudo.

И так мы вошли под root в нашу свежую OS, если у вас есть ssl-ключь, который вы используете с github или другим сервисом вы можете его добавить в ~/.ssh/authorized_keys чтобы в дальнейшем не мучаться с вводом паролей.

Первым делом апдейтим систему:
apt-get update
apt-get upgrade -y


Потом бы нам поставить несколько нужных библиотек, заодно поставим сразу и nginx сервер:
apt-get install build-essential libmagickcore-dev imagemagick libmagickwand-dev libxml2-dev libxslt1-dev git-core libmysqlclient-dev libv8-dev nginx curl

Заодно и библиотека для работы с изображениями (imagemagick), тут же и git чтобы был, ну и с xml работать надо будет тоже.

Дальше одной строкой ставим RVM под root, второй строкой даем знать об rvm консоли, теперь с ним можно работать:
gpg2 --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
\curl -L https://get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh


Дальше мы создаем пользователя deployer, группу для него staff. 2-ой строкой меняем ему пароль, придуймате что-нибудь. Ну и 3-ей строкой добавляем пользователя deployer в группу rvm им там не тесно думаю будет :)
useradd -m -g staff -s /bin/bash deployer
passwd deployer
gpasswd -a deployer rvm


Потом все же для новых Rails хорошо бы иметь Nodejs на борту, уже много их связывает так сказать :)
Вот этот параграф можно пропустить тем кто на Ubuntu, там стоит просто сразу набрать sudo apt-get install nodejs. А тем кто на Debian лучше почитать еще этот параграф и проделать его.
Чтобы не собирать каждый раз из исходников и не париться с обновлениями я решил, что добавить ppa репозитарий от ноды будет лучше, да и мало ли мы захотим еще какие репозитарии в дальнейшем добавлять.
cd /usr/sbin
wget http://blog.anantshri.info/content/uploads/2010/09/add-apt-repository.sh.txt
mv add-apt-repository.sh.txt add-apt-repository
chmod o+x add-apt-repository
chown root:root add-apt-repository
add-apt-repository ppa:chris-lea/node.js
apt-get install nodejs

И по строкам: 1. перешли в папку наших приложений 2. скачали скрипт для добавления ppa адреса в дебиановский репозитарий, 3-4 поставили права на запуск и владельца подтвердили, 5 добавили ppa репозитарий от nodejs и 6-ая поставили Node.js

Теперь ставим openssl библиотеку, она нужна для новых версий Ruby, второй строкой ставим пока стабильную версию 2.0.0 языка.
rvm pkg install openssl
rvm install 2.0.0 --with-openssl-dir=$HOME/.rvm/usr


Ну и на последок, смотря какую базу вы используете, ту и ставим, это может быть все, что угодно от MySQL (Percona, MariaDB), PostgreSQL и до всяческий MongoDB, Cassandra и т.п.

Я по старинке ставлю MySQL
apt-get install mysql-server mysql-client


Все, у нас установлены веб-сервер NGINX, база данных MySQL и RVM с последним стабильным релизом Ruby.

Дальше мы настроим наше приложение на развертывание и веб-сервер.

1 комментарий

avatar
  • MpaK
  • 0
для MariaDB
apt-get install mariadb-server mariadb-client libmariadbclient-dev
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.