Docker Compose
Instal·la AnsibleForms, el seu RTE i MySQL alhora amb docker-compose o podman-compose
- Requisits previs
- Tria una ubicació per a la instal·lació
- Clona el projecte de docker-compose
- Defineix els permisos adequats
- Instal·la un motor de contenidors
- Personalitza
- Inicia el projecte de docker-compose
- Prova l’aplicació
- Estructura de fitxers
El projecte de docker-compose executa tres contenidors: MySQL, l’aplicació AnsibleForms i l’RTE (runtime environment, entorn d’execució) que executa els playbooks. Conté la seva configuració, formularis i playbooks d’exemple, així que l’únic altre requisit és Docker o Podman amb la seva eina compose.
L’instal·lador baixa aquest projecte, n’emplena la configuració i els secrets, i l’inicia amb una sola ordre. Aquesta pàgina el configura a mà.
Requisits previs
Abans de començar, necessites:
- Una màquina Linux : qualsevol distribució, amb una CPU i una memòria modestes
- Accés a GitHub : per baixar o clonar el projecte de docker-compose de GitHub
- Docker o Podman : un motor de contenidors, que s’instal·la a continuació
- Una eina compose : Docker Compose o podman-compose, per iniciar els tres contenidors a partir d’uns quants fitxers de configuració
VÍDEO: Com instal·lar AnsibleForms
Tria una ubicació per a la instal·lació
Crea una carpeta per al projecte; els exemples fan servir /srv/apps:
sudo mkdir /srv/apps
cd /srv/apps
Clona el projecte de docker-compose
Instal·la Git:
sudo apt-get install -y git
sudo apt-get install -y git
sudo dnf install -y git
Després clona el projecte de docker-compose en aquesta carpeta:
sudo git clone https://github.com/ansibleforms/docker.git ansibleforms-docker
cd ansibleforms-docker
Defineix els permisos adequats
L’aplicació i l’RTE s’executen amb l’usuari node (uid 1000), així que dona a aquest usuari la carpeta data:
sudo chown -R 1000:1000 ./data
Si véns de la 6, el contenidor de la qual s’executava com a root, executa el mateix chown una vegada abans d’iniciar la 7. MySQL recupera la seva pròpia carpeta quan s’inicia.
Instal·la un motor de contenidors
Instal·la Docker o Podman, cadascun amb la seva eina compose:
Instal·la Docker Engine amb el plugin Compose des del repositori de Docker (consulta els manuals d’instal·lació de Docker):
# Docker's own apt repository
sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
| sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Docker's own apt repository
sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
| sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Docker's own dnf repository (Rocky / Alma : use .../linux/centos/docker-ce.repo)
sudo dnf install -y dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Després permet que els noms es resolguin dins dels contenidors, i inicia Docker com a servei:
sudo mkdir -p /etc/docker
echo "{\"dns-opts\":[\"ndots:15\"]}" | sudo tee /etc/docker/daemon.json
sudo systemctl enable --now docker
Podman no necessita cap servei. Instal·la’l juntament amb podman-compose:
sudo apt-get install -y podman podman-compose
sudo apt-get install -y podman podman-compose
sudo dnf install -y podman
# podman-compose comes from EPEL (on RHEL, enable EPEL as Red Hat documents it)
sudo dnf install -y epel-release
sudo dnf install -y podman-compose
Personalitza
Revisa les variables dels fitxers .env i docker-compose.yml, i canvia totes les contrasenyes: MYSQLDB_ROOT_PASSWORD, MYSQLDB_PASSWORD, ADMIN_PASSWORD i RTE_TOKEN. Més informació sobre les variables d’entorn
L’aplicació es connecta a MySQL com a ansibleforms (MYSQLDB_USER), amb tots els permisos sobre l’esquema AnsibleForms i cap més enlloc; root només és per al mateix MySQL. MySQL només crea aquest usuari en el seu primer inici: una instal·lació que fins ara es connectava com a root el crea una vegada, tal com mostra el README del projecte.
L’RTE no es publica a l’amfitrió. Des de la 7.3.0 l’aplicació el truca a http://rte:8000 amb RTE_TOKEN i hi manté un WebSocket obert (RTE_MODE=inbound, consulta Modes): l’RTE no rep cap configuració de la base de dades ni el .env, només el seu token i uns quants paràmetres propis a docker-compose.yml. El config seed data/seed.yaml declara una credencial d’RTE amb el token i aquesta adreça, i el runner predeterminat rte, en mode inbound, que s’hi autentica. L’RTE executa els playbooks des de la mateixa carpeta data (RTE_FILES=local). Quan els teus playbooks necessitin més col·leccions o biblioteques de Python, construeix un RTE propi i fes que el servei rte hi apunti (consulta Construir el teu propi RTE).
Inicia el projecte de docker-compose
Inicia els tres contenidors en segon pla. L’aplicació espera fins que MySQL està en bon estat, i després truca a l’RTE:
sudo docker compose up -d
# with the older standalone tool : sudo docker-compose up -d
sudo podman-compose up -d
# podman is service-less : you can run it as any user, with or without sudo
Prova l’aplicació
Un cop els contenidors estan en marxa, obre AnsibleForms en un navegador:
- Obre
https://your_ip(port 443, consultaWEBAPP_LOCAL_PORTal fitxer .env) - Inicia sessió com a
adminamb l’ADMIN_PASSWORDdel fitxer.env; mentre encara sigui el predeterminatAnsibleForms!123, tria una contrasenya nova - Comprova a Connexions > Runners que l’RTE apareix com a
rte, el runner predeterminat, i que la seva pàgina mostra la seva Connexió com a Connectat - Passos següents:
- Crea formularis afegint fitxers YAML a la carpeta data/forms/ o fent servir el dissenyador integrat
- Afegeix els teus playbooks a la carpeta data/playbooks/
- Afegeix una connexió LDAP
- Afegeix usuaris i grups
- Afegeix runners per als formularis de plantilles: AWX, AAP o Ascender, Semaphore, Rundeck o Jenkins
- Afegeix credencials per a connexions externes, com ara altres servidors MySQL o API REST, o per passar-les als playbooks d’Ansible
- Connecta repositoris git i tria si els teus formularis i/o playbooks se sincronitzen amb un repositori
Estructura de fitxers
El projecte de docker-compose té l’estructura de carpetes següent:
.
├── docker-compose.yml # the mysqldb, app and rte containers
├── .env # the settings, see the variables below
└── data # everything that must survive an upgrade, mounted in the app and the rte
├── ansible # mounted in the rte only
│ ├── ansible.cfg # ansible settings
│ ├── roles # roles you install
│ └── collections # collections you install
├── forms # 1 or more yaml files with forms
├── functions # custom javascript functions and jq definitions
├── git # .gitconfig for repository connections
├── mysql
│ ├── my.cnf # MySQL settings
│ └── db # the database files (created at first start)
├── playbooks # your ansible playbooks, with sample maintenance playbooks
├── repositories # local clones of your git repositories
├── ssh # the client sshkey (created at first start)
├── config.yaml # categories, roles and constants
├── seed.yaml # the config seed: registers the rte as the default runner
├── certificates # self-signed certificates (created at first start) - replace with your own
├── logs # the logfiles (created at first start)
├── backups # database backups (created when needed)
└── forms_backups # form backups (created when needed)