Гид по технологиям

Установка Ruby on Rails с PostgreSQL на Ubuntu 20.04

• 8 min read • Разработка • Обновлено 26 Nov 2025
Установка Ruby on Rails с PostgreSQL на Ubuntu 20.04
Установка Ruby on Rails с PostgreSQL на Ubuntu 20.04

TL;DR

В этом руководстве пошагово показано, как установить RVM, Ruby 2.7.1, Node.js и Yarn, Rails и PostgreSQL на Ubuntu 20.04, создать новый проект Rails с базой PostgreSQL и простое CRUD-приложение через scaffold. Следуйте шагам, проверяйте вывод команд и используйте разделы «Отладка» при ошибках.

Важно: используйте отдельного системного пользователя для разработки и храните пароли и секреты в безопасном месте (файлы .env или менеджеры секретов).

Ruby on Rails — логотип и заголовок руководства

О чём эта инструкция

Это практическое руководство научит вас развертывать современную среду разработки Ruby on Rails на Ubuntu 20.04 (Focal Fossa). Мы пройдём установку RVM (Ruby Version Manager), Ruby, Node.js/Yarn (JS runtime для asset pipeline), обновим RubyGems, установим Rails, настроим PostgreSQL и создадим первый проект Rails с использованием PostgreSQL, а затем простой CRUD через scaffold.

Кому подойдёт: начинающим и инженерам, настраивающим локальную или тестовую VM/сервер для Rails-проектов.

Что потребуется (предварительные условия)

  • Ubuntu 20.04 LTS (Focal Fossa)
  • Минимум 2 ГБ ОЗУ, ~25 ГБ свободного места и 2 CPU (минимум для комфортной локальной разработки)
  • Доступ с правами root или sudo
  • Подключение к интернету для загрузки пакетов

Быстрая карта действий

  • Установить RVM и Ruby 2.7.1
  • Установить Node.js и Yarn
  • Обновить RubyGems
  • Установить Rails (через gem)
  • Установить PostgreSQL и создать роль/базу
  • Создать Rails-проект с опцией -d postgresql
  • Настроить config/database.yml и выполнить миграции
  • Создать scaffold (CRUD) и проверить работу на Puma

Шаг 0 — Перед началом: рекомендации по безопасности и окружению

  • Рекомендуется работать не под root: создайте отдельного пользователя для разработки и добавьте его в группу rvm после установки.
  • Храните пароли в файлах конфигурации вне контроля версий и используйте переменные окружения для секретов в production.
  • На production-серверах используйте менеджеры процессов (systemd, Docker, Kubernetes) и web-серверы/прокси (nginx) перед Puma.

Шаг 1 — Установить RVM (Ruby Version Manager)

RVM управляет версиями Ruby на одном сервере и удобен для разработки. В этом шаге мы импортируем GPG-ключи, запустим официальный инсталлятор и загрузим скрипт rvm в сессию.

Импорт GPG-ключей RVM:

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 \  
7D2BAF1CF37B13E2069D6956105BD0E739499BDB

Установка RVM и Ruby по умолчанию (инсталлятор сам установит необходимые пакеты):

curl -sSL https://get.rvm.io | bash -s stable --ruby

После окончания установки загрузите RVM в текущую сессию:

source /usr/local/rvm/scripts/rvm

Проверьте, что команда rvm доступна:

rvm version

Установка RVM в терминале

Если вы планируете запускать команды под root или другим пользователем, добавьте пользователя в группу rvm:

usermod -a -G rvm <имя_пользователя>

Важно: после добавления в группу перелогиньтесь или выполните newgrp rvm, чтобы изменения вступили в силу.


Шаг 2 — Установить и настроить Ruby

В этом руководстве мы используем Ruby 2.7.1 (совместим с Rails 6.x).

Установите Ruby 2.7.1 через rvm:

rvm install ruby-2.7.1

Сделайте установленную версию Ruby версией по умолчанию:

rvm --default use ruby-2.7.1

Проверьте версию Ruby:

ruby --version

Установка Ruby с помощью RVM

Отладка: если установка останавливается из-за отсутствия зависимостей, установите необходимые пакеты сборки (gcc, make, libssl-dev и т.д.). Для Ubuntu это можно сделать через apt.


Шаг 3 — Установить Node.js и Yarn (JS runtime для Rails)

