Пошаговая настройка Ruby on Rails сервера с нуля на Ubuntu 14.04

от автора

В этом посте я пошагово расскажу как с нуля настроить продакшн-сервер для Rails. Частично это перевод вот этой английской статьи, но я убрал использование гема «Capistrano», т.к. куда проще воспользоваться git clone, а кому нужен Capistrano, тому и этот мануал не нужен. Так же я более подробно описал создание бд и добавил пару пунктов, без которых сервер не работал. Мы будем использовать:

  • Ubuntu 14.04
  • nginx + passenger
  • rvm
  • Ruby 2.1.2
  • PostgreSQL
  • git


Для начала у вас уже должен быть сервер с включенным SSH-сервером.

Шаг 0. Подготовка окружения.

Логинимся к нему через свой любимый SSH-клиент. Скорее всего, у вас будет только root-аккаунт, поэтому для начала создаем нового пользователя и заходим под ним. В качестве примера используется имя пользователя deploy:

sudo adduser deploy sudo adduser deploy sudo su deploy 
Создаем ключи для доступа к нашему серверу.

Данный шаг не обязателен, и сервер будет работать и без него, но для безопасности это необходимо. Будет использовать утилита ssh-copy-id. В терминале вашего компьютера (не на сервере!) вводим:

ssh-copy-id deploy@IPADDRESS 

Шаг 1. Устанавливаем все необходимое.

Устанавливаем Ruby

sudo apt-get update sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties 
Устанавливаем rvm

sudo apt-get install libgdbm-dev libncurses5-dev automake libtool bison libffi-dev curl -L https://get.rvm.io | bash -s stable source ~/.rvm/scripts/rvm echo "source ~/.rvm/scripts/rvm" >> ~/.bashrc rvm install 2.1.2 rvm use 2.1.2 --default ruby -v 

Команда для rubygems не устанавливать документацию:

echo "gem: --no-ri --no-rdoc" > ~/.gemrc 
Устанавливаем nginx

# Install Phusion's PGP key to verify packages gpg --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7 gpg --armor --export 561F9B9CAC40B2F7 | sudo apt-key add -  # Add HTTPS support to APT sudo apt-get install apt-transport-https  # Add the passenger repository sudo sh -c "echo 'deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main' >> /etc/apt/sources.list.d/passenger.list" sudo chown root: /etc/apt/sources.list.d/passenger.list sudo chmod 600 /etc/apt/sources.list.d/passenger.list sudo apt-get update  # Install nginx and passenger sudo apt-get install nginx-full passenger 

Введите следующую команду и проверьте что ip сервера в браузере теперь выдает nginx welcome page.

sudo service nginx start 

Теперь нужно открыть конфиг файл nginx. Для этого я использовал редактор nano, который сразу есть в Ubuntu. Вводим команду:

sudo nano /etc/nginx/nginx.conf 

Вам нужно раскомментировать две строчки:

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini; passenger_ruby /usr/bin/ruby; 

Адрес во второй строчке нужно изменить на следующий. Не забудьте заменить имя пользователя deploy на своего:

/home/deploy/.rvm/wrappers/ruby-2.1.2/ruby 
Устанавливаем PostgreSQL

sudo apt-get install postgresql postgresql-contrib libpq-dev 

Создаем пользователя (т.н. роль) в нашей бд. Логин и название бд в данном случае одинаковые и в качестве примера используется app_name:

sudo -u postgres createuser --superuser app_name  sudo -u postgres psql 

Задаем пароль:

\password app_name 

Жмем Ctrl+d для выхода, после чего создаем базу данных:

sudo -u postgres createdb app_name 

Шаг 2. Перенос приложения на сервер

Воспользуемся git. Сначала переходим в папку вашего юзера:

cd /home/deploy 

Идем на bitbucket.org или github.com, в общем, туда, где лежит ваш код и ищем ссылку на наш репозитарий и копируем ее в консоль сервера. Выглядит команда вот так:

git clone https://deploy@bitbucket.org/deploy/app_name.git 

Теперь в папке вашего пользователя у вас есть папка с вашим приложением app_name.

Шаг 3. Немного настроек

Теперь нужно снова внести изменения в конфиг nginx. Тут уже придется использовать более мощный текстовой редактор, чем nano. Я воспользовался vim (установить его, как и все остальное можно командой sudo apt-get install vim). Открываем файл:

sudo vim /etc/nginx/sites-enabled/default 

Теперь нам необходимо заменить содержимое следующим текстом. Вместо имени домена можно вписать ip-адрес, если у вас его еще нет. Так же не забудьте заменить имя пользователя deploy на своего:

server {         listen 80 default_server;         listen [::]:80 default_server ipv6only=on;          server_name mydomain.com;         passenger_enabled on;         rails_env    production;         root         /home/deploy/myapp/public;          # redirect server error pages to the static page /50x.html         error_page   500 502 503 504  /50x.html;         location = /50x.html {             root   html;         } } 

Для этого в vim нажмем Ctrl+c, и нажмем букву V. Теперь мы можем выделить весь документ построчно, после чего вставить конфигурацию написанную выше. Сохранить документ можно так: Ctrl+c, потом :wq

Теперь проверьте ваш config/database.yml файл, правильно ли указаны настройки подключения к базе данных. Должно быть:

production:   adapter: postgresql   encoding: unicode   database: app_name   pool: 5   username: app_name   password: db-pass-word 

Теперь необходимо внести изменения в конфиг PostgreSQL:

sudo nano /etc/postgresql/9.3/main/pg_hba.conf 

В этой строчке надо поменять «peer» на «md5»:

local   all             postgres                                peer 

Теперь еще нужно доустановить JS Runtime, я использовал nodejs:

sudo apt-get install nodejs 

Теперь переходим в папку с нашим приложением и выполняем миграцию бд и компиляцию assets:

rake db:migrate RAILS_ENV=production rake assets:precompile RAILS_ENV=production 

Перезагружаем nginx и сервер должен работать:

sudo service nginx restart 

ссылка на оригинал статьи http://habrahabr.ru/post/231661/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *