gsoft.eventstore
Rol de Ansible EventStoreDB
Un rol de Ansible que instala y configura una máquina Linux para ser utilizada como un servidor EventStoreDB.
Consulta ejemplos de uso aquí.
Requisitos
Ubuntu 14.04 (Trusty) LTS o superior.
Variables del Rol
Las variables disponibles se enumeran a continuación, junto con valores predeterminados (ver defaults/main.yml
):
eventstore_version: 20.10.4
eventstore_admin_password: changeit
eventstore_admin_new_password: null
eventstore_config_file: "{{ role_path }}/templates/eventstore.conf.j2"
eventstore_wait_for_http: true
eventstore_wait_for_http_timeout: 30
eventstore_generate_node_certitificate: false
eventstore_certificate_path: /etc/eventstore/certs
eventstore_ca_key_path: ./ca/ca.key
eventstore_ca_cert_path: ./ca/ca.crt
eventstore_node_cert_days: 365
eventstore_node_cert_out: ./node
eventstore_node_cert_ip_addresses:
- 127.0.0.1
- "{{ ansible_default_ipv4.address }}"
eventstore_node_cert_dns_names:
- localhost
- "{{ inventory_hostname }}"
Configuración
Por defecto, el archivo de configuración (eventstore.conf) es básico y contiene lo siguiente:
---
ClusterSize: 1
Seguridad
A diferencia de versiones anteriores, EventStoreDB v20+ es seguro por defecto. Esto significa que debes proporcionar certificados válidos y una configuración para que el nodo de la base de datos funcione.
Este rol asume que el certificado CA ya está presente en tu máquina. Consulta este repositorio para ejemplos sobre cómo podrías provisionar tus certificados antes de ejecutar este rol.
Certificados de nodo
Si deseas generar los certificados de nodo con el rol, configura eventstore_generate_node_certitificate: true
. La generación de certificados seguirá los valores predeterminados de la siguiente manera (se pueden cambiar):
eventstore_certificate_path: /etc/eventstore/certs
eventstore_ca_key_path: ./ca/ca.key
eventstore_ca_cert_path: ./ca/ca.crt
eventstore_node_cert_days: 365
eventstore_node_cert_out: ./node
eventstore_node_cert_ip_addresses:
- 127.0.0.1
- "{{ ansible_default_ipv4.address }}"
eventstore_node_cert_dns_names:
- localhost
- "{{ inventory_hostname }}"
Esto generará los siguientes archivos:
/etc/eventstore/certs/node/node.key
/etc/eventstore/certs/node/node.crt
con SANs que coinciden con la dirección IP de bucle invertido/DNS, la dirección IP predeterminada (interfaz eth0) y el DNS del nombre del host.
Ejemplo de Playbook
Modificar la configuración es tan fácil como crear tu propio archivo YAML y especificar la ruta con la variable eventstore_config_file
. Por ejemplo:
Estructura de carpeta de ejemplo:
- playbook.yml
- files/eventstore.conf.j2
Contenido de ejemplo para eventstore.conf.j2
:
** Ve la documentación oficial de configuración para todas las opciones posibles. **
# Configuración de Certificados
CertificateFile: /etc/eventstore/certs/node/node.crt
CertificatePrivateKeyFile: /etc/eventstore/certs/node/node.key
TrustedRootCertificatesPath: /etc/eventstore/certs/ca
# Configuración de Red
IntIp: {{ ansible_default_ipv4.address }}
ExtIp: {{ ansible_default_ipv4.address }}
EnableExternalTcp: true
EnableAtomPubOverHTTP: true
# Chismes de clúster
ClusterSize: 3
DiscoverViaDns: true
ClusterDns: eventstore.dns
# Configuración de Proyecciones
RunProjections: All
Ejemplo de playbook.yml
- hosts: all
roles:
- eventstore
vars:
eventstore_generate_node_certitificate: true
eventstore_config_file: ./files/eventstore.conf.j2
eventstore_ca_key: "{{ lookup('file', 'ca/ca.key') }}"
eventstore_ca_cert: "{{ lookup('file', 'ca/ca.crt') }}"
eventstore_node_cert_ip_addresses:
- 127.0.0.1
- "{{ ansible_default_ipv4.address }}"
eventstore_node_cert_dns:
- localhost
- "{{ inventory_hostname }}"
- eventstore.dns
pre_tasks:
- name: Asegurar que existe el grupo eventstore
ansible.builtin.group:
name: eventstore
state: present
- name: Asegurar que existe el usuario eventstore
ansible.builtin.user:
name: eventstore
state: present
- name: Crear carpeta para certificado CA de eventstore
ansible.builtin.file:
path: /etc/eventstore/certs/ca
state: directory
- name: Agregar archivos de certificado CA de eventstore
ansible.builtin.copy:
content: "{{ item.content }}"
dest: "{{ item.dest }}"
owner: eventstore
group: eventstore
mode: '0600'
no_log: true
loop:
- { content: "{{ eventstore_ca_key }}", dest: /etc/eventstore/certs/ca/ca.key }
- { content: "{{ eventstore_ca_cert }}", dest: /etc/eventstore/certs/ca/ca.crt }
- name: Confiar en el certificado CA de eventstore
ansible.builtin.copy:
content: "{{ eventstore_ca_cert }}"
dest: /usr/local/share/ca-certificates/eventstore-ca.crt
mode: '0644'
notify:
- actualizar ca de confianza
handlers:
- name: actualizar ca de confianza
shell: /usr/sbin/update-ca-certificates
Licencia
Copyright © 2021, GSoft inc. Este código está licenciado bajo la Licencia Apache, Versión 2.0. Puedes obtener una copia de esta licencia en https://github.com/gsoft-inc/gsoft-license/blob/master/LICENSE.
ansible-galaxy install gsoft.eventstore