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
- Cân bằng tải nhiều server ứng dụng
- Lớp server database
3. Thêm server database vào cài đặt triển khai
- Chuẩn bị Server
4. Cài đặt PostgreSQL
- Thêm repository PostgreSQL
- Cài đặt PostgreSQL
5. Cấu hình PostgreSQL
- Thay đổi password user
postgres
mặc định - Tạo role và database
- Bật kết nối từ xa
6. Cấu hình các ứng dụng Rails
- Cấu hình
database.yml
cho Rails - 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>
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 PostgreSQL2014-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