Thứ năm, 27/02/2014 | 00:00 GMT+7

Mở rộng quy mô Ruby on Rails: Thiết lập một server PostgreSQL chuyên dụng (Phần 3)

Trước đây, ta đã đề cập đến nhiều cách triển khai ứng dụng Ruby-on-Rails (ví dụ: Rails với Unicorn & Nginx , Rails với Passenger & Nginx ), cài đặt cấu trúc server có thể mở rộng và học cách kết nối version MySQL chuyên dụng với server ứng dụng Rails của ta . .


Trong phần cài đặt này của loạt bài DigitalOcean Scaling-Rails , ta sẽ tìm hiểu cách xây dựng một server PostgreSQL từ đầu để sử dụng làm lớp bền vững database cho các ứng dụng web Ruby-on-Rails. Tiếp tục, ta sẽ xem cách kết nối server ứng dụng Rails của ta với database bằng cách áp dụng các thay đổi cấu hình cần thiết.

Lưu ý: Bài viết này, như ta đã đề cập, là một phần của loạt bài về Scaling-Rails và bao gồm cài đặt server PostgreSQL trên một VPS Ubuntu chuyên dụng. Tuy nhiên, bạn rất có thể cài đặt PostgreSQL, theo cùng một cách được giải thích ở đây, để sử dụng trên một server ảo cùng với ứng dụng Rails của bạn. Để xem cách triển khai Rails trên một server duy nhất bằng Unicorn hoặc Passenger, vui lòng nhấp vào các liên kết được cung cấp trên đoạn đầu tiên và sau đó tiếp tục từ đây để tạo lớp database .

Bảng chú giải


1. Chọn Database


2. Cấu trúc cài đặt server


  1. Cân bằng tải nhiều server ứng dụng
  2. Lớp server database

3. Thêm server database vào cài đặt triển khai


  1. Chuẩn bị Server

4. Cài đặt PostgreSQL


  1. Thêm repository PostgreSQL
  2. Cài đặt PostgreSQL

5. Cấu hình PostgreSQL


  1. Thay đổi password user postgres mặc định
  2. Tạo role và database
  3. Bật kết nối từ xa

6. Cấu hình các ứng dụng Rails


  1. Cấu hình database.yml cho Rails
  2. Nhận viên ngọc PostgreSQL

Chọn một database


Khung phát triển ứng dụng Ruby on Rails cung cấp nhiều hỗ trợ cho các server database . Đối với phần lớn các ứng dụng, một hệ thống quản lý database quan hệ là cách để đi. Tuy nhiên, một số có thể yêu cầu server database NoSQL không quan hệ, ít schemas - thay vì server quan hệ hoặc cả hai chạy cùng nhau.

Khi bạn bắt đầu làm việc với Rails trên máy tính phát triển của riêng mình, cách đơn giản và có lẽ là hợp lý nhất là bắt đầu với việc sử dụng một triển khai database có khả năng nhưng cơ bản [chẳng hạn như thư viện SQLite]. Tuy nhiên, đối với các triển khai trong thế giới thực, rất có thể SQLite sẽ không đủ để xử lý tải ứng dụng của bạn [do đó yêu cầu một RDBMS chính thức].

Tùy thuộc vào nhu cầu và loại ứng dụng của bạn, bạn cần quyết định hệ quản trị database (tức là server database ) để tạo lớp database của cài đặt triển khai ứng dụng của bạn.

Đối với database quan hệ, một số lựa chọn phổ biến hơn là:

  • PostgreSQL và các dẫn xuất:

RDBMS phổ biến và được sử dụng phổ biến nhất và các dự án liên quan, được phân nhánh.

  • PostgreSQL:

Mục tiêu RDBMS tiên tiến nhất, tuân theo SQL và open-souce .

Đối với server database không quan hệ:

  • Dựa trên cột:

Cassandra, HBase, v.v.

  • Tài liệu:

MongoDB, Couchbase, v.v.

  • Đồ thị:

OrientDB, Neo4J, v.v.

Để đưa ra quyết định rõ ràng và lâu dài trước khi tiếp tục triển khai server database , bạn có thể quan tâm đến việc đọc các bài viết của ta về chủ đề:

  • Giới thiệu về Database :

Hiểu database SQL và NoSQL và các mô hình database khác nhau

  • Quan hệ:

