Wymagania wstępne
Co jest potrzebne przed instalacją AnsibleForms
Środowisko uruchomieniowe
AnsibleForms działa jako kontener, jako usługi systemd bezpośrednio na serwerze lub, dla tych, którzy budują go samodzielnie, jako aplikacja Node.js:
| Instalacja | Czego potrzebujesz |
|---|---|
| Instalator | Linux na amd64 lub arm64, curl lub wget i sha256sum oraz to, czego wymaga silnik, na którym instaluje (poniżej) |
| Natywnie | Uprawnień roota, systemd i obsługiwanego Linuksa (Ubuntu, Debian, RHEL i jego klony, SUSE); resztę instaluje instalator |
| Docker | Docker lub Podman oraz własnego serwera MySQL |
| Docker Compose | Docker Compose lub podman-compose; projekt uruchamia też MySQL |
| Kubernetes | Klastra, Helm 3 i StorageClass (lub wcześniej utworzonych PersistentVolumes) |
| Ze źródeł | Node.js 26 (co najmniej 24) z npm, Git oraz Ansible dla procesu RTE, który uruchamia playbooki |
Obraz aplikacji, ghcr.io/ansibleforms/ansibleforms, zawiera Node.js i narzędzia wywoływane przez serwer (git, ssh, klienta mariadb i ytt), ale nie zawiera Pythona ani Ansible. Playbooki działają na RTE (runtime environment), drugim kontenerze z ghcr.io/ansibleforms/ansibleforms-rte-full lub z obrazu, który budujesz na bazie ansibleforms-rte-core (zobacz Skalowanie). Formularze, które tylko uruchamiają szablony w AWX, AAP, Ascender, Semaphore, Rundeck lub Jenkins, nie potrzebują RTE.
Baza danych
AnsibleForms przechowuje swoje zadania, użytkowników, poświadczenia i połączenia w MySQL 8 lub nowszym albo w MariaDB.
Przy pierwszym uruchomieniu samo tworzy schemat AnsibleForms. Daj mu osobnego użytkownika bazy danych, z uprawnieniami tylko do tego schematu, a nie roota:
CREATE USER 'ansibleforms'@'%' IDENTIFIED BY '<password>';
GRANT ALL PRIVILEGES ON `AnsibleForms`.* TO 'ansibleforms'@'%';
To wszystko, czego potrzebuje: tworzy i aktualizuje schemat, wykonuje kopie zapasowe i, przy kilku workerach, kończy sesję tego, który przestał działać. Strona Stan i dziennik ostrzegają, gdy użytkownik ma uprawnienia do wszystkich baz danych. Węzły aplikacji i workery łączą się z tym użytkownikiem. RTE w trybie gniazda (wychodzącym lub przychodzącym, zobacz Tryby) nie przechowuje poświadczeń do bazy danych: łączy się z nią tylko RTE w trybie bazy danych, przestarzałym od wersji 7.3.0. Aby samodzielnie utworzyć schemat, ustaw ALLOW_SCHEMA_CREATION na 0. Projekt Docker Compose i chart Helm (który używa mysql:8.4) uruchamiają bazę danych za Ciebie.
Wymiarowanie
Nie ma zmierzonych wymagań: obciążenie zależy głównie od tego, ile zadań działa jednocześnie i ile wyniku zapisują. Domyślne zasoby chartu Helm są rozsądnym punktem wyjścia dla małego zespołu:
| Komponent | Requests | Limits | Wolumen |
|---|---|---|---|
| AnsibleForms | 1 CPU, 1 GiB pamięci | 4 CPU, 4 GiB pamięci | 10 GiB |
| MySQL | 0.5 CPU, 512 MiB pamięci | 2 CPU, 2 GiB pamięci | 10 GiB |
Kontener aplikacji nie uruchamia żadnego playbooka. Każdy playbook to proces ansible-playbook, ze swoimi forkami, na RTE: dobierz CPU i pamięć każdego RTE do playbooków, które uruchamia jednocześnie, maksymalnie RTE_MAX_JOBS (domyślnie 10), i uruchom więcej RTE, aby uruchamiać więcej. Zadania działające w AWX, AAP, Ascender lub na innych runnerach szablonów niewiele kosztują AnsibleForms.
Wynik zadań jest domyślnie przechowywany w bazie danych bezterminowo. Na mocno obciążonej instancji ustaw JOB_RETENTION_DAYS, aby baza danych nie rosła bez ograniczeń.
Sieć
Aplikacja i każde RTE nasłuchują na własnym porcie i otwierają połączenia wychodzące do systemów, z których korzystają Twoje formularze i ustawienia.
Ruch przychodzący
Serwer nasłuchuje na porcie 8000 (PORT), przez HTTP lub, gdy HTTPS ma wartość 1, przez HTTPS. Projekt Docker Compose publikuje go na porcie 443, a chart Helm udostępnia go przez service lub ingress. RTE również nasłuchuje na własnym PORT, ale wywołuje go tylko aplikacja: nie wystawiaj go do sieci publicznej. Wychodzące RTE w ogóle nie potrzebuje portu przychodzącego: samo łączy się z aplikacją na porcie aplikacji.
Ruch wychodzący
Otwórz połączenia z AnsibleForms do systemów, których używasz:
| Cel | Do czego służy |
|---|---|
| MySQL / MariaDB | Baza danych AnsibleForms (DB_HOST, DB_PORT, domyślnie 3306) |
| RTE | Łączenie się z przychodzącym RTE pod adresem jego runnera przez jeden WebSocket albo wywoływanie RTE w trybie bazy danych pod jego RTE_URL, które wtedy samo łączy się z MySQL; wychodzące RTE łączy się zamiast tego z aplikacją (zobacz Tryby) |
| AWX, AAP, Ascender, Semaphore, Rundeck, Jenkins | Uruchamianie i śledzenie szablonów i jobów na runnerach, przez ich API HTTP(S) |
| Zarządzane hosty | Playbooki łączą się z nimi z RTE, na przykład przez SSH lub WinRM |
| LDAP, Entra ID, OIDC | Logowanie kontami z katalogu lub z jednokrotnego logowania (SSO) |
| Serwery Git | Klonowanie i pobieranie repozytoriów, przez HTTPS lub SSH |
| API REST i bazy danych | Źródła danych wyrażeń i zapytań w Twoich formularzach |
| HashiCorp Vault, CyberArk | Odczytywanie poświadczeń z magazynu sekretów |
| Serwery pocztowe, Slack, Teams, Telegram, webhooki | Powiadomienia o zadaniach i prośby o zatwierdzenie, przez kanały powiadomień |
| Dostawca modelu | Asystent czatu, tylko gdy jest włączony |
Aby ograniczyć, które hosty mogą wywoływać funkcje REST w wyrażeniach, zobacz REST_ALLOWED_HOSTS i REST_DENIED_HOSTS.
Przeglądarka
Aplikacja webowa jest przeznaczona dla aktualnych przeglądarek: Chrome lub Edge 111, Firefox 114, Safari 16.4 lub nowszych. Starsze przeglądarki nie są obsługiwane.
Skalowanie
Domyślnie jeden kontener AnsibleForms uruchamia razem aplikację webową i pracę w tle, obok jednego RTE.
Aby obsłużyć więcej użytkowników, uruchom kilka węzłów aplikacji za load balancerem (AF_ROLE=app) obok workera (AF_ROLE=worker), który uruchamia harmonogramy, kopie zapasowe i pozostałą pracę w tle; naraz pracuje tylko jeden worker, a drugi czeka, aby przejąć jego rolę. Współdzielą one bazę danych, folder trwały, ACCESS_TOKEN_SECRET i ENCRYPTION_SECRET. Zobacz Skalowanie. Uruchom więcej RTE, aby uruchamiać więcej playbooków jednocześnie: zobacz Kilka RTE.