Kiến thức Hữu ích 😍

Cài đặt PostgreSQL trên Ubuntu 20.04 – Hướng Dẫn Chi Tiết Cho Người Mới


PostgreSQL là một hệ quản trị cơ sở dữ liệu mã nguồn mở mạnh mẽ và phổ biến, được tin dùng trong vô số ứng dụng từ các dự án nhỏ đến các hệ thống doanh nghiệp quy mô lớn. Sức mạnh của nó nằm ở sự ổn định, khả năng mở rộng và tuân thủ nghiêm ngặt các tiêu chuẩn SQL. Tuy nhiên, đối với nhiều người dùng mới, đặc biệt là những người chưa quen với môi trường dòng lệnh, việc cài đặt và cấu hình PostgreSQL trên Ubuntu 20.04 có thể là một thử thách ban đầu. Bạn có thể gặp khó khăn trong việc thiết lập kết nối, quản lý người dùng hay xử lý các lỗi phát sinh. Bài viết này của AZWEB được tạo ra để trở thành người bạn đồng hành đáng tin cậy của bạn. Chúng tôi sẽ hướng dẫn bạn từng bước chi tiết, từ cài đặt, cấu hình dịch vụ, thực hiện các lệnh quản lý cơ bản cho đến cách khắc phục các sự cố thường gặp, giúp bạn tự tin làm chủ PostgreSQL trên nền tảng Ubuntu 20.04 một cách dễ dàng và hiệu quả.

Giới thiệu PostgreSQL và Ubuntu 20.04

Để bắt đầu hành trình làm chủ cơ sở dữ liệu, việc hiểu rõ các công cụ bạn sắp sử dụng là vô cùng quan trọng. PostgreSQL và Ubuntu 20.04 là một cặp đôi hoàn hảo để xây dựng các ứng dụng ổn định và hiệu suất cao. Hãy cùng AZWEB khám phá tại sao sự kết hợp này lại được các nhà phát triển trên toàn thế giới ưa chuộng.

PostgreSQL là gì?

PostgreSQL, thường được gọi là “Postgres”, là một hệ quản trị cơ sở dữ liệu quan hệ đối tượng (ORDBMS) mã nguồn mở. Nó không chỉ đơn thuần lưu trữ dữ liệu mà còn cung cấp một loạt tính năng nâng cao, khiến nó trở thành lựa chọn hàng đầu cho các ứng dụng phức tạp. Một trong những điểm mạnh nhất của PostgreSQL là sự tuân thủ tiêu chuẩn ACID (Atomicity, Consistency, Isolation, Durability), đảm bảo tính toàn vẹn và độ tin cậy của dữ liệu ngay cả khi có lỗi hệ thống.

Các tính năng nổi bật của PostgreSQL bao gồm:

  • Khả năng mở rộng cao: Bạn có thể định nghĩa các kiểu dữ liệu, hàm, và toán tử của riêng mình.
  • Kiểm soát đồng thời đa phiên bản (MVCC): Cho phép nhiều người dùng đọc và ghi vào cơ sở dữ liệu cùng lúc mà không xung đột, tăng hiệu suất đáng kể.
  • Hỗ trợ đa dạng kiểu dữ liệu: Ngoài các kiểu dữ liệu chuẩn như số, chuỗi, ngày tháng, PostgreSQL còn hỗ trợ các kiểu phức tạp như JSON/JSONB, XML, mảng, và các kiểu hình học.
  • Tính toàn vẹn dữ liệu: Hỗ trợ khóa ngoại, khóa chính, và các ràng buộc kiểm tra để đảm bảo dữ liệu luôn chính xác.

Lợi ích khi sử dụng PostgreSQL là rất rõ ràng: nó miễn phí, được hỗ trợ bởi một cộng đồng năng động, và có hiệu năng không thua kém các hệ quản trị cơ sở dữ liệu thương mại đắt tiền.

Hình minh họa

Ubuntu 20.04 – Lựa chọn hệ điều hành ổn định cho server

Ubuntu 20.04, với tên mã “Focal Fossa”, là một phiên bản Hỗ trợ Dài hạn (Long-Term Support – LTS). Điều này có nghĩa là nó sẽ nhận được các bản cập nhật bảo mật và bảo trì miễn phí từ Canonical trong vòng 5 năm, kéo dài đến tận tháng 4 năm 2025. Sự ổn định và vòng đời hỗ trợ dài hạn này làm cho Ubuntu 20.04 trở thành một nền tảng lý tưởng để triển khai các dịch vụ quan trọng như máy chủ cơ sở dữ liệu.

Các ưu điểm chính của Ubuntu 20.04 cho máy chủ bao gồm:

  • Độ tin cậy và ổn định: Được xây dựng trên nền tảng Linux kernel vững chắc, Ubuntu LTS nổi tiếng về khả năng hoạt động liên tục và ổn định.
  • Bảo mật: Canonical thường xuyên cung cấp các bản vá bảo mật, giúp hệ thống của bạn được bảo vệ trước các lỗ hổng mới nhất.
  • Cộng đồng lớn: Với một cộng đồng người dùng và nhà phát triển khổng lồ, bạn có thể dễ dàng tìm thấy tài liệu, hướng dẫn và sự hỗ trợ khi gặp vấn đề.
  • Quản lý gói dễ dàng: Hệ thống quản lý gói APT giúp việc cài đặt, cập nhật và gỡ bỏ phần mềm trở nên cực kỳ đơn giản và nhanh chóng.

Kết hợp sự mạnh mẽ của PostgreSQL với sự ổn định của Ubuntu 20.04, bạn sẽ có một nền tảng vững chắc để xây dựng và phát triển ứng dụng của mình.

Hướng dẫn cài đặt PostgreSQL trên Ubuntu 20.04

Bây giờ, hãy cùng bắt tay vào phần thực hành. Quá trình cài đặt PostgreSQL trên Ubuntu 20.04 khá đơn giản nhờ vào hệ thống quản lý gói APT. AZWEB sẽ hướng dẫn bạn qua từng bước một cách rõ ràng nhất.

Cập nhật hệ thống và chuẩn bị môi trường

Trước khi cài đặt bất kỳ phần mềm mới nào, một quy tắc vàng là luôn đảm bảo hệ thống của bạn được cập nhật lên phiên bản mới nhất. Điều này không chỉ giúp vá các lỗ hổng bảo mật mà còn đảm bảo tính tương thích của các gói phần mềm.

Mở terminal của bạn và chạy các lệnh sau:

Đầu tiên, cập nhật danh sách các gói có sẵn từ kho lưu trữ:

sudo apt update

Lệnh này sẽ tải xuống thông tin gói mới nhất từ tất cả các nguồn đã được cấu hình.

Tiếp theo, nâng cấp các gói đã cài đặt lên phiên bản mới nhất:

sudo apt upgrade -y

Tham số -y sẽ tự động trả lời “yes” cho các câu hỏi xác nhận, giúp quá trình diễn ra liền mạch. Việc cập nhật hệ thống là bước nền tảng quan trọng để có một môi trường cài đặt sạch sẽ và an toàn.

Hình minh họa

Cài đặt PostgreSQL qua apt

Sau khi hệ thống đã được cập nhật, bạn đã sẵn sàng để cài đặt PostgreSQL. Ubuntu 20.04 cung cấp gói PostgreSQL trong kho lưu trữ mặc định, giúp việc cài đặt trở nên vô cùng tiện lợi.

Thực thi lệnh sau trong terminal để cài đặt PostgreSQL và gói contrib, chứa các tiện ích và chức năng bổ sung hữu ích:

sudo apt install postgresql postgresql-contrib -y

Hệ thống APT sẽ tự động xử lý các gói phụ thuộc và cài đặt phiên bản PostgreSQL ổn định được hỗ trợ trên Ubuntu 20.04. Quá trình này có thể mất vài phút tùy thuộc vào tốc độ mạng của bạn.

Khi cài đặt hoàn tất, dịch vụ PostgreSQL sẽ tự động được khởi động. Để kiểm tra xem PostgreSQL đã được cài đặt thành công hay chưa và xem phiên bản của nó, bạn có thể sử dụng lệnh:

psql --version

Lệnh này sẽ hiển thị phiên bản PostgreSQL đang chạy trên hệ thống của bạn, ví dụ: psql (PostgreSQL) 12.x.x. Việc nhìn thấy thông tin phiên bản này xác nhận rằng quá trình cài đặt đã thành công.