So sánh các hệ thống quản lý database quan hệ

  • NoSQL:

So sánh các mô hình và hệ thống quản lý database NoSQL

Cấu trúc cài đặt server


Trước khi bắt đầu xây dựng lớp database , hãy xem cài đặt triển khai cuối cùng của ta sẽ như thế nào.

Cân bằng tải nhiều server ứng dụng


Trước đây, sau khi tạo bộ cân bằng tải / Reverse Proxy với nhiều server ứng dụng, cuối cùng thì Đây là kết quả ta có:

Three server 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     |         |               |         |               |         +---------------+         +---------------+ 

Lớp server database


Để có một server database có thể truy cập tập trung (ví dụ: database RDBMS và / hoặc NoSQL), ta sẽ thêm phần tử thứ 4 vào cài đặt server của ta :

Four server: ------------------------------------------------ 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.       |                    |                   |                    +-------------------+ 

Thêm server database vào cài đặt triển khai


Trong bài viết này, ta sẽ tạo và cấu hình server quản lý database PostgreSQL trên Ubuntu 13 VPS.

Hãy bắt đầu nào!

Chuẩn bị Server


Cập nhật danh sách nguồn phần mềm và nâng cấp các ứng dụng cũ:

aptitude    update aptitude -y upgrade 

Chạy lệnh sau để cài đặt gói build-essential :

aptitude install -y build-essential 

Chạy lệnh sau để cài đặt một số công cụ bổ sung, thường được sử dụng:

aptitude install -y cvs subversion git-core mercurial 

Cài đặt PostgreSQL


Thêm repository PostgreSQL


Để tải về version mới nhất của PostgreSQL ( 9.3 ), ta cần thêm kho để aptitude danh sách nguồn.

Chạy lệnh sau để tạo danh sách nguồn cho PostgreSQL:

nano  /etc/apt/sources.list.d/pgdg.list 

Copy paste các nội dung dưới đây:

deb http://apt.postgresql.org/pub/repos/apt/ saucy-pgdg main 

Lưu và thoát bằng cách nhấn CTRL + X và xác nhận với Y.

Lưu ý: Ta đang giả định bạn đang làm việc với Ubuntu 13 (saucy). Nếu bạn đang sử dụng version khác, hãy chạy lsb_release -c để tìm ra tên phân phối của bạn và thay thế nó bằng saucy trong hướng dẫn ở trên.

Cập nhật danh sách nguồn để bao gồm các bổ sung mới:

aptitude    update aptitude -y upgrade 

Cài đặt PostgreSQL


Vì bây giờ ta có quyền truy cập vào nguồn, bằng cách sử dụng aptitude quản lý gói mặc định (hoặc apt-get ), ta có thể cài đặt trực tiếp version PostgreSQL mới nhất hiện có.

Chạy lệnh sau để cài đặt PostgreSQL version 9.3 :

aptitude install postgresql-9.3 pgadmin3  

Cấu hình PostgreSQL


Thay đổi password user postgres mặc định


Để làm việc với database , ta cần thay đổi password mặc định.

Chạy lệnh sau để bắt đầu quá trình:

sudo -u postgres psql postgres 

Khi bạn thấy dấu nhắc tương tự như postgres=# , hãy nhập như sau:

\password postgres 

Nhập password của bạn, nhập lại lần nữa để xác minh và nhấn CTRL + Z hoặc gõ \ q để thoát.

Tạo role và database


Đăng nhập vào PostgreSQL bằng lệnh sau:

sudo -u postgres psql 

Và chạy các hướng dẫn dưới đây để tạo một role và một cơ sở dữ liệu sẽ được sử dụng bởi 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; 

Nhấn CTRL + Z hoặc nhập \ q để thoát.

Lưu ý: Để tìm hiểu về các role và quản lý PostgreSQL, hãy xem các bài viết sau:

Bật kết nối từ xa


Vì ta cần server PostgreSQL có thể truy cập được từ các máy tính từ xa chạy ứng dụng Rails, nên file cấu hình phải được sửa đổi.

Chạy lệnh sau để chỉnh sửa cấu hình PostgreSQL postgresql.conf bằng editor nano:

nano /etc/postgresql/9.3/main/postgresql.conf 