Rails использует JavaScript runtime для asset pipeline и некоторых современных библиотек. В этом руководстве мы устанавливаем Node.js (через Nodesource) и Yarn (официальный репозиторий Yarn).

Установите зависимости компиляции (если их нет):

sudo apt install gcc g++ make

Добавьте репозиторий NodeSource (пример для Node 14):

curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -

Добавьте GPG-ключ и репозиторий Yarn:

curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -  
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list

Обновите кеш пакетов и установите nodejs и yarn:

sudo apt update
sudo apt install yarn nodejs

Проверьте версии:

node --version
yarn --version

Установка Node.js и Yarn — вывод терминала

Примечание: для некоторых окружений достаточно пакета nodejs из стандартного репозитория Ubuntu, но для актуальных версий лучше использовать Nodesource.


Шаг 4 — Обновить RubyGems и отключить документацию при установке gem’ов

RubyGems управляет установкой gem-пакетов.

Обновление менеджера gem:

gem update --system

Пример вывода (сокращённо):

Updating rubygems-update
Fetching rubygems-update-3.1.3.gem
Successfully installed rubygems-update-3.1.3
...
RubyGems system software updated

Отключение установки документации для gem’ов (ускоряет установку):

echo "gem: --no-document" >> ~/.gemrc

Проверка версии gem:

gem -v

Шаг 5 — Установить Rails

Установим Rails через gem. Это установит текущую стабильную версию, совместимую с вашим Ruby.

gem install rails

Проверка версии Rails:

rails --version

В примере исходного руководства было установлено Rails 6.0.3.

Установка Rails через gem — вывод терминала


Шаг 6 — Установить и настроить PostgreSQL

Мы используем PostgreSQL как production-ready DB. Установим сервер и клиентские библиотеки, затем создадим роль для приложения.

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

Запустите и включите сервис PostgreSQL:

systemctl start postgresql
systemctl enable postgresql

Создайте роль и задайте пароль (в примере роль называется hakase_dev):

sudo -i -u postgres psql
create role hakase_dev with createdb login password 'hakasepass';
\q

Проверьте список ролей в psql:

\du

Список ролей PostgreSQL в psql

Безопасность: не используйте в production простые пароли в явном виде. Применяйте менеджеры секретов и строгие права доступа.


Шаг 7 — Создать новый проект Rails с PostgreSQL

По умолчанию Rails использует SQLite. Создадим проект с явным указанием PostgreSQL.

Создание проекта:

rails new hakaseapp -d postgresql

Перейдите в каталог проекта и отредактируйте конфигурацию подключения к БД:

cd hakaseapp/
vim config/database.yml

В секции development и test укажите:

  host: localhost
  port: 5432
  username: hakase_dev
  password: hakasepass

Создайте и прогоните миграции БД:

rails db:setup
rails db:migrate

Миграция базы данных Rails — вывод терминала

Запустите сервер Puma на всех интерфейсах и порте 8080 (пример для демонстрации на VM):

rails s -b 0.0.0.0 -p 8080

Пример URL (локальная сеть): http://10.5.5.32:8080/

Запуск Rails на Puma — вывод терминала

Откройте браузер по адресу сервера и убедитесь, что видите стартовую страницу Rails:

Страница по умолчанию Rails index.html


Шаг 8 — Создать простой CRUD через scaffold

Scaffold генерирует модель, контроллер, миграции и базовые view.

Генерация ресурса Post с полями title и body:

rails g scaffold Post title:string body:text

Примените миграции:

rake db:migrate

Запустите сервер и откройте страницу /posts:

rails s -b 0.0.0.0 -p 8080

URL пример: http://10.5.5.32:8080/posts

CRUD приложение — список постов

После заполнения формы вы увидите сохранённый пост в интерфейсе.


Отладка и типичные ошибки

  • “Could not locate Gemfile” — убедитесь, что вы находитесь в корне проекта и выполнили bundle install.
  • Ошибки при установке Ruby — установите системные зависимости: build-essential, libssl-dev, libreadline-dev, zlib1g-dev.
  • Ошибка подключения к PostgreSQL — проверьте, что service postgresql запущен, учётные данные совпадают, а в pg_hba.conf разрешены нужные методы аутентификации.
  • Permission denied для сокета PostgreSQL — запуск psql под тем же пользователем, что и сервер, или используйте TCP (host и порт).

