Vagrant - Ansible - 安装 PostgreSQL 和 Postgis

Vagrant - Ansible - 安装 PostgreSQL 和 Postgis

我正在尝试在 Vagrant VM 上使用 Ansible 安装 PostgreSQL 和 Postgis。

VM 仅在本地用于本地开发,这就是我授予数据库访问权限的原因。

但是我在安装和访问 PostgreSQL 时遇到了一些问题(还没有到达 Postgis 的步骤)。

我的 Vagrant VM 是ubuntu/jammy64

首先,我在虚拟机上安装了 PHP。

然后我尝试安装 PostrgreSQL。接下来,我psql对 Ansible 的任务是:

---
- name: Install
  apt:
    update_cache: true
    name:
      - bash
      - openssl
      - libssl-dev
      - libssl-doc
      - postgresql
      - postgresql-contrib
      - libpq-dev
      - python3-psycopg2
    state: present

- name: Check if initialized
  stat:
    path: "{{ postgresql_data_dir }}/pg_hba.conf"
  register: postgres_data

- name: Empty data dir
  file:
    path: "{{ postgresql_data_dir }}"
    state: absent
  when: not postgres_data.stat.exists

- name: Initialize
  shell: "{{ postgresql_bin_path }}/initdb -D {{ postgresql_data_dir }}"
  become: true
  become_user: postgres
  when: not postgres_data.stat.exists

- name: Start and enable service
  service:
    name: postgresql
    state: started
    enabled: true

- name: Update pg_ident.conf - allow user to auth with postgres
  lineinfile:
    dest: "/etc/postgresql/{{ postgresql_version }}/main/pg_ident.conf"
    insertafter: "# MAPNAME       SYSTEM-USERNAME         PG-USERNAME"
    line: "user_{{ user }}             {{ user }}               postgres"

- name: Update pg_hba.conf - disable peer for postgres user
  lineinfile:
    dest: "/etc/postgresql/{{ postgresql_version }}/main/pg_hba.conf"
    regexp: "local   all             postgres                                peer"
    line: "#local   all             postgres                                peer"

- name: Update pg_hba.conf - trust all connection
  lineinfile:
    dest: "/etc/postgresql/{{ postgresql_version }}/main/pg_hba.conf"
    regexp: "local   all             all                                     peer"
    line: "local   all             all                                     trust"

- name: Restart
  service:
    name: postgresql
    state: restarted
    enabled: true

- name: "Create database {{ postgresql_db }}"
  become: true
  become_user: "{{ postgresql_user }}"
  postgresql_db:
    name: "{{ postgresql_db }}"
    state: present

- name: "Create user {{ user }}"
  become: yes
  become_user: "{{ postgresql_user }}"
  postgresql_user:
    name: "{{ user }}"
    password: "{{ user }}"
    state: present

- name: "Grant user {{ user }}"
  become: yes
  become_user: "{{ postgresql_user }}"
  postgresql_privs:
    type: database
    database: "{{ postgresql_db }}"
    roles: "{{ user }}"
    grant_option: no
    privs: all
  notify: psql restart

我的变量:

---
user: ojirai
postgresql_version: 14
postgresql_bin_path: "/usr/lib/postgresql/{{ postgresql_version }}/bin"
postgresql_data_dir: "/var/lib/postgresql/{{ postgresql_version }}/main"
postgresql_host: localhost
postgresql_port: 5432
postgresql_db: "db_{{ user }}"
postgresql_user: "{{ user }}"
postgresql_password: "{{ user }}"
ansible_ssh_pipelining: true

但是当我玩 Ansible 的剧本时,我收到了以下反馈:

TASK [include_role : psql] *****************************************************

TASK [psql : Install] **********************************************************
ok: [192.168.50.50]

TASK [psql : Check if initialized] *********************************************
ok: [192.168.50.50]

TASK [psql : Empty data dir] ***************************************************
skipping: [192.168.50.50]

TASK [psql : Initialize] *******************************************************
skipping: [192.168.50.50]

TASK [psql : Start and enable service] *****************************************
ok: [192.168.50.50]

TASK [psql : Create database db_ojirai] ****************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was:      Is the server running locally and accepting connections on that socket?
fatal: [192.168.50.50]: FAILED! => {"changed": false, "msg": "unable to connect to database: connection to server on socket \"/var/run/postgresql/.s.PGSQL.5432\" failed: No such file or directory\n\tIs the server running locally and accepting connections on that socket?\n"}

PLAY RECAP *********************************************************************
192.168.50.50              : ok=20   changed=14   unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

有人建议我检查一下https://stackoverflow.com/questions/30546592/is-the-server-running-locally-and-accepting-connections-on-unix-domain-socket但错误仍然存​​在。我尝试了以下过程:

  • vagrant destroy > export vars (文章中建议) > vagrant up > ansible deploy
  • 导出变量(文章中建议)> vagrant reload > ansible deploy
  • 导出变量(文章中建议)> vagrant destroy > vagrant up > ansible deploy
  • vagrant destroy > vagrant up > export vars (文章中建议) > ansible deploy

大家能解释一下我的错误在哪里吗?是不是我的 PostgreSQL 安装有问题?

感谢您的反馈!

相关内容