Hình minh họa

Cấu hình dịch vụ PostgreSQL sau khi cài đặt

Việc cài đặt chỉ là bước khởi đầu. Để PostgreSQL hoạt động đúng theo ý muốn và đảm bảo an toàn, bạn cần thực hiện một số cấu hình cơ bản. Chúng ta sẽ tìm hiểu cách quản lý dịch vụ và thiết lập các tùy chọn kết nối, bảo mật.

Khởi động và kiểm tra trạng thái dịch vụ PostgreSQL

Trên Ubuntu, các dịch vụ hệ thống được quản lý bởi systemd. PostgreSQL cũng không ngoại lệ. Bạn có thể sử dụng công cụ dòng lệnh systemctl để tương tác với dịch vụ PostgreSQL.

Để kiểm tra trạng thái hiện tại của dịch vụ, hãy chạy lệnh:

sudo systemctl status postgresql

Nếu dịch vụ đang chạy bình thường, bạn sẽ thấy một dòng trạng thái màu xanh lá cây báo active (running). Đây là dấu hiệu cho thấy máy chủ cơ sở dữ liệu của bạn đã sẵn sàng hoạt động.

Trong trường hợp bạn cần khởi động lại, dừng, hoặc bật dịch vụ, bạn có thể dùng các lệnh sau:

  • Dừng dịch vụ: sudo systemctl stop postgresql
  • Khởi động dịch vụ: sudo systemctl start postgresql
  • Khởi động lại dịch vụ (sau khi thay đổi cấu hình): sudo systemctl restart postgresql
  • Kích hoạt dịch vụ khởi động cùng hệ thống: sudo systemctl enable postgresql
  • Vô hiệu hóa dịch vụ khởi động cùng hệ thống: sudo systemctl disable postgresql

Việc nắm vững các lệnh này giúp bạn quản lý máy chủ PostgreSQL một cách chủ động và hiệu quả.

Hình minh họa

Cấu hình kết nối và bảo mật cơ bản

Mặc định, PostgreSQL chỉ cho phép kết nối từ máy cục bộ (localhost) để tăng cường bảo mật. Nếu bạn muốn cho phép các ứng dụng từ máy khác kết nối đến, bạn cần phải chỉnh sửa một vài tệp cấu hình.

Các tệp cấu hình chính của PostgreSQL thường nằm trong thư mục /etc/postgresql/<version>/main/. Hai tệp quan trọng nhất là:

  1. postgresql.conf: Tệp cấu hình chính, nơi bạn có thể điều chỉnh các tham số về hiệu suất, bộ nhớ, logging, và kết nối.
  2. pg_hba.conf (Host-Based Authentication): Tệp này kiểm soát việc xác thực client. Nó quy định ai có thể kết nối, từ địa chỉ IP nào, vào cơ sở dữ liệu nào, và bằng phương thức xác thực nào.

Để cho phép kết nối từ xa, bạn cần mở tệp postgresql.conf:

sudo nano /etc/postgresql/12/main/postgresql.conf