Совет: при неясных ошибках просмотрите логи Rails (log/development.log) и системный журнал (journalctl -u postgresql).


Альтернативные подходы и когда их использовать

  • rbenv вместо RVM — проще и более «минималистично», если не нужен функционал rvm (gemset’ы, более гибкое управление окружениями).
  • System Ruby (apt) — подходит для простых сценариев и CI, но обычно версии устаревают.
  • Docker — хорош для изолированной и воспроизводимой среды; полезен для продакшена и CI/CD.
  • Использовать SQLite для быстрых прототипов (локально) и PostgreSQL в staging/production.

Ментальные модели и правила принятия решений

  • Для разработки: используйте RVM/rbenv и локальную БД, чтобы быстро тестировать.
  • Для production: контейнеризация + управляемая СУБД (RDS/managed Postgres) и секреты в менеджере.
  • Всегда разделяйте окружения (development/test/production) и храните конфигурации вне кода.

Контрольный список перед развертыванием в production

  • Перенести секреты в менеджер секретов
  • Настроить SSL и обратный прокси (nginx)
  • Настроить systemd unit или process manager для Puma
  • Настроить бэкапы PostgreSQL и мониторинг
  • Включить миграции в pipeline CI/CD и тесты

Роль‑ориентированные задачи

  • Разработчик:
    • Настроить RVM/rbenv, установить Ruby и зависимости
    • Запустить локальную БД или подключиться к dev/staging
    • Написать и прогнать тесты
  • Системный администратор:
    • Установить PostgreSQL, настроить бэкапы и мониторинг
    • Настроить reverse proxy (nginx) и SSL
    • Настроить процессный менеджер для Puma

Тестовые сценарии и критерии приёмки

  • Установка завершилась без ошибок и команды rvm, ruby, rails, node и yarn доступны.
  • rails new создал проект, rails db:setup и rails db:migrate прошли успешно.
  • Приложение отвечает по HTTP: GET / возвращает код 200 и страницу Rails.
  • CRUD через /posts создает/редактирует/удаляет записи и сохраняет их в PostgreSQL.

Совместимость и миграционные заметки

  • В примере используется Ruby 2.7.1 и Rails 6.x. Если планируете переход на Ruby 3.x или Rails 7, проверьте совместимость гемов (особенно native-extensions и database adapters).
  • Для миграции с SQLite на PostgreSQL проверьте типы полей и кодировку (UTF-8) перед переносом данных.

Полезные команды для повседневных задач

  • Список запущенных процессов Rails/Puma: ps aux | grep puma
  • Перезапуск PostgreSQL: sudo systemctl restart postgresql
  • Запуск консоли Rails: rails console
  • Вызов rake задач: rails db:migrate, rails db:seed

Краткое руководство по безопасности и конфиденциальности

  • Не храните пароли и секреты в репозитории. Используйте переменные окружения или secrets management.
  • Ограничьте доступ к базе данных по сети и используйте правильные правила в pg_hba.conf.
  • Обновляйте операционную систему и пакеты безопасности.

Мини-справочник (глоссарий, 1 строка)

  • RVM — менеджер версий Ruby, позволяющий устанавливать и переключать Ruby.
  • Gem — пакет Ruby, устанавливаемый через RubyGems.
  • Rails — фреймворк на Ruby, реализующий MVC и ускоряющий разработку веб-приложений.
  • Puma — сервер приложений Ruby, используемый для запуска Rails-приложений.
  • Scaffold — генератор Rails, создающий модель, контроллер, представления и маршруты для CRUD.

Шаблон проверки перед выпуском (SOP)

  1. Собрать зависимости: bundle install, yarn install
  2. Прогнать тесты: rails test (или rspec)
  3. Прогнать миграции в staging: rails db:migrate
  4. Проверить функциональность приложений (smoke tests)
  5. Развернуть на production и мониторить логи

Краткое резюме

  • Вы установили RVM, Ruby 2.7.1, Node.js и Yarn, Rails и PostgreSQL на Ubuntu 20.04.
  • Создали проект Rails с PostgreSQL и простое CRUD-приложение через scaffold.
  • Примеры команд, типичные ошибки и рекомендации по безопасности помогут адаптировать инструкцию под тестовую или production-среду.

Если нужно, могу подготовить Dockerfile и docker-compose.yml для быстрого развёртывания аналогичной среды в контейнерах.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро