1. Cài đặt thư viện phụ thuộc và PostgreSQL 14
Trước khi tiến hành cài đặt cơ sở dữ liệu, môi trường CentOS 7 cần được bổ sung các gói phát triển và trình biên dịch. Việc cấu hình thêm repository sẽ giúp quá trình cài đặt các phụ thuộc như LLVM được thuận lợi.
# Cài đặt các nhóm công cụ phát triển và thư viện cốt lõi
yum groupinstall -y "Development Tools"
yum install -y readline-devel zlib-devel openssl-devel pam-devel libxml2-devel \
libxslt-devel flex bison gcc gcc-c++ systemd-devel openldap-devel
# Tải và cài đặt EPEL repository
yum install -y epel-release
# Tạo file cấu hình yum cho các công cụ biên dịch nâng cao
cat > /etc/yum.repos.d/custom-build-tools.repo << 'REPO_EOF'
[centos-sclo-sclo]
name=CentOS-7 - SCLo sclo
baseurl=http://mirror.centos.org/centos/7/sclo/$basearch/sclo/
gpgcheck=0
enabled=1
REPO_EOF
# Cài đặt các phụ thuộc liên quan đến LLVM và nén
yum install -y llvm-toolset-7-clang llvm5.0-devel lz4-devel libicu-devel
Tiếp theo, thêm repository chính thức của PostgreSQL và cài đặt phiên bản 14 cùng các gói mở rộng đi kèm.
# Thêm PGDG repository cho Enterprise Linux 7
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# Tiến hành cài đặt PostgreSQL 14
yum install -y postgresql14-server postgresql14-contrib postgresql14-devel
2. Tùy chỉnh đường dẫn lưu trữ dữ liệu
Thay vì sử dụng thư mục mặc định, chúng ta sẽ thiết lập một đường dẫn tùy chỉnh để dễ dàng quản lý không gian lưu trữ và sao lưu.
# Tạo thư mục mới và phân quyền cho người dùng postgres
mkdir -p /var/db_data/pg14_cluster
chown -R postgres:postgres /var/db_data
# Sử dụng sed để cập nhật biến môi trường PGDATA trong file systemd
sed -i 's|/var/lib/pgsql/14/data|/var/db_data/pg14_cluster|g' /usr/lib/systemd/system/postgresql-14.service
# Tải lại cấu hình systemd và khởi tạo cơ sở dữ liệu
systemctl daemon-reload
/usr/pgsql-14/bin/postgresql-14-setup initdb
# Kích hoạt và khởi động dịch vụ ngay lập tức
systemctl enable --now postgresql-14
3. Thiết lập bảo mật và cho phép kết nối từ xa
Mặc định, PostgreSQL chỉ cho phép kết nối nội bộ. Cần thiết lập mật khẩu mạnh và cấu hình lại các file postgresql.conf và pg_hba.conf để chấp nhận kết nối từ mạng bên ngoài.
# Chuyển sang người dùng hệ thống postgres
su - postgres
# Cập nhật mật khẩu cho tài khoản quản trị bằng lệnh trực tiếp
psql -c "ALTER USER postgres WITH PASSWORD 'MyStr0ng_DB_Pass!';"
# Quay lại tài khoản root
exit
Chỉnh sửa file cấu hình chính để lắng nghe trên tất cả các địa chỉ IP:
# Mở file cấu hình và sửa tham số listen_addresses
vi /var/db_data/pg14_cluster/postgresql.conf
# Bỏ comment và đảm bảo dòng sau được thiết lập:
# listen_addresses = '*'
Thêm quy tắc cho phép kết nối từ xa với phương thức xác thực scram-sha-256:
vi /var/db_data/pg14_cluster/pg_hba.conf
# Thêm dòng sau vào cuối file:
# host all all 0.0.0.0/0 scram-sha-256
Khởi động lại dịch vụ để áp dụng các thay đổi và kiểm tra kết nối:
systemctl restart postgresql-14
# Kiểm tra kết nối qua giao diện mạng local
psql -h 127.0.0.1 -U postgres -p 5432
4. Tích hợp và kích hoạt PostGIS
PostGIS mở rộng khả năng của PostgreSQL để xử lý các đối tượng không gian địa lý. Sau khi cài đặt gói từ YUM, các extension cần được kích hoạt trực tiếp trong cơ sở dữ liệu.
# Cài đặt PostGIS tương thích với PostgreSQL 14
yum install -y postgis32_14
# Chuyển sang người dùng postgres và sử dụng heredoc để thực thi hàng loạt lệnh SQL
su - postgres
psql << 'SQL_EOF'
-- Kích hoạt các extension không gian và xử lý địa chỉ
CREATE EXTENSION IF NOT EXISTS postgis;
CREATE EXTENSION IF NOT EXISTS postgis_topology;
CREATE EXTENSION IF NOT EXISTS fuzzystrmatch;
CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder;
-- Truy vấn phiên bản để xác nhận quá trình cài đặt thành công
SELECT PostGIS_Lib_Version();
SQL_EOF