Масштабирование приложения Ruby on Rails: настройка сервера PostgreSQL
В предыдущих руководствах из этой серии речь шла о масштабировании приложения Ruby on Rails и настройке сервера MySQL. Данное руководство поможет настроить сервер PostgreSQL для поддержки приложения Ruby-on-Rails.
Примечание: Это руководство входит в серию, но выполнять предыдущие части необязательно. Вы можете просто установить PostgreSQL на один сервер с приложением Rails и настроить их с помощью этого руководства. Руководство выполнено на сервере Ubuntu.
Как выбрать базу данных для приложения Ruby on Rails?
Фреймворк для разработки веб-приложений Ruby on Rails предоставляет широкую поддержку серверов баз данных. В большинстве случаев используются реляционные БД. Однако некоторые приложения требуют NoSQL.
В самом начале разработки приложения Rails можно использовать SQLite, СУБД по умолчанию. Однако производительности SQLite не достаточно для поддержки приложения в среде производства с высоким трафиком. Потому вместо неё рекомендуется использовать полнофункциональную реляционную СУБД.
Выбирая систему управления базами данных (т.е. сервер баз данных), нужно учитывать потребности и тип приложения.
Примечание: Больше информации о СУБД и моделях управления данными можно найти в следующих статьях:
Структура сервера
Прежде чем приступить к настройке, нужно понять, как в результате будет выглядеть структура развёртывания.
Балансировщики нагрузки
Ранее, после создания балансировщика нагрузки/обратного прокси, получилась такая структура:
---
DEPLOYMENT STRUCTURE
...+-------------------------------+
...| |
...| LOAD-BALANCER / REVERSE PROXY |
...| |
...+-------------------------------+
.....................+
.....................|
.....................|
+---------------+ | +---------------+
| APP SERVER | | | APP SERVER |
|---------------| | |---------------|
| | | | |
| RAILS |<---+--->| RAILS |
| | | |
+---------------+ +---------------+
Сервер базы данных
Теперь нужно добавить в структуру общедоступный сервер БД, после чего она будет выглядеть так:
...+-------------------------------+
...| |
...| LOAD-BALANCER / REVERSE PROXY |
...| |
...+-------------------------------+
.....................+
.....................|
.....................|
+---------------+ | +---------------+
| APP SERVER | | | APP SERVER |
|---------------| | |---------------|
| | | | |
| RAILS |<---+--->| RAILS |
| | | |
+---------------+ +---------------+
........+ +
........| |
........| +-------------------+ |
........| | DATABASE SERVER | |
........| |-------------------| |
........| | | |
........| | PostgreSQL, | |
........+->| PostgreSQL, |<-+
...........| etc. |
...........| |
...........+-------------------+
Добавление сервера баз данных PostgreSQL
Подготовка сервера
Обновите индекс пакетов и устаревшие приложения:
aptitude update
aptitude -y upgrade
Установите пакет build-essential:
aptitude install -y build-essential
Запустите следующую команду, чтобы установить дополнительные инструменты:
aptitude install -y cvs subversion git-core mercurial
Установка PostgreSQL
Сначала нужно добавить репозиторий PostgreSQL (9.3) в список пакетов aptitude.
nano /etc/apt/sources.list.d/pgdg.list
Скопируйте и вставьте в новый файл следующее:
deb http://apt.postgresql.org/pub/repos/apt/ saucy-pgdg main
Сохраните и закройте файл.
Примечание: В руководстве используется Ubuntu 13. Если вы используете другую версию системы, замените saucy именем вашего дистрибутива.
Обновите индекс:
aptitude update
aptitude -y upgrade
Теперь можно установить PostgreSQL. Запустите:
aptitude install postgresql-9.3 pgadmin3
Настройка PostgreSQL
Изменение пароля пользователя
Для начала нужно изменить стандартный пароль.
Для этого запустите команду:
sudo -u postgres psql postgres
Командная строка изменится:
postgres=#
После этого введите:
\password postgres
Введите и подтвердите новый пароль. Чтобы выйти, нажмите CTRL+Z или введите \q.
Создание ролей и БД
Авторизуйтесь в PostgreSQL:
sudo -u postgres psql
Чтобы создать роль и базу данных для приложения, используйте следующие команды:
# Общий синтаксис: CREATE USER [user name] WITH PASSWORD '[password]';
# Например:
CREATE USER rails_myapp_user WITH PASSWORD 'pwd';
# Общий синтаксис: CREATE DATABASE [database name] OWNER [user name];
# Например:
CREATE DATABASE rails_myapp OWNER rails_myapp_user;
Закройте командную строку (CTRL+Z или \q)
Примечание: Больше информации о ролях и управлении PostgreSQL можно найти в руководствах:
- Управление таблицами PostgreSQL на облачном сервере
- Использование ролей и управление доступом в PostgreSQL
Настройка удалённого доступа
Сервер PostgreSQL должен принимать подключения удалённой машины, на которой установлено приложение Rails.
Чтобы отредактировать конфигурационный файл PostgreSQL, postgresql.conf, введите:
nano /etc/postgresql/9.3/main/postgresql.conf
Сервер PostgreSQL должен прослушивать соединения IP-адреса сервера приложения. Найдите в файле следующую строку:
#listen_addresses = 'localhost'
Замените её:
listen_addresses = '*'
Сохраните и закройте файл (CTRL+X, Y).
Теперь нужно настроить PostgreSQL для поддержки других соединений. Отредактируйте конфигурационный файл pg_hba.conf:
nano /etc/postgresql/9.3/main/pg_hba.conf
Найдите в файле следующий раздел:
# Put your actual configuration here
# ..
Вставьте в него следующие параметры:
# TYPE DATABASE USER ADDRESS METHOD
host all all 0.0.0.0/0 md5
Сохраните и закройте файл.
Перезапустите PostgreSQL:
service postgresql restart
# * Restarting PostgreSQL 9.3 database server
# ...done.
Настройка приложения Rails
Теперь нужно настроить сервер приложения Rails для взаимодействия с сервером баз данных.
Настройка database.yml
Настройки баз данных приложений Rails хранятся в файле database.yml.
Откройте файл в текстовом редакторе:
# Make sure to enter your application deployment directory
# Example:
# cd /var/www/my_app
nano config/database.yml
В нём настройки баз данных разделены по средам. Чтобы настроить базу данных для производства, найдите раздел production.
Замените блок кода production: YML следующим кодом:
# Например:
# production:
# adapter: postgresql
# encoding: utf8
# database: [database name]
# username: [user name]
# password: [password]
# host: [server IP address]
# port: [port number]
# protocol: [protocol]
# pool: [connection pool]
production:
adapter: postgresql
encoding: utf8
database: rails_myapp
username: rails_myapp_user
password: pwd
host: 128.199.233.36
port: 5432
pool: 10
Примечание: Замените условные данные своими данными.
Аргумент pool задаёт максимальное количество одновременных подключений к базе данных. Оцените потребности приложения и установите соответствующее значение.
Сохраните и закройте файл.
Установка gem-а PostgreSQL
Отредактируйте Gemfile:
nano Gemfile
Добавьте в него следующую строку:
gem 'pg'
Сохраните и закройте файл.
Чтобы установить новый gem, используйте bundle.
bundle install
Теперь приложение Rails может взаимодействовать с сервером баз данных PostgreSQL.
Tags: NoSQL, PostgreSQL, Rails, Ruby, Ruby on Rails, Ubuntu 13