kiến thức DevOps thực tế và chi tiết

Cài đặt postgresql bằng ansible (Step by step)

Cài đặt Postgresql và cấu hình có thể mất nhiều thời gian và công sức. Đây là lúc Ansible, một công cụ tự động hóa phần mềm mã nguồn mở, đến cứu nguy. Ansible cho phép chúng ta tự động hóa quy trình cài đặt và cấu hình PostgreSQL trên các máy chủ, giúp tiết kiệm thời gian và đảm bảo tính nhất quán trong quy trình triển khai, bạn có thể xem Cách sử dụng ansible.

Step 1: Cài đặt và cấu hình ansible

Mình có 2 server ubuntu server thứ nhất 10.32.3.130 làm server cài đặt Ansible và server thứ hai 10.32.3.131 làm server cài đặt postgresql

$ ssh [email protected] ssh đến server Ansible

$ mkdir -p /home/ansible/setup; cd /home/ansible/setup; vim install_ansible.sh tạo thư mục ansible và tạo thư mục con setup, tiến hành truy cập đến thư mục đó và tạo file cài đặt trong đó nội dung file như sau:

#!/bin/bash

# Install required packages
sudo apt update
sudo apt install -y software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install -y ansible

# Install Ansible via pip
sudo apt install -y python3-pip
sudo pip3 install ansible

$ chmod +x install_ansible.sh thêm quyền thực thi cho file

$ ./install_ansible.sh chạy file cài đặt Ansible

Vậy chúng ta đã cài đặt thành công ansible siêu đơn giản và tiếp theo là sử dụng ansible

$ mkdir -p /home/ansible/project; cd /home/ansible/project tạo thư mục project để cấu hình dự án và tiến hành truy cập đến thư mục đó

Cấu hình inventory

$ vim inventory.ini tạo file và nội dung như sau:

[all_hosts] # Định nghĩa nhóm (group) máy chủ có tên là all_hosts
target1 ansible_ssh_host=10.32.3.131 # xác định máy chủ "target1" với địa chỉ IP là "10.32.3.131"

[dbservers] # Định nghĩa nhóm máy chủ được chọn cài đặt postgresql database servers
target1

Tiếp theo để có thể từ máy chủ thứ nhất thực hiện các tác vụ lên máy chủ thứ hai

$ ssh-keygen -t rsa tạo keygen

$ ssh-copy-id [email protected] copy keygen của tài khoản server thứ nhất sang server cài đặt postgresql

Vậy là bây giờ bạn có thể thực hiện các tác vụ từ server thứ nhất rồi.

Step 2: Cài đặt postgresql sử dụng Ansible

Mình sẽ sử dụng role để cài đặt Postgresql Roles — Ansible Documentation

$ pwd kiểm tra xem chúng ta đang ở đâu nếu ở “/home/ansible/project” là chính xác.

$ mkdir roles tạo thư mục roles

$ ansible-galaxy init roles/postgresql câu lệnh này sẽ giúp bạn tạo ra một thư mục có cấu trúc roles chuẩn như trên với các thư mục, và file trống (nếu không thích bạn có thể tạo bằng tay các thư mục và file dựa trên hình trên gồm tasks, hanlders,…)

$ apt install tree cài đặt tree để kiểm tra cấu trúc thư mục

$ tree roles/postgresql kiểm tra cấu trúc dạng cây của thư mục được kết quả sau là thành công.

$ cd postgresql di chuyển đến thư mục postgresql vừa tạo ở trên

$ vim defaults/main.yml mở file main.yml để khởi tạo những giá trị mặc định và viết nội dung sau:

---
postgres_version: "14"
postgres_user: "postgres"
postgres_password: "postgres"
postgres_database: "initdb"

$ vim tasks/main.yml mở file main.yml để tiến hành thực hiện khởi tạo các task trong đây và nội dung sau:

---
# install postgresql

- name: Update apt cache
  become: yes
  apt:
    update_cache: yes

- name: Install PostgreSQL dependencies
  become: yes
  apt:
    name:
      - wget
      - ca-certificates
      - gnupg
      - software-properties-common
    state: present

- name: Add PostgreSQL repository
  become: yes
  apt_repository:
    repo: deb http://apt.postgresql.org/pub/repos/apt/ {{ ansible_distribution_release }}-pgdg main
    state: present
    update_cache: yes

- name: Add PostgreSQL repository key
  become: yes
  apt_key:
    url: https://www.postgresql.org/media/keys/ACCC4CF8.asc
    state: present

