Skip to main content
Huỳnh Minh
💬
0 discussions

Hướng dẫn cài đặt PostgreSQL

I. Điều kiện tiên quyết

II. Đối tượng đọc

  • Customer Success Engineer Có liên quan tới:
    • Database

III. PostgreSQL

1. Cài đặt

1.1. Cài Postgres bằng apt

  • Tạo config cho file repository:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
  • Nhập signning key của repository:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
  • Cập nhật package lists:
sudo apt-get update
  • Cài bản mới nhất của PostgreSQL.
  • Nếu muốn cài bản cụ thể, dùng 'postgresql-12' hoặc tương tự thay vì 'postgresql':
sudo apt-get -y install postgresql

1.2. Cài Postgres bằng docker (khuyên dùng)

  • Tham khảo (hướng dẫn cài đặt Keycloak)[../stacks/keycloak-installation.md]
  • Khuyên dùng sử dụng bản docker do trong phần tiếp theo, Keycloak sẽ được hướng dẫn cài qua bản docker và PostgreSQL sẽ là database cho Keycloak. Nếu cài cả 2 bằng docker sẽ dễ cấu hình hơn.
  • Tải gcalls-community-version và truy cập folder:
git clone https://gitlab.com/gcalls/publics/gcallsdb
cd gcallsdb
git fetch
  • Khởi tạo docker cho Postgres
docker-compose -f dc-postgreSql.yml up -d

2. Restore dữ liệu (nói chung và cho remote PostgreSQL)

  • Nếu dùng docker thì bắt đầu từ đây:
  • Dừng Keycloak lại:
  docker stop keycloak
  • Docker exec vào Postgres:
  docker exec -it iam-service_postgres_1 sh
  • Bắt đầu từ đây nếu không dùng docker:
  • Tạo 1 user mới:
  createuser -U keycloak --interactive
  • Điền tên và assign user với role là superuser:
  Enter name of role to add: postgres
Shall the new role be a superuser? (y/n) y
  • Truy cập database bằng user mới:
  psql -U postgres
  • Xóa keycloak database
  drop database keycloak
  • Tạo lại keycloak database
  create database keycloak
  • Thoát ra khỏi psql và docker container
  exit
  \q
  • Tạo 1 folder mới và truy cập nó:
  mkdir postgres
cd postgres
  • Tải dữ liệu backup
  wget -O dumpfile "https://g../../statics.sgp1.cdn.digitaloceanspaces.com/contributor-setup-data%2FpostgresBackup"
  • Nhập dữ liệu vào Postgres (không docker)
  cat dumpfile | psql -U keycloak
  • Nhập dữ liệu vào Postgres (docker)
  cat dumpfile | docker exec -i iam-service_postgres_1 psql -U keycloak

3. Đối với remote Postgres như Amazon RDS For Postgres/ IP của Postgres ở server khác

  • Lưu ý: tùy theo PostgreSQL được cài theo cách bình thường hoặc docker mà lệnh gọi psql có thể khác
  • Nếu dùng docker thì bắt đầu từ đây:
  • Dừng Keycloak lại:
  docker stop keycloak
  • Docker exec vào Postgres:
  docker exec -it iam-service_postgres_1 sh
  • Bắt đầu từ đây nếu không dùng docker:
  • Tạo 1 user mới:
  createuser -U keycloak --interactive
  • Điền tên và assign user với role là superuser:
  Enter name of role to add: postgres
Shall the new role be a superuser? (y/n) y
  • Truy cập database bằng user mới:
  psql -U postgres
  • Xóa keycloak database
  drop database keycloak
  • Tạo lại keycloak database
  create database keycloak
  • Thoát ra khỏi psql và docker container
  exit
  \q
  • Tạo 1 folder mới và truy cập nó:
  mkdir postgres
cd postgres
  • Tải dữ liệu backup
  wget -O db.sql "https://g../../statics.sgp1.cdn.digitaloceanspaces.com/contributor-setup-data%2FpostgresBackup"
a. Không docker:
  pg_restore -h <Postgres_IP> -p 5432 -d keycloak -U keycloak postgresBackupDump/db.sql
b. Docker:
  • Copy db.dump vào docker container
   docker cp postgresBackupDump/db.sql <Postgres_docker_container_name>:/db.sql
  • Restore dữ liệu backup
  docker exec -it <Postgres_docker_container_name> pg_restore -h <Postgres_IP> -p 5432 -d keycloak -U keycloak /db.sql

4. Cronjob

  • Cài đặt Cronjob nếu chưa có
