Cần tự động hóa việc cài đặt PostgreSQL 16 và đảm bảo nó sử dụng đúng các tệp postgresql.conf
và pg_hba.conf
của bạn? Đây là cách thiết lập như một lập trình viên đã quá mệt mỏi với ssh
và vim
.
Cấu trúc thư mục
Chúng ta sẽ sử dụng cấu trúc role điển hình của Ansible. Thư mục roles/db
của bạn sẽ trông như sau:
roles/db/
├── tasks/
│ ├── main.yml
│ └── install_postgres.yml
├── templates/
│ ├── pg_hba.conf.j2
│ └── postgresql.conf.j2
Tệp Inventory
Ví dụ hosts.ini
:
[db]
my-postgres-host ansible_host=192.168.0.10 ansible_user=ubuntu
db.yml
(Entry point)
- name: Setup PostgreSQL hosts: db become: yes roles: - db
roles/db/tasks/main.yml
---
- include_tasks: install_postgres.yml
roles/db/tasks/install_postgres.yml
---
- name: Update apt cache apt: update_cache: yes - name: Install postgresql-common apt: name: postgresql-common state: present - name: Run pgdg script command: /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh args: creates: /etc/apt/sources.list.d/pgdg.list - name: Update apt cache after adding PGDG apt: update_cache: yes - name: Install PostgreSQL 16 and contrib apt: name: - postgresql-16 - postgresql-contrib-16 state: present - name: Set custom postgresql.conf template: src: postgresql.conf.j2 dest: /etc/postgresql/16/main/postgresql.conf owner: postgres group: postgres mode: 0644 notify: Restart PostgreSQL - name: Set custom pg_hba.conf template: src: pg_hba.conf.j2 dest: /etc/postgresql/16/main/pg_hba.conf owner: postgres group: postgres mode: 0640 notify: Restart PostgreSQL
roles/db/handlers/main.yml
---
- name: Restart PostgreSQL service: name: postgresql state: restarted
roles/db/templates/postgresql.conf.j2
Cấu hình hoạt động tối thiểu (có thể tùy chỉnh thêm):
listen_addresses = '*'
port = 5432
max_connections = 100
shared_buffers = 128MB
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql.log'
roles/db/templates/pg_hba.conf.j2
Cho phép truy cập cục bộ và truy cập từ xa dùng mật khẩu:
# TYPE DATABASE USER ADDRESS METHOD
local all all peer
host all all 127.0.0.1/32 md5
host all all 0.0.0.0/0 md5
Chạy Playbook
ansible-playbook -i hosts.ini db.yml
Mẹo bổ sung
Để đặt lại mật khẩu cho user postgres sau khi cài đặt:
- name: Set postgres user password become_user: postgres shell: psql -c "ALTER USER postgres WITH PASSWORD '{{ postgres_password }}';"
Khai báo postgres_password
trong roles/db/vars/main.yml
.
Vậy là xong — hạ tầng của bạn giờ đây sẽ tự động cài đặt PostgreSQL 16 với cấu hình được thiết lập theo yêu cầu cụ thể.