Tìm dòng listen_addresses (thường được comment bằng dấu #). Bỏ comment và thay đổi giá trị của nó thành * để lắng nghe trên tất cả các địa chỉ IP, hoặc một địa chỉ IP cụ thể nếu bạn muốn giới hạn.

listen_addresses = '*'

Tiếp theo, mở tệp pg_hba.conf để cấu hình quyền truy cập:

sudo nano /etc/postgresql/12/main/pg_hba.conf

Thêm một dòng vào cuối tệp để cho phép một người dùng cụ thể kết nối từ một dải IP nhất định bằng mật khẩu đã được mã hóa (md5 hoặc scram-sha-256 là các lựa chọn an toàn).

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             all             192.168.1.0/24          md5

Dòng trên có nghĩa là: cho phép kết nối TCP/IP (host) đến tất cả cơ sở dữ liệu (all) cho tất cả người dùng (all) từ dải địa chỉ IP 192.168.1.0/24 bằng phương thức xác thực md5. Sau khi chỉnh sửa, đừng quên khởi động lại dịch vụ PostgreSQL để áp dụng thay đổi: sudo systemctl restart postgresql.

Hình minh họa

Hướng dẫn các lệnh cơ bản trong PostgreSQL để quản lý cơ sở dữ liệu

Khi máy chủ PostgreSQL đã được cài đặt và cấu hình, bước tiếp theo là học cách tương tác với nó. AZWEB sẽ hướng dẫn bạn các lệnh cơ bản để tạo cơ sở dữ liệu, quản lý người dùng và phân quyền, những kỹ năng cần thiết cho bất kỳ quản trị viên cơ sở dữ liệu nào.

Tạo, xóa và quản lý cơ sở dữ liệu

Trong quá trình cài đặt, PostgreSQL tạo ra một người dùng hệ điều hành tên là postgres. Người dùng này có quyền quản trị cao nhất đối với cơ sở dữ liệu. Để thực hiện các tác vụ quản trị, bạn nên chuyển sang người dùng này.

Sử dụng lệnh sau để chuyển sang tài khoản postgres:

sudo -i -u postgres

Bây giờ bạn đang ở trong một phiên làm việc với quyền của người dùng postgres.

  • Tạo một cơ sở dữ liệu mới:
    Sử dụng lệnh createdb theo sau là tên cơ sở dữ liệu bạn muốn tạo.
    createdb my_azweb_db
    
  • Kết nối vào cơ sở dữ liệu:
    Để bắt đầu làm việc với cơ sở dữ liệu, bạn sử dụng công cụ dòng lệnh psql.
    psql my_azweb_db
    

    Bạn sẽ được đưa vào giao diện dòng lệnh của PostgreSQL, nơi bạn có thể thực thi các câu lệnh SQL. Để thoát khỏi psql, gõ \q và nhấn Enter.

  • Liệt kê các cơ sở dữ liệu:
    Trong giao diện psql, bạn có thể dùng lệnh \l để xem danh sách tất cả các cơ sở dữ liệu trên máy chủ.
  • Xóa một cơ sở dữ liệu:
    Hãy cẩn thận với lệnh này vì nó sẽ xóa vĩnh viễn cơ sở dữ liệu và toàn bộ dữ liệu bên trong.
    dropdb my_azweb_db
    

Sau khi hoàn thành các tác vụ quản trị, bạn có thể gõ exit để trở về tài khoản người dùng thông thường của mình.

Hình minh họa

Quản lý người dùng và phân quyền

Trong PostgreSQL, khái niệm “người dùng” được gọi là “role” (vai trò). Một role có thể là một người dùng, một nhóm, hoặc cả hai. Việc tạo các role riêng biệt cho từng ứng dụng hoặc người dùng là một thực hành bảo mật tốt.

Vẫn trong phiên làm việc của người dùng postgres, bạn có thể quản lý các role như sau:

  • Tạo một người dùng mới:
    Cách đơn giản nhất là sử dụng lệnh createuser với tùy chọn --interactive.
    createuser --interactive
    

    Hệ thống sẽ hỏi bạn tên của role, và liệu role đó có phải là superuser hay không. Bạn nên trả lời “không” (n) cho câu hỏi superuser trừ khi có lý do đặc biệt.

  • Đặt mật khẩu cho người dùng:
    Sau khi tạo người dùng, bạn cần đặt mật khẩu cho họ. Kết nối vào psql và sử dụng câu lệnh SQL ALTER USER.
    psql
    ALTER USER your_new_user WITH PASSWORD 'a_strong_password';
    \q
    

    Luôn sử dụng mật khẩu mạnh để bảo vệ cơ sở dữ liệu của bạn.

  • Phân quyền cho người dùng:
    Một người dùng mới tạo thường không có quyền truy cập vào bất kỳ cơ sở dữ liệu nào. Bạn cần cấp quyền cho họ bằng lệnh GRANT.
    Ví dụ, để cấp tất cả các quyền trên cơ sở dữ liệu my_azweb_db cho người dùng azweb_user:
    GRANT ALL PRIVILEGES ON DATABASE my_azweb_db TO azweb_user;
    

    Ngược lại, để thu hồi quyền, bạn sử dụng lệnh REVOKE.

    REVOKE ALL PRIVILEGES ON DATABASE my_azweb_db FROM azweb_user;
    

    Quản lý người dùng và phân quyền một cách cẩn thận là chìa khóa để duy trì một hệ thống cơ sở dữ liệu an toàn và có tổ chức.

Các vấn đề thường gặp và cách khắc phục

Ngay cả với những hướng dẫn chi tiết nhất, đôi khi bạn vẫn có thể gặp phải sự cố. Đừng lo lắng, đây là một phần bình thường của quá trình học hỏi. AZWEB đã tổng hợp một số vấn đề phổ biến nhất khi làm việc với PostgreSQL trên Ubuntu và cách để bạn tự mình chẩn đoán và khắc phục chúng.

Lỗi không thể kết nối đến PostgreSQL

Đây có lẽ là lỗi phổ biến nhất. Khi ứng dụng của bạn không thể kết nối đến cơ sở dữ liệu, hãy bình tĩnh và kiểm tra theo trình tự sau:

  1. Kiểm tra trạng thái dịch vụ: Điều đầu tiên cần làm là đảm bảo dịch vụ PostgreSQL đang thực sự chạy.
    sudo systemctl status postgresql
    

    Nếu dịch vụ không hoạt động, hãy thử khởi động nó bằng sudo systemctl start postgresql.

  2. Kiểm tra tường lửa (Firewall): Nếu bạn đang cố gắng kết nối từ một máy khác, tường lửa trên máy chủ có thể đang chặn kết nối. PostgreSQL mặc định chạy trên cổng 5432. Kiểm tra trạng thái tường lửa UFW:
    sudo ufw status
    

    Nếu tường lửa đang hoạt động và không có quy tắc cho phép cổng 5432, bạn cần thêm nó:

    sudo ufw allow 5432/tcp
    
  3. Kiểm tra listen_addresses: Mở tệp postgresql.conf và xác minh rằng listen_addresses được đặt thành * hoặc địa chỉ IP của máy chủ, không phải là localhost nếu bạn cần kết nối từ xa.
  4. Kiểm tra pg_hba.conf: Đây là nguyên nhân gây ra nhiều lỗi kết nối. Hãy chắc chắn rằng có một dòng trong tệp pg_hba.conf cho phép kết nối từ địa chỉ IP, người dùng và cơ sở dữ liệu của bạn với phương thức xác thực chính xác. Một lỗi nhỏ như sai dải IP hoặc phương thức (md5 thay vì peer) cũng có thể gây ra sự cố.

Hình minh họa

Lỗi trong quá trình khởi động dịch vụ PostgreSQL

Nếu dịch vụ PostgreSQL không thể khởi động, nguyên nhân thường nằm ở các tệp cấu hình hoặc xung đột tài nguyên.

  1. Xem log lỗi: Đây là bước quan trọng nhất để chẩn đoán. journalctl là công cụ mạnh mẽ để xem log hệ thống.
    sudo journalctl -u postgresql
    

    Hãy đọc kỹ các dòng log gần nhất, chúng thường chỉ ra chính xác nguyên nhân gây lỗi, ví dụ như một lỗi cú pháp trong tệp cấu hình.

  2. Kiểm tra port bị chiếm dụng: PostgreSQL cần lắng nghe trên cổng 5432. Nếu một dịch vụ khác đang sử dụng cổng này, PostgreSQL sẽ không thể khởi động. Sử dụng lệnh sau để kiểm tra:
    sudo netstat -tulnp | grep 5432
    

    Nếu có một tiến trình khác đang chiếm cổng, bạn cần phải dừng tiến trình đó hoặc thay đổi cổng mặc định của PostgreSQL trong tệp postgresql.conf.

  3. Kiểm tra lỗi cấu hình: Một dấu phẩy hay dấu ngoặc sai trong postgresql.conf hoặc pg_hba.conf cũng đủ để ngăn dịch vụ khởi động. Hãy kiểm tra lại cẩn thận những thay đổi bạn vừa thực hiện. Nếu không chắc chắn, bạn có thể tạm thời khôi phục tệp cấu hình từ bản sao lưu hoặc so sánh với tệp cấu hình mặc định để tìm ra điểm khác biệt.

Bằng cách tiếp cận vấn đề một cách có hệ thống, bạn có thể nhanh chóng xác định và giải quyết hầu hết các lỗi phổ biến.

Mẹo và lưu ý khi sử dụng PostgreSQL trên Ubuntu

Để làm việc với PostgreSQL một cách hiệu quả và an toàn, có một vài kinh nghiệm và thói quen tốt mà bạn nên áp dụng. Dưới đây là những mẹo và lưu ý quan trọng mà AZWEB muốn chia sẻ với bạn.

  • Sử dụng user postgres để thao tác trực tiếp: Luôn sử dụng lệnh sudo -i -u postgres để thực hiện các tác vụ quản trị cấp cao như tạo cơ sở dữ liệu, tạo người dùng. Điều này giúp bạn tránh các vấn đề về quyền sở hữu tệp và thư mục dữ liệu, đồng thời tuân thủ đúng cơ chế bảo mật mà PostgreSQL đã thiết kế.
  • Thường xuyên backup dữ liệu: Dữ liệu là tài sản quý giá nhất. Hãy tạo thói quen sao lưu cơ sở dữ liệu của bạn một cách định kỳ. Công cụ pg_dump là một tiện ích dòng lệnh mạnh mẽ cho phép bạn tạo ra một bản sao lưu logic của cơ sở dữ liệu. Bạn có thể tự động hóa quá trình này bằng cách sử dụng cron job.
    pg_dump -U username -d dbname -f backup.sql
    
  • Tránh chạy PostgreSQL với quyền root: Dịch vụ PostgreSQL được thiết kế để chạy dưới quyền của người dùng hệ thống riêng (postgres). Việc cố gắng chạy nó với quyền root có thể tạo ra các lỗ hổng bảo mật nghiêm trọng. Hãy luôn tin tưởng vào cấu hình mặc định về người dùng dịch vụ.
  • Cập nhật và bảo trì hệ thống định kỳ: Giống như bất kỳ phần mềm nào khác, PostgreSQL và Linux đều nhận được các bản cập nhật để vá lỗi, cải thiện hiệu suất và tăng cường bảo mật. Hãy thường xuyên chạy sudo apt updatesudo apt upgrade để giữ cho hệ thống của bạn luôn ở trạng thái tốt nhất.
  • Chọn phương thức xác thực phù hợp: Tệp pg_hba.conf cho phép bạn chọn nhiều phương thức xác thực khác nhau. peerident phù hợp cho các kết nối cục bộ tin cậy, nhưng đối với kết nối mạng, hãy ưu tiên sử dụng scram-sha-256 (bảo mật nhất) hoặc ít nhất là md5. Tránh sử dụng trust vì nó cho phép kết nối mà không cần mật khẩu, gây rủi ro bảo mật lớn.

Hình minh họa

Kết luận

Qua bài viết này, chúng ta đã cùng nhau đi qua một hành trình chi tiết từ việc cài đặt, cấu hình cho đến quản lý và khắc phục sự cố cơ bản với PostgreSQL trên hệ điều hành Ubuntu 20.04. Bạn đã học được cách cập nhật hệ thống, cài đặt PostgreSQL, quản lý dịch vụ bằng systemctl, cấu hình kết nối an toàn, cũng như thực hiện các lệnh quản lý cơ sở dữ liệu và người dùng. AZWEB tin rằng với những kiến thức nền tảng vững chắc này, bạn đã có đủ tự tin để bắt đầu triển khai các dự án của riêng mình bằng sự kết hợp mạnh mẽ giữa PostgreSQL và Ubuntu.

Học hỏi là một quá trình liên tục. Đừng ngần ngại thực hành các lệnh đã học, thử tạo các cơ sở dữ liệu mẫu và thử nghiệm các cấu hình khác nhau trong một môi trường an toàn. Càng thực hành nhiều, bạn sẽ càng trở nên thành thạo hơn. Cộng đồng PostgreSQL và Ubuntu rất lớn mạnh, hãy tận dụng các diễn đàn và tài liệu trực tuyến để tiếp tục đào sâu kiến thức.

Bước tiếp theo trên hành trình của bạn có thể là tìm hiểu về các chủ đề nâng cao hơn như tối ưu hiệu năng cơ sở dữ liệu bằng cách tinh chỉnh các tham số trong postgresql.conf, thiết lập các kịch bản sao lưu và phục hồi tự động để đảm bảo an toàn dữ liệu, hoặc triển khai cơ chế sao chép (replication) để tăng cường tính sẵn sàng cao cho ứng dụng của bạn. Chúc bạn thành công trên con đường chinh phục PostgreSQL

Đánh giá