sudo apt-get update 
sudo apt-get install cron
  • Edit cronjob
crontab -e
  • Edit theo kiểu sau. 30 17 * * * là thời điểm chạy cronjob. Tham khảo https://crontab.guru/ để xem cú pháp thời gian.
30 17 * * * /path/to/backupPostgres.sh >> /path/to/backupPostgres.log  2>&1
  • Tạo 1 script bash để backup database. Path phải là absolute path (đường dẫn tuyệt đối). Ví dụ này thực hiện với Postgres trong docker, export data ra dạng dumpfile (để restore trực tiếp ở Postgres local)
BACKUPS=/path/to/data/postgres_data/
DATE=`date +%H-%M-%d-%m-%Y`
FILENAME="Backup-Postgres-${DATE}"
USER=keycloak
BUCKET=bucket_name/backup-postgres/$FILENAME.tar.gz
echo "Create postgres backups"
echo "===================="
docker exec -t <postgres_docker_container_name> pg_dumpall -c -U $USER --verbose > dumpfile
echo "Dump postgres done"
echo "===================="
echo "Compress postgres backups to gzip"
echo "============================"
cd $BACKUPS
sudo tar -zcvf $FILENAME.tar.gz dumpfile
sudo rm -rf $FILENAME
echo "Compress postgres backups done"
echo "============================"
echo "Up load backups file to DigitalOcean"
echo "===================="
s3cmd put $BACKUPS/$FILENAME.tar.gz s3://$BUCKET
echo "Upload backups file done"
sudo rm -rf $BACKUPS/$FILENAME.tar.gz
#s3cmd ls s3://$BUCKET | sort -k 1 | head -2 | grep .tar.gz
  • Thay dòng 8 trong đoạn code trên bằng lệnh sau để export dữ liệu dạng .sql
  docker exec -t <postgres_docker_container_name> pg_dump -U $USER pg_dump mydb > db.sql

IV. Amazon RDS For PostgreSQL

1 Tạo Amazon RDS For PostgreSQL:

  • Chỉnh database như hình mẫu sau:

    Amazon Web Service for PostgreSQL

    Amazon Web Service for PostgreSQL

  • Đặt tên database instance, user và mật khẩu để truy cập database:

    Amazon Web Service for PostgreSQL

  • Tiếp tục cấu hình như hình sau:

    Amazon Web Service for PostgreSQL

    Amazon Web Service for PostgreSQL

    Amazon Web Service for PostgreSQL

    Amazon Web Service for PostgreSQL

    Amazon Web Service for PostgreSQL

2 Cấu hình database:

  • Truy cập vào https://aws.amazon.com
  • Truy cập vào mục "Databases" trên thanh menu bên trái
  • Tạo database nếu chưa có
  • Bấm vào tên database để xem thông tin cấu hình của database

2.1 Cấu hình network

  • Bấm qua tab "Connectivity and security", chọn item bên dưới "VPC security groups" (trong hình là "sg-0e0f3cb0d8d5b0fef - default").

    Amazon Web Service for PostgreSQL

  • Chọn inbound rules để xem IP được quyển truy cập vào instance Amazon RDS For PostgreSQL này

    Amazon Web Service for PostgreSQL

  • Chọn Edit inbound để chỉnh sửa thông tin IP được whitelist

    Amazon Web Service for PostgreSQL

  • Thêm IP của bạn hoặc server vào để có thể thiết lập kết nối tới Instance Amazon RDS For PostgreSQL này.

    Amazon Web Service for PostgreSQL

2.2 Cấu hình kết nối

  • Quay lại trang thông tin database, chọn tab "Connectivity and security", để xem thông tin kết nối của database ở phần 1.

  • Kết nối tới database qua cú pháp sau (nếu cài Postgres theo cách bình thường):

    psql -h <amazon_rds_for_postgres_connection_string> -d keycloak -U keycloak -W
  • Kết nối tới database qua cú pháp sau (nếu cài Postgres bằng docker):

    docker exec -it <postgres-docker-container-name> -h <amazon_rds_for_postgres_connection_string> -d keycloak -U keycloak -W
  • Nó sẽ yêu cầu nhập mật khẩu. Nhập mật khẩu và nếu kết nối thành công, trên màn hình sẽ hiện ra như sau:

    Amazon Web Service for PostgreSQL

V. Kết Luận

  • Và đó là các bước để cài đặt PostgreSQL, backup, restore và viết cronjob.
  • Nếu thấy bài viết có vấn đề, vui lòng gửi feedback ở form bên dưới: