
В прошлой статье мы говорили о настройке Rails-окружения для разработки. Теперь пришло время для настройки боевого сервера.
Для этого необходимо зарегистрироваться на DigitalOcean (реферальная ссылка, после регистрации вы получити $10 на свой счет) и создать Droplet. В качестве ОС необходимо выбрать Ubuntu 14.04.
Настройка сервера
Заходим на сервер под root:
$ ssh root@[IP-адрес сервера]В первую очередь создаем нового пользователя:
root@droplet:~# adduser deployДобавляем его в группу sudo, чтобы у него были привилегии root:
root@droplet:~# gpasswd -a deploy sudoЗатем настраиваем вход на сервер по ssh-ключам. Для этого генерируем ключ на локальном компьютере:
$ ssh-keygen -t rsaЗаходим на сервер под новым пользователем:
root@droplet:~# su - deployСоздаем директорию ssh:
deploy@droplet:~$ mkdir .ssh
deploy@droplet:~$ chmod 700 .sshКопируем публичный ключ с локального компьютера:
$ cat ~/.ssh/id_rsa.pubИ сохраняем его в файл ~/.ssh/authorized_keys на сервере. Далее меняем права на этот файл и переключаемся снова на пользователя root:
deploy@droplet:~$ chmod 600 .ssh/authorized_keys
deploy@droplet:~$ exitДля большей безопасности, запрещаем вход на сервере через ssh под пользователем root. Для этого открываем файл /etc/ssh/sshd_config и находим следующую строчку:
PermitRootLogin yesМеняем её на:
PermitRootLogin noИ перезапускаем ssh:
root@droplet:~# service ssh restartОбратно заходим под пользователем deploy:
root@droplet:~# su - deployПриступаем к настройке временной зоны. Выбираем из списка “Europe/Moscow”:
deploy@droplet:~$ sudo dpkg-reconfigure tzdataНастраиваем локаль, для этого открываем файл /etc/default/locale и добавляем туда следующее:
LANGUAGE='en_US.UTF-8'
LC_ALL='en_US.UTF-8'
LANG='en_US.UTF-8'
LC_TYPE='en_US.UTF-8'Запускаем команду перенастройки:
deploy@droplet:~$ sudo locale-gen en_US.UTF-8
deploy@droplet:~$ sudo dpkg-reconfigure localesУстановка ПО
С настройкой сервера мы закончили, приступаем к установке ПО. Устанавливаем ntp для автоматической синхронизации времени:
deploy@droplet:~$ sudo apt-get update
deploy@droplet:~$ sudo apt-get install ntpДалее устанавливаем Redis и PostgreSQL:
deploy@droplet:~$ sudo apt-get install redis-server postgresql libpq-devУстановка Ruby
Устанавливаем необходимые зависимости:
deploy@droplet:~$ sudo apt-get install git curl autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-devВ качестве менеджера версий Ruby, мы будем использовать rbenv. После установки перезапускаем текущую сессию bash:
deploy@droplet:~$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
deploy@droplet:~$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
deploy@droplet:~$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
deploy@droplet:~$ source ~/.bashrcУстанавливаем дополнительные плагины, необходимые для установки Ruby:
deploy@droplet:~$ git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)/plugins/ruby-build"
deploy@droplet:~$ git clone https://github.com/rbenv/rbenv-vars.git "$(rbenv root)/plugins/rbenv-vars" Находим последнюю стабильную версию Ruby:
deploy@droplet:~$ rbenv install -lНа момент написания статьи - это 2.2.3:
2.2.0
2.2.1
2.2.2
2.2.3
2.3.0-devУстанавливаем Ruby и перезапускаем текущую сессию bash:
deploy@droplet:~$ rbenv install 2.2.3
deploy@droplet:~$ rbenv global 2.2.3
deploy@droplet:~$ source ~/.bashrcУстанавливаем и настраиваем Bundler, чтобы он хранил все гемы в директори проекта:
deploy@droplet:~$ gem install bundler
deploy@droplet:~$ bundle config --global path vendor/bundle
deploy@droplet:~$ bundle config --global bin vendor/bundle/binУстановка Nginx и Passenger
В качестве веб-сервера у нас будет выступать Nginx, а сервера приложений - Passenger. Для установки необходимо добавить PGP-ключ:
deploy@droplet:~$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7Создаем файл /etc/apt/sources.list.d/passenger.list и добавляем в него новый источник:
deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty mainМеняем права на этот файл:
deploy@droplet:~$ sudo chown root: /etc/apt/sources.list.d/passenger.list
deploy@droplet:~$ sudo chmod 600 /etc/apt/sources.list.d/passenger.listОбновляем список пакетов и устанавливаем Nginx и Passenger:
deploy@droplet:~$ sudo apt-get update
deploy@droplet:~$ sudo apt-get install nginx-extras passengerПереходим к настройке Nginx, открываем файл /etc/nginx/nginx.conf и находим там следующие строчки:
# passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
# passenger_ruby /usr/bin/ruby;Их необходимо заменить на:
passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /usr/local/bin/ruby;Создание тестового проекта
Теперь остается только проверить, что все работает, для этого создадим тестовый проект. Для этого нам понадобится установить Ruby on Rails и SQLite:
deploy@droplet:~$ gem install rails --no-document
deploy@droplet:~$ sudo apt-get install libsqlite3-devСоздаем новый проект:
deploy@droplet:~$ rails new testapp --skip-bundle
deploy@droplet:~$ cd testappДля запуска тестового проекта нам понадобится JavaScript runtime библиотека. Открываем Gemfile и находим строчку:
# gem 'therubyracer', platforms: :rubyЗаменяем её на:
gem 'therubyracer', platforms: :rubyЗапускаем установку зависимостей проекта:
deploy@droplet:~$ bundleДля того чтобы наш тестовый проект был доступен по IP-адресу, необходимо отключить настройки по умолчанию у Nginx. Для этого открываем файл /etc/nginx/sites-available/default и находим следующие строчки:
listen 80 default_server;
listen [::]:80 default_server;Меняем их на:
# listen 80 default_server;
# listen [::]:80 default_server;Создаем файл настроек для тестового проекта:
deploy@droplet:~$ sudo touch /etc/nginx/sites-available/testappИ добавляем туда следующее содержимое:
server {
listen 80 default_server;
server_name www.mydomain.com;
passenger_enabled on;
passenger_app_env development;
passenger_ruby /home/deploy/.rbenv/shims/ruby;
root /home/deploy/testapp/public;
}Создаем символьную ссылку для этого файла:
deploy@droplet:~$ sudo ln -s /etc/nginx/sites-available/testapp /etc/nginx/sites-enabled/testappПерезапускаем nginx:
deploy@droplet:~$ sudo nginx -s reloadНа этом все, настройка сервера завершена. Теперь можно открыть в браузере страницу с IP-адресом вашего сервера и увидеть, что все работает.
Источники: