Docker Compose

AnsibleForms, seine RTE und MySQL gemeinsam mit docker-compose oder podman-compose installieren

  1. Voraussetzungen
  2. Einen Installationsort wählen
  3. Das docker-compose-Projekt klonen
  4. Die richtigen Berechtigungen setzen
  5. Eine Container-Engine installieren
  6. Anpassen
  7. Das docker-compose-Projekt starten
  8. Die Anwendung testen
  9. Dateistruktur

Das docker-compose-Projekt betreibt drei Container: MySQL, die AnsibleForms-App und die RTE (Laufzeitumgebung), die die Playbooks ausführt. Es enthält ihre Einstellungen, Beispielformulare und Playbooks, daher ist die einzige weitere Voraussetzung Docker oder Podman mit dem zugehörigen Compose-Werkzeug.

Der Installer lädt dieses Projekt herunter, füllt seine Einstellungen und Secrets aus und startet es mit einem Befehl. Diese Seite richtet es von Hand ein.


Voraussetzungen

Bevor Sie beginnen, benötigen Sie:

  • Linux-Rechner : eine beliebige Distribution, mit bescheidener CPU und wenig Arbeitsspeicher
  • Zugriff auf GitHub : um das docker-compose-Projekt von GitHub herunterzuladen oder zu klonen
  • Docker oder Podman : eine Container-Engine, deren Installation weiter unten beschrieben ist
  • Ein Compose-Werkzeug : Docker Compose oder podman-compose, um die drei Container aus wenigen Konfigurationsdateien zu starten

VIDEO: So installieren Sie AnsibleForms


Einen Installationsort wählen

Legen Sie einen Ordner für das Projekt an; die Beispiele verwenden /srv/apps:

sudo mkdir /srv/apps
cd /srv/apps

Das docker-compose-Projekt klonen

Installieren Sie Git:

sudo apt-get install -y git

Klonen Sie dann das docker-compose-Projekt in diesen Ordner:

sudo git clone https://github.com/ansibleforms/docker.git ansibleforms-docker
cd ansibleforms-docker

Die richtigen Berechtigungen setzen

Die App und die RTE laufen als Benutzer node (uid 1000), geben Sie diesem Benutzer daher den Ordner data:

sudo chown -R 1000:1000 ./data

Wenn Sie von 6 kommen, dessen Container als root lief, führen Sie dasselbe chown einmal aus, bevor Sie 7 starten. MySQL holt sich beim Start seinen eigenen Ordner zurück.


Eine Container-Engine installieren

Installieren Sie Docker oder Podman, jeweils mit dem zugehörigen Compose-Werkzeug:

Installieren Sie Docker Engine mit dem Compose-Plugin aus dem Repository von Docker (siehe die Docker-Installationsanleitungen):

# 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

Sorgen Sie dann dafür, dass Namen innerhalb der Container aufgelöst werden, und starten Sie Docker als Dienst:

sudo mkdir -p /etc/docker
echo "{\"dns-opts\":[\"ndots:15\"]}" | sudo tee /etc/docker/daemon.json
sudo systemctl enable --now docker

Anpassen

Prüfen Sie die Variablen in den Dateien .env und docker-compose.yml und ändern Sie jedes Passwort: MYSQLDB_ROOT_PASSWORD, MYSQLDB_PASSWORD, ADMIN_PASSWORD und RTE_TOKEN. Mehr über die Umgebungsvariablen

Die App verbindet sich mit MySQL als ansibleforms (MYSQLDB_USER), mit allen Rechten auf dem Schema AnsibleForms und keinen anderswo; root ist nur für MySQL selbst da. MySQL legt diesen Benutzer nur bei seinem ersten Start an: eine Installation, die sich bisher als root verbunden hat, legt ihn einmalig an, wie das README des Projekts zeigt.

Die RTE wird nicht auf dem Host veröffentlicht. Seit 7.3.0 verbindet sich die App mit RTE_TOKEN auf http://rte:8000 und hält einen WebSocket offen (RTE_MODE=inbound, siehe Modi): die RTE bekommt keine Datenbankeinstellungen und nicht die .env, nur ihr Token und einige eigene Einstellungen in docker-compose.yml. Der Konfigurations-Seed data/seed.yaml deklariert RTE-Anmeldedaten mit dem Token und dieser Adresse sowie den Standard-Runner rte, Modus inbound, der sich damit anmeldet. Die RTE führt die Playbooks aus demselben Ordner data aus (RTE_FILES=local). Wenn Ihre Playbooks weitere Collections oder Python-Bibliotheken brauchen, bauen Sie eine eigene RTE und lassen den Dienst rte darauf zeigen (siehe Eine eigene RTE bauen).


Das docker-compose-Projekt starten

Starten Sie die drei Container im Hintergrund. Die App wartet, bis MySQL gesund ist, und verbindet sich dann mit der RTE:

sudo docker compose up -d
# with the older standalone tool : sudo docker-compose up -d

Die Anwendung testen

Sobald die Container laufen, öffnen Sie AnsibleForms im Browser:

  • Öffnen Sie https://your_ip (Port 443, siehe WEBAPP_LOCAL_PORT in der .env-Datei)
  • Melden Sie sich als admin mit dem ADMIN_PASSWORD aus der .env-Datei an; solange es noch das Standardpasswort AnsibleForms!123 ist, wählen Sie ein neues Passwort
  • Prüfen Sie unter Verbindungen > Runner, dass die RTE als rte aufgeführt ist, der Standard-Runner, und dass ihre Seite die Verbindung als Verbunden zeigt
  • Nächste Schritte:
    • Erstellen Sie Formulare, indem Sie YAML-Dateien in den Ordner data/forms/ legen oder den eingebauten Designer verwenden
    • Legen Sie Ihre Playbooks in den Ordner data/playbooks/
    • Fügen Sie eine LDAP-Verbindung hinzu
    • Fügen Sie Benutzer und Gruppen hinzu
    • Fügen Sie Runner für Vorlagenformulare hinzu: AWX, AAP oder Ascender, Semaphore, Rundeck oder Jenkins
    • Fügen Sie Anmeldedaten für externe Verbindungen hinzu, etwa andere MySQL-Server oder REST-APIs, oder um sie an Ansible-Playbooks zu übergeben
    • Verbinden Sie Git-Repositories und legen Sie fest, ob Ihre Formulare und/oder Playbooks mit einem Repository synchronisiert werden

Dateistruktur

Das docker-compose-Projekt hat folgende Ordnerstruktur:

.
├── 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)