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.
Nội dung
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]