- name: Install PostgreSQL # cài đặt postgresql
  become: yes
  apt:
    name:
      - postgresql-{{ postgres_version }}
      - postgresql-client-{{ postgres_version }}
    state: present

- name: Enable UFW
  ansible.builtin.ufw:
    state: enabled

- name: Allow ssh
  become: yes
  ufw:
    rule: allow
    port: 22
    proto: tcp

- name: Allow PostgreSQL connections through firewall
  become: yes
  ufw:
    rule: allow
    port: 5432
    proto: tcp

- name: Configure PostgreSQL default user and password
  become: yes
  shell: |
    sudo -u postgres psql -c "ALTER USER postgres PASSWORD '{{ postgres_password }}';"
    exit

- name: Set listen_addresses to all in postgresql.conf
  lineinfile:
    path: /etc/postgresql/{{ postgres_version }}/main/postgresql.conf
    regexp: '^#?listen_addresses\s*=\s*.+$'
    line: "listen_addresses = '*'"

- name: Configure PostgreSQL connection
  become: yes
  template:
    src: templates/pg_hba.conf.j2
    dest: /etc/postgresql/{{ postgres_version }}/main/pg_hba.conf
    owner: postgres
    group: postgres
    mode: '0640'
  notify:
    - restart postgresql

Giải thích (chi tiết từng task):

  • Update apt cache: đầu tiên cập nhật bộ nhớ cache của hệ thống apt trên máy chủ, được sử dụng để yêu cầu quyền root để chạy các task.
  • Install PostgreSQL dependencies: cài đặt các phụ thuộc cần thiết cho cài đặt PostgreSQL. Các gói wget, ca-certificates, gnupg và software-properties-common được cài đặt thông qua apt.
  • Add PostgreSQL repository: thêm kho lưu trữ PostgreSQL vào hệ thống.
  • Add PostgreSQL repository key: thêm khóa cho kho lưu trữ PostgreSQL.
  • Install PostgreSQL: cài đặt PostgreSQL và PostgreSQL client trên máy chủ.
  • Enable UFW: enable firewall để truy cập từ bên ngoài
  • Allow PostgreSQL connections through firewall: mở port 5432 của postgresql
  • Configure PostgreSQL default user and password: thiết lập mật khẩu mặc định cho tài khoản postgres
  • Set listen_addresses to all in postgresql.conf: trong file này chúng ta sẽ tiến hành sửa đổi để cho truy cập từ tất cả các nguồn vì mặc định ban đầu chỉ cho localhost
  • Configure PostgreSQL connection: tiến hành copy file template sang config để cho phép truy cập bằng mật khẩu và từ các địa chỉ khác và kèm restart lại postgres

$ vim handlers/main.yml mở file main.yml của hanlders để khởi tạo chạy các công việc khi thay đổi trạng thái và nội dung sau:

---

- name: restart postgresql
  systemd:
    name: postgresql
    state: restarted

$ vim templates/pg_hba.conf.j2 mở file template để cài đặt cấu hình và nội dung sau:

local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

local   all             all                                     peer
# IPv4 local connections:
host    all             all             0.0.0.0/0               scram-sha-256
# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            scram-sha-256
host    replication     all             ::1/128                 scram-sha-256

$ cd /home/ansible/project di chuyển ra thư mục gốc để tiến hành tạo config playbook để chạy task

$ vim dbservers-config.yml tạo playbook với nội dung sau:

---

- hosts: dbservers # sử dụng host này được khai báo trong inventory.ini
  become: true # chạy với quyền root

  roles:
    - postgresql # role mà chúng ta vừa tạo

Thực hiện xong chúng ta được kết quả:

$ ansible-playbook -i inventory.ini dbservers-config.yml tiến hành chạy playbook để cài đặt postgresql

Tiến hành ssh sang server thứ 3 với IP 10.32.3.132 kiểm tra kết quả cài đặt postgresql

Vậy là chúng ta đã sử dụng Ansible để cài đặt postgresql thành công rồi . Nếu bạn muốn tìm hiểu về DevOps thì có thể theo dõi website của mình, mình luôn hướng tới sự chi tiết, đơn giản, Mình sẽ làm nhiều hướng dẫn hơn về các kỹ năng các tool khác để giúp bạn tối ưu được những tác vụ cũng như tiết kiệm những chi phí khi phát triển phần mềm. Thanks.

 

Mọi thắc mắc bạn có thể liên hệ:

Email: [email protected]