Aus dem Quellcode

AnsibleForms aus dem Quellcode bauen und mit Node.js betreiben

  1. Wie der Code aufgebaut ist
  2. Voraussetzungen
  3. Den Code holen
  4. Bauen
  5. Konfigurieren
  6. Ausführen
  7. Erster Start

Wie der Code aufgebaut ist

Das Repository enthält zwei Node.js-Anwendungen, die ein Build zu einer zusammenführt:

  • client : die Weboberfläche, in Vue 3 geschrieben und mit Vite zu statischen Dateien gebaut
  • server : die API, in Express geschrieben. Sie übergibt die Jobs an Runner, verbindet sich mit der Datenbank und liefert den gebauten Client aus. Mit AF_ROLE=rte gestartet, ist derselbe Server die RTE (Laufzeitumgebung), die die Playbooks ausführt

Nur der Client wird gebaut; seine Ausgabe landet im Ordner views des Servers, wie im Docker-Image.


Voraussetzungen

Bauen und Betreiben aus dem Quellcode erfordert solide Linux-Kenntnisse und etwas Wissen über Node.js. Sie installieren jede Komponente selbst. Um AnsibleForms ohne Container und ohne eigenen Build zu betreiben, erledigt die native Installation des Installers all das für Sie:

  • Node.js 26 (die Version in .nvmrc; mindestens 24), mit npm
  • Git, um den Code zu holen und Repositories zu synchronisieren
  • OpenSSH-Client, für Git über SSH, und sshpass, für Playbooks, die sich mit einem SSH-Passwort verbinden
  • MariaDB-Client (mariadb, mariadb-dump), für Backups und Wiederherstellungen, auch bei einem MySQL-Server
  • MySQL 8+ oder MariaDB, vom Server aus erreichbar
  • Ansible, für den RTE-Prozess, der die Playbooks ausführt (ansible-playbook im Pfad). Der App-Prozess selbst braucht weder Ansible noch Python, und mit ausschließlich Vorlagenformularen (AWX, AAP, Ascender und die anderen Runner) brauchen Sie gar keine RTE

Installieren Sie sie für Ihre Distribution:

Node.js 26 kommt aus dem NodeSource-Repository, die anderen Werkzeuge aus Ubuntu selbst:

curl -fsSL https://deb.nodesource.com/setup_26.x | sudo -E bash -
sudo apt-get install -y nodejs git openssh-client sshpass mariadb-client python3 python3-pip ansible

Prüfen Sie node --version (26) und ansible-playbook --version; für die Datenbank und ihren Benutzer siehe MySQL installieren.


Den Code holen

Klonen Sie das Repository in einen Ordner Ihrer Wahl, der dem Benutzer gehört, der die Anwendung betreiben wird. Die Beispiele verwenden /srv/apps/ansibleforms:

sudo mkdir -p /srv/apps
sudo chown $USER /srv/apps
cd /srv/apps
git clone https://github.com/ansibleforms/ansibleforms.git
cd ansibleforms

Bauen

Bauen Sie in drei Schritten, vom Repository-Ordner aus. Bauen Sie zuerst den Client:

cd client
npm ci
npm run build

Installieren Sie dann die Abhängigkeiten des Servers:

cd ../server
npm ci --omit=dev

Kopieren Sie zuletzt den gebauten Client in den Ordner views des Servers:

rm -rf views
mkdir views
cp -r ../client/dist/. views/

Konfigurieren

Der Server liest seine Einstellungen aus Umgebungsvariablen und, in Produktion, zusätzlich aus server/persistent/.env, der Datei, in die die Einstellungsseiten schreiben.

Gehen Sie von der Beispieldatei im Wurzelverzeichnis des Repositorys aus und setzen Sie mindestens die MySQL-Verbindung (DB_HOST, DB_PORT, DB_USER, DB_PASSWORD):

cd /srv/apps/ansibleforms/server
mkdir -p persistent
cp ../.env.example persistent/.env

Alle Variablen sind unter Umgebungsvariablen beschrieben. Alles andere wird standardmäßig in server/persistent gespeichert: config.yaml, der Ordner forms und selbstsignierte Zertifikate werden dort beim ersten Start angelegt, neben den Protokollen. Legen Sie Ihre Playbooks in server/persistent/playbooks ab, oder lassen Sie ANSIBLE_PATH in der Umgebung der RTE, die es liest, auf einen anderen Ort zeigen.


Ausführen

Betreiben Sie AnsibleForms in Produktion oder im Entwicklungsmodus, um am Code selbst zu arbeiten:

Starten Sie den Server im Produktionsmodus aus dem Ordner server:

cd /srv/apps/ansibleforms/server
npm run start

Eine von der Kommandozeile gestartete Anwendung stoppt, wenn Sie sich abmelden. PM2 hält sie im Hintergrund am Laufen, startet sie nach einem Absturz neu und startet sie beim Booten wieder:

sudo npm install -g pm2

cd /srv/apps/ansibleforms/server
NODE_ENV=production pm2 start index.js --name ansibleforms
pm2 save
pm2 startup   # prints the command that starts PM2 at boot

Playbooks laufen auf einer RTE: starten Sie denselben Server ein zweites Mal mit AF_ROLE=rte, auf einem eigenen Port. Die App verbindet sich mit ihr und hält einen WebSocket offen (RTE_MODE=inbound, siehe Modi), und sie führt die Playbooks aus denselben Ordnern aus (RTE_FILES=local). Sie liest ebenfalls persistent/.env, verwendet aber keine der Datenbankeinstellungen daraus. Fügen Sie das Token, das App und RTE teilen, mindestens 16 Zeichen, und den Konfigurations-Seed, der die RTE deklariert, zu persistent/.env hinzu:

RTE_TOKEN=<at least 16 characters>
CONFIG_SEED_PATH=/srv/apps/ansibleforms/server/persistent/seed.yaml

Der Konfigurations-Seed deklariert RTE-Anmeldedaten mit der Adresse der RTE und ihrem Token sowie den Standard-Runner rte, der sich damit anmeldet:

version: 1
credentials:
  items:
    - name: rte
      credential_type: rte
      url: http://127.0.0.1:8010
      password: ${RTE_TOKEN}
runners:
  items:
    - name: rte
      type: rte
      rte_mode: inbound
      credential: rte
      is_default: true

Ohne Seed fügen Sie sie unter Verbindungen > Anmeldedaten (RTE-Anmeldedaten mit dieser Adresse und dem Token) und Verbindungen > Runner (Typ RTE, Modus Eingehend) hinzu. Starten Sie dann die RTE, nur auf 127.0.0.1:

cd /srv/apps/ansibleforms/server
AF_ROLE=rte RTE_MODE=inbound RTE_FILES=local PORT=8010 HTTPS=0 LISTEN_HOST=127.0.0.1 \
  NODE_ENV=production pm2 start index.js --name ansibleforms-rte
pm2 save

Die RTE-Einstellungen sind auf der Seite Eine RTE betreiben beschrieben. Prüfen Sie, dass PM2 beide Prozesse aufführt:

pm2 status

Beide sind online:

+----+------------------+------+---------+------+--------+----------+--------+-----+---------+------+----------+
| id | name             | mode | version | pid  | uptime | restarts | status | cpu | mem     | user | watching |
+----+------------------+------+---------+------+--------+----------+--------+-----+---------+------+----------+
| 0  | ansibleforms     | fork | 7.0.0   | 3104 | 8s     | 0        | online | 0%  | 120.1mb | root | disabled |
| 1  | ansibleforms-rte | fork | 7.0.0   | 3187 | 5s     | 0        | online | 0%  | 80.4mb  | root | disabled |
+----+------------------+------+---------+------+--------+----------+--------+-----+---------+------+----------+

Erster Start

Öffnen Sie den Server im Browser (mit der Beispiel-.env unter https://your_ip:8443). Bei einer leeren Datenbank wird das Schema beim ersten Start angelegt.

Die Standard-Anmeldedaten des Administrators sind:

  • Benutzername : admin
  • Passwort : AnsibleForms!123