Масштабирование приложения 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 должен принимать подключения удалённой машины, на которой установлено приложение 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: , , , , ,

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