Ta muốn yêu cầu PostgreSQL lắng nghe các kết nối từ địa chỉ IP được gán cho server của ta .

Cuộn xuống file và tìm dòng sau:

#listen_addresses = 'localhost' 

Thay đổi nó thành:

listen_addresses = '*' 

Và lưu và thoát bằng cách nhấn CTRL + X và xác nhận với Y.

Tiếp theo, ta cần cho PostgreSQL biết các kết nối cụ thể mà ta muốn nó chấp nhận, tương tự như cách hoạt động của firewall .

Chạy lệnh sau để chỉnh sửa file PostgreSQL hba pg_hba.conf bằng editor văn bản nano:

nano /etc/postgresql/9.3/main/pg_hba.conf 

Cuộn xuống file và tìm phần:

# Put your actual configuration here # .. 

Sau khối comment , nối dòng sau:

# TYPE   DATABASE      USER        ADDRESS        METHOD host        all        all        0.0.0.0/0        md5 

Và , lưu và thoát bằng cách nhấn CTRL + X và xác nhận với Y.

Khởi động lại daemon PostgreSQL bằng lệnh sau:

service postgresql restart  #  * Restarting PostgreSQL 9.3 database server # ...done. 

Cấu hình các ứng dụng Rails


Trong phần này, ta sẽ sửa đổi các server ứng dụng Rails để chúng bắt đầu hoạt động với server database mà ta vừa cài đặt .

Cấu hình database.yml cho Rails


Cài đặt database cho các ứng dụng Rails được giữ bên trong file database.yml trong folder /config .

Chạy lệnh sau để chỉnh sửa file database.yml bằng editor nano:

# Make sure to enter your application deployment directory # Example: # cd /var/www/my_app  nano config/database.yml 

Khi bạn mở file này, bạn sẽ thấy các cài đặt database được chia theo tên môi trường. Vì ứng dụng cần chạy bằng môi trường production , hãy chỉnh sửa cấu hình cho ứng dụng đó.

Thay thế production: khối mã YML bằng khối sau, thay đổi các bit cần thiết để phù hợp với cấu hình cài đặt của bạn , ví dụ: địa chỉ IP, v.v.

# 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 

Lưu ý: Như đã cung cấp trong ví dụ trên, bạn có thể cần chỉ định giao thức.

Lưu ý: Các pool luận chứa số lượng đồng thời khe kết nối database tối đa (tức là hồ bơi) có sẵn. Bạn cần đánh giá nhu cầu của bạn và đặt một con số cho phù hợp.

Lưu và thoát bằng cách nhấn CTRL + X và xác nhận với Y.

Nhận viên ngọc PostgreSQL


Bắt đầu chỉnh sửa Gemfile bằng nano bằng cách sau:

nano Gemfile 

Thêm dòng sau vào file :

gem 'pg' 

Lưu và thoát bằng cách nhấn CTRL + X và xác nhận với Y.

Cài đặt đá quý mới bằng cách sử dụng bundle :

bundle install 

Và đó là nó! Từ bây giờ, các server ứng dụng Rails của bạn sẽ sử dụng server database hoàn toàn mới cho tất cả các hoạt động.

<div class = “author”> Gửi bởi: <a
href = “https://twitter.com/ostezer”> Hệ điều hành Tezer </a> </div>


Tags:

Các tin liên quan

Cách mở rộng quy mô theo chiều ngang một ứng dụng Laravel 4 với database PostgreSQL
2014-02-27
Cách thiết lập bản sao Master Slave trên PostgreSQL trên VPS Ubuntu 12.04
2013-10-29
Cách cài đặt và sử dụng PostgreSQL trên CentOS 6
2013-10-23
Cách backup database PostgreSQL trên VPS Ubuntu
2013-08-28
Cách bảo mật PostgreSQL trên VPS Ubuntu
2013-08-22
cách sử dụng role và quản lý quyền cấp trong PostgreSQL trên VPS
2013-08-05
cách sử dụng role và quản lý quyền cấp trong PostgreSQL trên VPS
2013-08-05
Cách tạo truy vấn dữ liệu trong PostgreSQL bằng cách sử dụng lệnh chọn
2013-08-02
Cách tạo, xóa & quản lý bảng trong PostgreSQL trên server cloud
2013-08-01