介绍
此前,我们已经覆盖部署的Ruby-on-Rails应用程序(如各种方式与Unicorn和Nginx的滑轨 , 与客运及Nginx的滑轨 ),建立一个可扩展的服务器结构,并且学会如何将连接专用的MySQL实例到我们的Rails应用服务器。
在此安装我们DigitalOcean的缩放-Rails的系列,我们要找出如何建立一个PostgreSQL的从头服务器作为数据库持久层的Ruby-on-Rails的Web应用程序使用。 接下来,我们将通过进行必要的配置更改来了解如何将Rails应用程序服务器与数据库连接。
注:本文,正如我们已经提到的,是我们扩大规模的Rails系列的一部分,由一个专门的Ubuntu的VPS安装PostgreSQL服务器。 然而,你可以非常好地安装PostgreSQL,以这里解释完全相同的方式,在一个单一的虚拟服务器与Rails应用程序一起使用。 为了看到如何使用Unicorn或Passenger在单个Droplet上部署Rails,请单击第一个段落中提供的链接,然后从这里继续以形成数据库层。
词汇表
选择数据库
2.服务器设置结构
- 负载平衡多个应用程序服务器
- 数据库服务器层
3.将数据库服务器添加到部署设置
- 准备服务器
4.安装PostgreSQL
- 添加PostgreSQL软件库
- 安装PostgreSQL
5.配置PostgreSQL
- 更改默认
postgres
用户密码 - 创建角色和数据库
- 启用远程连接
6.配置Rails应用程序
- 配置
database.yml
钢轨 - 获取
PostgreSQL
Gem
选择数据库
Ruby on Rails应用程序开发框架为数据库服务器提供了大量的支持。 对于大多数应用程序,关系数据库管理系统是要走的路。 但是,一些可能需要一个非关系的,无模式的NoSQL数据库服务器 - 而不是关系型数据库服务器或两者一起运行。
当您开始在自己的开发计算机上使用Rails时,最简单也可能是最合理的方法是使用一个有能力但基本的数据库实现[例如SQLite库]。 然而,对于现实世界的部署,机会是SQLite将不足以处理您的应用程序负载[因此需要一个成熟的RDBMS]。
根据您的需求和应用类型,你需要在数据库管理系统(如数据库服务器)决定创建您的应用程序部署建立数据库层 。
对于关系数据库,一些更流行的选择是:
- PostgreSQL及其派生:
最流行和常用的RDBMS和相关的,分叉项目。
- PostgreSQL:
最先进的,SQL兼容和开源的目标RDBMS。
对于非关系数据库服务器:
- 基于列:
Cassandra,HBase等
- 文件:
MongoDB,Couchbase等
- 图形:
OrientDB,Neo4J等
为了在继续部署数据库服务器之前做出明确和长期的决定,您可能有兴趣阅读我们关于此主题的文章:
- 数据库简介:
- 关系:
- NoSQL:
服务器设置结构
在我们开始构建数据库层之前,让我们看看我们的最终部署设置将是什么样子。
负载平衡多个应用程序服务器
以前,在使用多个应用程序服务器创建负载平衡器/反向代理之后,这就是我们到底要做什么:
Three droplets with each having a distinct role:
------------------------------------------------
1 x Load-Balancer / Reverse-Proxy
2 x Application Servers Running Your Rails Web-Application / API
---
DEPLOYMENT STRUCTURE
+-------------------------------+
| |
| LOAD-BALANCER / REVERSE PROXY |
| |
+-------------------------------+
+
|
|
+---------------+ | +---------------+
| APP SERVER | | | APP SERVER |
|---------------| | |---------------|
| | | | |
| RAILS |<---+--->| RAILS |
| | | |
+---------------+ +---------------+
数据库服务器层
为了拥有一个中央可访问的数据库服务器(例如一个RDBMS和/或NoSQL数据库),我们将添加一个第4个元素到我们的服务器设置:
Four droplets:
------------------------------------------------
1 x Load-Balancer / Reverse-Proxy
2 x Application Servers Running Your Rails Web-Application / API
1 x Database Server (e.g. PostgreSQL, PostgreSQL, MongoDB etc.)
+-------------------------------+
| |
| LOAD-BALANCER / REVERSE PROXY |
| |
+-------------------------------+
+
|
|
+---------------+ | +---------------+
| APP SERVER | | | APP SERVER |
|---------------| | |---------------|
| | | | |
| RAILS |<---+--->| RAILS |
| | | |
+---------------+ +---------------+
+ +
| |
| +-------------------+ |
| | DATABASE SERVER | |
| |-------------------| |
| | | |
| | PostgreSQL, | |
+->| PostgreSQL, |<-+
| etc. |
| |
+-------------------+
将数据库服务器添加到部署设置
在本文中,我们将在Ubuntu 13 VPS上创建和配置一个PostgreSQL数据库管理服务器。
让我们开始!
准备服务器
更新软件源列表并升级日期应用程序:
aptitude update
aptitude -y upgrade
运行以下命令来安装build-essential
包:
aptitude install -y build-essential
运行以下命令以安装一些其他常用工具:
aptitude install -y cvs subversion git-core mercurial
安装PostgreSQL
添加PostgreSQL软件库
为了下载最新版本的PostgreSQL( 9.3
),我们需要将存储库添加到aptitude
源列表。
运行以下命令以创建PostgreSQL的源列表:
nano /etc/apt/sources.list.d/pgdg.list
复制并粘贴以下内容:
deb http://apt.postgresql.org/pub/repos/apt/ saucy-pgdg main
按CTRL + X并用Y确认保存并退出。
注意:我们假设你正在使用Ubuntu 13(无礼)的工作。 如果您使用的是不同的版本,运行lsb_release -c
找出你的发行版的名字,取而代之的是saucy
在上面的说明。
更新源列表以包含新添加项:
aptitude update
aptitude -y upgrade
安装PostgreSQL
因为现在我们有访问源,使用默认的包管理aptitude
(或apt-get
),我们就可以直接安装PostgreSQL的最新版本。
运行以下命令来安装PostgreSQL诉9.3
:
aptitude install postgresql-9.3 pgadmin3
配置PostgreSQL
更改默认postgres
用户密码
为了使用数据库,我们需要更改默认密码。
运行以下命令启动该过程:
sudo -u postgres psql postgres
当你看到提示类似postgres=#
键入以下内容:
\password postgres
输入您的密码,重新输入一遍验证,然后按Ctrl + Z或键入\ q退出。
创建角色和数据库
使用以下命令登录PostgreSQL:
sudo -u postgres psql
并运行下面给出创建角色和数据库被Rails的使用说明进行操作:
# Usage: CREATE USER [user name] WITH PASSWORD '[password]';
# Example:
CREATE USER rails_myapp_user WITH PASSWORD 'pwd';
# Usage: CREATE DATABASE [database name] OWNER [user name];
# Example:
CREATE DATABASE rails_myapp OWNER rails_myapp_user;
按Ctrl + Z或键入\ q退出。
注意:要了解PostgreSQL的角色和管理,请查看下面的文章:
启用远程连接
由于我们需要从运行Rails应用程序的远程计算机访问PostgreSQL服务器,因此必须修改配置文件。
运行以下命令编辑PostgreSQL的配置postgresql.conf
使用纳米文本编辑器:
nano /etc/postgresql/9.3/main/postgresql.conf
我们想告诉PostgreSQL监听来自分配给我们的Droplet的IP地址的连接。
向下滚动文件,找到以下行:
#listen_addresses = 'localhost'
将其更改为:
listen_addresses = '*'
然后按CTRL + X并用Y确认保存并退出。
接下来,我们需要告诉PostgreSQL我们希望它接受的具体连接,类似于防火墙的工作原理。
运行以下命令来编辑PostgreSQL的hba
文件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
再次,通过按CTRL + X并用Y确认保存并退出。
使用以下命令重新启动PostgreSQL守护程序:
service postgresql restart
# * Restarting PostgreSQL 9.3 database server
# ...done.
配置Rails应用程序
在本节中,我们将修改Rails应用程序服务器,以便他们开始使用我们刚刚设置的数据库服务器。
配置database.yml
钢轨
对于Rails应用程序数据库设置都保存在里面database.yml
文件/config
目录。
运行以下命令来编辑database.yml
使用纳米文本编辑器文件中:
# Make sure to enter your application deployment directory
# Example:
# cd /var/www/my_app
nano config/database.yml
一旦打开此文件,您将看到数据库设置除以环境名称。 由于应用程序需要使用运行production
环境,让我们的编辑配置了点。
更换production:
YML
代码块用下面的,变化的必要位以满足您自己设置结构,如IP地址等。
# Example:
# 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
参数包含最大同时数据库连接插槽(即池)可用的数量。 你需要评估你的需要,并相应地设置一个数字。
按CTRL + X并用Y确认保存并退出。
获取PostgreSQL
Gem
使用nano使用以下命令开始编辑Gemfile:
nano Gemfile
将以下行添加到文件:
gem 'pg'
按CTRL + X并用Y确认保存并退出。
安装使用新的Gembundle
:
bundle install
就这样! 从现在开始,您的Rails应用程序服务器将为所有操作使用您的全新数据库服务器。