SSRS – Stupid simple rails server

В этом рассказе я собираюсь записать себе на память (а может и кому-то пригодится) процесс установки и деплоя rails приложения на сервер. Или даже не так, рассказ о том как настроить сервер за 10 минут пренебрегая всеми правилами безопасности. На самом деле если хочется быстрее сервер и меньше возни, то удобнее конечно взять Heroku. Или говорят Docker тоже в этом плане удобен. Так что будем считать что этот текст вот совсем для новичков.

В качестве сервера Debian 8 64 bit, приложение на Rails 5 и база данных конечно Postgres.

Шаг 1 – локальное окружение

Установка локального окружения. Так как у меня Mac, то и указания будут именно к этой системе.

ruby
Установить rvm , и уже при помощи rvm установка последней версии ruby.

postgres
Для Mac есть замечательная утилита postgres.app, которая решает вообще все проблемы с обслуживанием и установкой Postgres. Серьёзно, просто ставьте её и поехали дальше. Уже на сервере настроим полноценный Postgres установленный при помощи apt. А пока Postgres.app

rails
К этому моменту Вы можете ставить ruby-гемы и пожалуй пора парочку установить.

rails + postgres
Как я уже говорил Postgres.app снимает все хлопоты по настройке Postgres. Откройте свежесозданный проект в текстовом редакторе, найдите файл config/database.yml и отредактируйте его так:

В консоли откройте папку приложения и выполните следующую команду:

Убедитесь что всё работает

Локальное окружение готово. Давайте добавим ему немного функциональности.

Шаг 2

На самом деле функциональности будет минимум, всё что надо будет сделать – запустить rails-scaffolder.

Можно проверить функциональность локально, запустите rails s, и откройте в браузере адрес http://localhost:3000/posts

Если вы ещё не сделали git-проект, то сейчас самое время. Созданный репозитарий отправьте в любое git-хранилище. Мне нравится Gitlab.

Шаг 3 – настройка сервера

Регистрируйте сервер, площадка на ваш выбор, я буду использовать simple cloud. Чтобы было удобнее добавьте свой ssh ключ в authorized_keys на сервере, но это необязательно.

Начать, наверное, следует с обновления сервера

Далее установить rvm и postgres.

rvm – установка

nvm – установка

Для компиляции ассетов на сервере необходим node, проще всего поставить при помощи nvm (node version manager). Установка описана здесь. На момент написания выглядело это так:

Postgres – установка

У меня были проблемы с локалями, пришлось в ~/.bashrc внести эти строки

Применить эти настройки source ~/.basrch, и выполнить dpkg-reconfigure locales, выбрав en_US.UTF-8.

Postgres – настройка
Сейчас будет совершенно преступление, нет серьёзно. Как водится true-программисты на способ ниже будут сильно ругаться и возмущаться. Для того чтобы упростить доступ к БД, мы сделаем беспарольный вход от имени пользователя postgres. Ещё раз зачему, принято (и наверное так и надо делать), на каждый проект отдельный пользователь, свои пароли и прочее. Но если не терпится, то вот рецепт.

Пропишите в настройках доступка к postgres, которые можно найти примерно по такому адресу /etc/postgresql/9.4/main/pg_hba.conf следующую строчку:

И перезапустите postgres – /etc/init.d/postgresql restart. Можно протестировать, что всё прошло хорошо, попробуйте авторизоваться в интерактивную консоль psql -U postgres -h 127.0.0.1

В будущем на сервере понадобится созданная база данных. Создайте её сейчас:

Nginx – установка

Для запуска приложения есть все необходимые ингредиенты – ruby и БД.

Capistrano

Перейдём обратно в локальный проект, это необходимо чтобы настроить Capistrano (кстати, Mina тоже ok). Инструмент для отправки приложения на сервера.

В Gemfile раскомментируйте строку gem 'capistrano-rails', group: :development и установите. После установки будут доступны новые команды, список доступен из консоли при помощи команды cap -T

Начальная инициализация capistrano – cap install. Будет добавлено несколько файлов.

Capistrano – настройка

Ещё один камень в огород безопасности, мы будем использовать пароль к репозитарию в настройках capistrano.) Откройте config/deploy.rb , дополните адресом git-репозитария, с логином и паролем.

Укажите папку на сервере в которую будет скопировано приложение

В файл /config/deploy/production.rb внесите данные о вашем сервере, например так:

Перед выполнением cap production deploy, необходимо отправлять свои изменения в git-репозитарий. Сейчас если из папки проекта запустить cap production deploy, то всё должно пройти гладко. Ну точнее проект просто будет скопирован в папку на сервере. Пока что ни установки гемов, ни миграций. Всё впереди.

Capistrano – настройка 2

У Capistrano есть ряд дополнительных модулей упрощающих деплой приложения. Добавьте их в Gemfile.

Далее замените содержимое в Capfile, подключая все эти модули

# Loads custom tasks from `lib/capistrano/tasks’ if you have any defined.
Dir.glob(‘lib/capistrano/tasks/*.rake’).each { |r| import r }

В /config/production.rb раскомментируйте строку set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'public/system') и добавьте

Если теперь выполнить cap production deploy, вы увидите как установятся все гемы, пройдут миграции, и сервере puma запустится в режиме демона.

Capistrano – настройка nginx

Так как на сервере Nginx уже установлен, надо добавить проект в sites-enabled папку nginx.

Для этого добавьте в Capifile строку

Это создаст и отправит необходимые конфигы на сервер.

Кажется, всё.

1 thought on “SSRS – Stupid simple rails server”

Leave a Reply

Your email address will not be published. Required fields are marked *