Installationsanweisungen für On-Premises
Dieses Dokument beschreibt den Prozess der Installation von axe DevTools an einem lokalen Standort.
Anforderungen
Bevor Sie versuchen, axe zu installieren, stellen Sie sicher, dass die folgenden Anforderungen erfüllt sind.
Betriebssystem
Axe ist für den Einsatz auf RHEL7 oder RHEL8 konzipiert. Andere Betriebssysteme werden derzeit nicht unterstützt.
Vor der Installation von axe wird erwartet, dass Ihr System wie folgt aktualisiert wurde:
yum update -yHardwareanforderungen
Unsere Belastungstests haben gezeigt, dass ein AWS t2.micro in der Lage ist, eine kleine Benutzergruppe (etwa 25 Benutzer) zu unterstützen, ohne die Anwendung erheblich zu belasten. Wir empfehlen nicht, axe auf einem Server zu betreiben, der nicht die gleichen Spezifikationen wie ein t2.micro hat.
| Spezifikation | Anforderung |
|---|---|
| CPU-Kerne | 1 |
| CPU-Geschwindigkeit | 3,3 GHz |
| RAM | 1 GB |
| Speicher | 15 GB |
Wenn Sie eine größere Benutzergruppe haben, konsultieren Sie die folgende Tabelle für Empfehlungen.
| Benutzer | CPUs | RAM (GB) | AWS T2 Größe |
|---|---|---|---|
| 100 | 1 | 2 | klein |
| 300 | 2 | 4 | mittel |
| 500 | 4 | 8 | groß |
| 700 | 8 | 16 | xlarge |
| 1000 | 8 | 32 | 2xlarge |
Unabhängig von der Maschinengröße sind mindestens 15 GB physischer Speicher (Platz auf der Festplatte) erforderlich. Wir empfehlen jedoch 30+ GB.
Netzwerkanforderungen
Axe benötigt derzeit keinen ausgehenden Netzwerkzugriff, außer um auf Anfragen zu reagieren, die an ihn gestellt werden.
Axe wird die folgenden Ports auf dem System öffnen, auf dem es eingesetzt wird:
| Portnummer | Vom Internet zugänglich | Zweck |
|---|---|---|
| 80 | ja | Eingehender HTTP-Datenverkehr |
| 443 | ja | Eingehender HTTPS-Datenverkehr (nur im SSL-Modus) |
| 3000 | nein | Axe-Server |
Wenn Sie planen, PostgreSQL auf demselben Rechner wie Axe auszuführen, wird dessen Standardport (5432) geöffnet, ist jedoch nicht vom Internet aus erreichbar.
DNS-Anforderungen
Für Axe muss ein DNS erstellt werden. Dieses DNS kann sich hinter der Firewall Ihres Unternehmens, in Ihrem eigenen privaten Netzwerk oder öffentlich im Internet zugänglich befinden. Für unseren privaten Axe-Server haben wir einen A-Eintrag, der auf eine EC2-Instanz in unserem AWS-Konto zeigt.
Das in diesem Dokument verwendete Beispiel-DNS ist axe.mycompany.com.
SELinux-Konfiguration
Axe erfordert, dass ein einzelnes SELinux-Flag deaktiviert wird:
setsebool -P httpd_can_network_connect 1Dies ermöglicht es NGINX, als Reverse Proxy zu fungieren und auf ausgehende Netzwerk-Anfragen zu reagieren.
Benutzer
Es wird erwartet, dass das Installationsprogramm als root -Benutzer ausgeführt wird. Wenn Sie sich nicht als root-Benutzer sudo su können, wird die Installation fehlschlagen.
Das Installationsprogramm erstellt die folgenden Benutzer:
| Benutzer | Zweck |
|---|---|
| nginx | führt den nginx-Dienst aus |
| axe | führt den axe-Dienst aus |
| postgres | führt den postgres-Dienst aus |
Keiner dieser Benutzer benötigt erhöhte Berechtigungen.
Abhängigkeiten
Der Axe-Installer bündelt alle seine Abhängigkeiten. Der Server, auf dem Axe installiert wird, muss nicht auf das Internet zugreifen, um Axe auszuführen.
Eine Axe-Bereitstellung hat harte Abhängigkeiten von der folgenden Software:
- NGINX - Macht die Axe-Server in Ihrem Netzwerk verfügbar
- PostgreSQL - Datenspeicherung
Der Axe-Server läuft über Node.js, aber Node muss nicht auf dem System installiert sein.
NGINX
NGINX muss installiert/konfiguriert werden, um Datenverkehr zum Axe-Server weiterzuleiten. Eine Beispielkonfiguration für NGINX wurde bereitgestellt (siehe axe-nginx-example.conf).
Die notwendigen RPMs zur Installation von NGINX sind im Axe-Installer enthalten. Um NGINX zu installieren, tun Sie Folgendes:
# Install the RPM.
yum install -y ./rpms/nginx/*.rpm
# Overwrite default configuration.
cp axe-nginx-example.conf /etc/nginx/nginx.conf
# Start NGINX and ensure it runs at system startup.
systemctl start nginx
systemctl enable nginxPostgreSQL
Der Axe-Server verwendet PostgreSQL zur Datenspeicherung. Eine gültige Verbindung zu PostgreSQL muss dem Installer bereitgestellt werden.
Axe unterstützt sowohl ein externes PostgreSQL (z. B. ein von AWS gehostetes RDS) als auch einen PostgreSQL-Server, der auf derselben Maschine läuft.
Die notwendigen RPMs zur Installation von PostgreSQL sind im Axe-Installer enthalten. Um PostgreSQL zu installieren, tun Sie Folgendes:
# Install the RPM.
yum install -y ./rpms/postgres/*.rpm
# Initialize PostgreSQL DB.
postgresql-14-setup initdb
# https://www.cyberciti.biz/faq/psql-fatal-ident-authentication-failed-for-user/
sed -i 's/ident/trust/g' /var/lib/pgsql/14/data/pg_hba.conf
sed -i 's/peer/trust/g' /var/lib/pgsql/14/data/pg_hba.conf
# Start PostgreSQL and ensure it runs at system startup.
systemctl start postgresql-14
systemctl enable postgresql-14Die Installation ausführen
Der Installer muss als der Benutzer root ausgeführt werden. Überprüfen Sie, ob Sie der Benutzer root sind, indem Sie Folgendes ausführen:
whoamiWenn Sie den Installer bereits extrahiert haben, seien Sie sicher, das Verzeichnis migrations zu leeren:
rm -f installer/migrations/*.sqlDer Installer wird als einzelne (Archiv-) Datei geliefert: installer.tar.gz. Um das Archiv zu extrahieren, führen Sie Folgendes aus:
mkdir installer
tar -xvzf ./installer.tar.gz -C ./installerDies führt zu einer Struktur ähnlich wie:
.
└── installer
├── axe-nginx-example.conf
├── axe-service
├── installer
├── migrations
│ ├── 0000-00-00-baseline.sql
│ └── [...]
└── rpms
├── nginx
└── postgresEinmal extrahiert, besteht der nächste Schritt darin, das installer/installer Programm auszuführen.
Installer-Konfiguration
Viele Konfigurationsflags sind erforderlich, um den Installer zu konfigurieren. Die folgende Tabelle erklärt jedes CLI-Flag, das dem installer Programm übergeben werden muss.
| Option | Beschreibung |
|---|---|
| axe-datenbank-name | Datenbankname für Axe |
| axe-datenbank-passwort | Passwort für die Axe-Datenbank |
| master-datenbank-name | Master-Datenbankname |
| master-datenbank-benutzer | Benutzer für die Master-Datenbank |
| master-datenbank-passwort | Passwort für den Master-Datenbankbenutzer |
| master-datenbank-host | Host für die Master-Datenbank |
| master-datenbank-port | Port für die Master-Datenbank (Standard ist 5432) |
| datenbank-verschlüsselungs-schlüssel | 32 Zeichen langer Schlüssel für die Datenbankverschlüsselung |
| datenbank-verschlüsselungs-iv | 16 Zeichen lange IV für die Datenbankverschlüsselung |
| migrations-verzeichnis | Verzeichnis, das Axe-Datenbankmigrationen enthält |
| axe-benutzer | Name des Systembenutzers, der den axe-dienst ausführt |
| erweiterungs-id | Google Chrome-Erweiterungs-ID für die Axe-Erweiterung |
| adresse | Adresse (URL), die der Axe-Dienst annehmen wird |
| port | Port, auf dem der Axe-Dienst lauschen wird (Standard ist 3000) |
| cookie-geheimnisse | Geheimnisse für die Signierung von Axe-Cookies (kommagetrennte Liste) |
| erlaubte-e-mail-domains | Whitelist der E-Mail-Domains (kommagetrennte Liste) |
| auth-dienst-url | Setzen Sie die Adresse zu einer bestehenden Auth-Dienst-Bereitstellung |
| auth-dienst-realm | Realm-Name, den Axe verwenden wird |
| auth-dienst-admin-benutzername | Benutzername für einen bestehenden „master“ Realm-Admin |
| auth-dienst-admin-passwort | Passwort für einen bestehenden „master“ Realm-Admin |
| auth-dienst-axe-admin-benutzername | Benutzername für den Axe-Admin-Benutzer |
| auth-dienst-axe-admin-passwort | Passwort für den Axe-Admin-Benutzer |
| auth-service-public-client-id | Öffentliche Client-ID für diese Axe-Bereitstellung |
| auth-service-confidential-client-id | Vertrauliche Client-ID für diese Axe-Bereitstellung |
| auth-service-admin-client-id | Client-ID für einen bestehenden Admin-Client (in der Regel „admin-cli“) |
| ml-service-api-key | API-Schlüssel für den Deque Machine Learning Service |
| ml-service-url | URL für den Deque Machine Learning Service |
| ml-service-timeout | Anforderungs-Timeout (in ms) für den Deque Machine Learning Service |
| shared-with | Überschreibt Test- und Problemfreigabe. Entweder „users“ oder „anyone“. |
| mobile-app-url | Legt die URL für das mobile Dashboard fest |
| api-keys | Service-zu-Service-API-Schlüssel (kommagetrennt) |
| cors-domains | CORS-Domains (kommagetrennt) |
| billing-service-url | URL für den Abrechnungsservice (optional) |
| migrate-to-billing | Bestehende Benutzer zum Abrechnungsservice migrieren |
| billing-service-admins | Bestimmte Benutzer während der Migration zur billing-service zu Admins machen (optional; erfordert --billing-service-url und --migrate-to-billing) |
| accept-self-signed-ssl | Akzeptiere selbstsignierte TLS/SSL-Zertifikate (optional) |
| max-migration-concurrency | Maximale Anzahl von Anfragen, die während der Migration von Benutzern zum billing-service gestellt werden (optional; Standardwert ist 20) |
| enable-audit-log | Aktivieren oder Deaktivieren des Prüfprotokoll-Features |
| smtp-host | SMTP-Host zum Versenden von E-Mails |
| smtp-port | SMTP-Port zum Versenden von E-Mails |
| smtp-username | SMTP-Benutzername zum Versenden von E-Mails |
| smtp-password | SMTP-Passwort zum Versenden von E-Mails |
| from-email-address | E-Mail-Adresse, die als Absender für ausgehende E-Mails verwendet wird |
Anmerkungen zu den Konfigurationsflags
--migration-directorysollte auf das Verzeichnis zeigen, in das das Installations-Tarball extrahiert wurde, plus/migrations. Dies kann wahrscheinlich$PWD/migrationssein.--addressist der vorkonfigurierte DNS für die Axe-Installation.--allowed-email-domainskann gesetzt werden, wenn Ihre Axe-Installation nur die Nutzung von bestimmten E-Mail-Domains zulassen soll (z. B.*@mycompany.com).--extension-idist standardmäßig auf alle bekannt Axe-Erweiterungs-IDs (einschließlich Chrome und Edge) eingestellt.--database-encryption-keymuss 32 Zeichen lang sein.--database-encryption-ivmüssen 16 Zeichen lang sein.
Umgebungsvariablen
Jede dieser Konfigurationsflags kann durch Umgebungsvariablen mit folgendem Format gesetzt werden:
AXE_DEVTOOLS_INSTALLER_{flag name}Dabei ist {flag name} die Variante des Konfigurationsflags im Großschreibweise-Schlangenmuster. Zum Beispiel kann --auth-service-admin-client-id durch die Verwendung der Umgebungsvariable AXE_DEVTOOLS_INSTALLER_AUTH_SERVICE_ADMIN_CLIENT_ID bereitgestellt werden.
Zusätzlich wird eine .env Datei im gleichen Arbeitsverzeichnis, von dem aus der Installer ausgeführt wird, geladen und ermöglicht Folgendes:
echo 'AXE_DEVTOOLS_INSTALLER_AUTH_SERVICE_ADMIN_CLIENT_ID=my-admin-client' > .env
./installerBeispielkonfiguration
Beispielkonfigurationen für die Installation von axe DevTools.
Kommandozeilen-Flags
./installer \
--axe-database-name="axe" \
--axe-database-password="secret" \
--master-database-name="postgres" \
--master-database-user="postgres" \
--master-database-password="postgres" \
--master-database-host="localhost" \
--master-database-port="5432" \
--database-encryption-key="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
--database-encryption-iv="bbbbbbbbbbbbbbbb" \
--extension-id="lhdoppojpmngadmnindnejefpokejbdd" \
--address="https://axe.mycompany.com" \
--port="3000" \
--cookie-secrets="foo,bar" \
--auth-service-url="https://auth.mycompany.com" \
--auth-service-admin-username="admin" \
--auth-service-admin-password="SECRET" \
--auth-service-admin-client-id="admin-cli" \
--auth-service-axe-admin-password="SECRET" \
--auth-service-axe-admin-username="axe-admin" \
--auth-service-realm="axe" \
--auth-service-public-client-id="onprem_public" \
--auth-service-confidential-client-id="onprem_confidential" \
--migration-directory="./migrations" \
--ml-service-api-key="AAAAAAAAAAAAAA" \
--ml-service-url="http://axe.mlservice.com" \
--ml-service-timeout=50000 \
--shared-with="users" \
--mobile-app-url="https://some-mobile-dashboard.com" \
--api-keys="comma,separated,list,of,service-to-service,keys" \
--cors-domains="comma,separated,list,of,domains" \
--billing-service-url="http://axe.billing.service.url" \
--migrate-to-billing="true" \
--billing-service-admins="admin1@deque.com" \
--accept-self-signed-ssl="true" \
--max-migration-concurrency=20 \
--enable-audit-log="false" \
--smtp-host="http://smtp.host" \
--smtp-port="8125" \
--smtp-username="user" \
--smtp-password="password" \
--from-email-address="noreply@mycompany.com"Umgebungsvariablen (.env)
AXE_DEVTOOLS_INSTALLER_AXE_DATABASE_NAME="axe"
AXE_DEVTOOLS_INSTALLER_AXE_DATABASE_PASSWORD="secret"
AXE_DEVTOOLS_INSTALLER_MASTER_DATABASE_NAME="postgres"
AXE_DEVTOOLS_INSTALLER_MASTER_DATABASE_USER="postgres"
AXE_DEVTOOLS_INSTALLER_MASTER_DATABASE_PASSWORD="postgres"
AXE_DEVTOOLS_INSTALLER_MASTER_DATABASE_HOST="localhost"
AXE_DEVTOOLS_INSTALLER_MASTER_DATABASE_PORT="5432"
AXE_DEVTOOLS_INSTALLER_DATABASE_ENCRYPTION_KEY="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
AXE_DEVTOOLS_INSTALLER_DATABASE_ENCRYPTION_IV="bbbbbbbbbbbbbbbb"
AXE_DEVTOOLS_INSTALLER_MIGRATION_DIRECTORY="./migrations"
AXE_DEVTOOLS_INSTALLER_AXE_USER="axe"
AXE_DEVTOOLS_INSTALLER_EXTENSION_ID="lhdoppojpmngadmnindnejefpokejbdd"
AXE_DEVTOOLS_INSTALLER_ADDRESS="https://axe.mycompany.com"
AXE_DEVTOOLS_INSTALLER_PORT="3000"
AXE_DEVTOOLS_INSTALLER_COOKIE_SECRETS="foo,bar"
AXE_DEVTOOLS_INSTALLER_ALLOWED_EMAIL_DOMAINS=""
AXE_DEVTOOLS_INSTALLER_AUTH_SERVICE_URL="https://auth.mycompany.com"
AXE_DEVTOOLS_INSTALLER_AUTH_SERVICE_REALM="axe"
AXE_DEVTOOLS_INSTALLER_AUTH_SERVICE_ADMIN_PASSWORD="secret"
AXE_DEVTOOLS_INSTALLER_AUTH_SERVICE_ADMIN_USERNAME="admin"
AXE_DEVTOOLS_INSTALLER_AUTH_SERVICE_AXE_ADMIN_USERNAME="axe-admin"
AXE_DEVTOOLS_INSTALLER_AUTH_SERVICE_AXE_ADMIN_PASSWORD="secret"
AXE_DEVTOOLS_INSTALLER_AUTH_SERVICE_PUBLIC_CLIENT_ID="onprem_public"
AXE_DEVTOOLS_INSTALLER_AUTH_SERVICE_CONFIDENTIAL_CLIENT_ID="onprem_confidential"
AXE_DEVTOOLS_INSTALLER_AUTH_SERVICE_ADMIN_CLIENT_ID="admin-cli"
AXE_DEVTOOLS_INSTALLER_ML_SERVICE_API_KEY="your-api-key"
AXE_DEVTOOLS_INSTALLER_ML_SERVICE_URL="https://axe-ml.deque.com"
AXE_DEVTOOLS_INSTALLER_ML_SERVICE_TIMEOUT="30000"
AXE_DEVTOOLS_INSTALLER_SHARED_WITH="users"
AXE_DEVTOOLS_INSTALLER_MOBILE_APP_URL="https://some-mobile-dashboard.com"
AXE_DEVTOOLS_INSTALLER_API_KEYS="comma,separated,list,of,service-to-service,keys"
AXE_DEVTOOLS_INSTALLER_CORS_DOMAINS="comma,separated,list,of,domains"
AXE_DEVTOOLS_INSTALLER_BILLING_SERVICE_URL="http://axe-billing.service.com"
AXE_DEVTOOLS_INSTALLER_MIGRATE_TO_BILLING="true"
AXE_DEVTOOLS_INSTALLER_BILLING_SERVICE_ADMINS="admin1@deque.com"
AXE_DEVTOOLS_INSTALLER_ACCEPT_SELF_SIGNED_TLS="false"
AXE_DEVTOOLS_INSTALLER_SMTP_HOST="http://smtp.host"
AXE_DEVTOOLS_INSTALLER_SMTP_PORT="8125"
AXE_DEVTOOLS_INSTALLER_SMTP_USERNAME="user"
AXE_DEVTOOLS_INSTALLER_SMTP_PASSWORD="password"
AXE_DEVTOOLS_INSTALLER_FROM_EMAIL_ADDRESS="noreply@mycompany.com"
AXE_DEVTOOLS_INSTALLER_ENABLE_AUDIT_LOG="false"Anmerkungen
Protokollierung
Protokolle werden derzeit an stdio gesendet. Protokolle werden basierend auf Ihrer Systemkonfiguration rotiert (nicht von axe selbst bestimmt).
Sie können mit journalctl abgerufen werden. Zum Beispiel:
journalctl -u axe
-- Logs begin at Tue 2020-05-05 13:51:35 UTC, end at Tue 2020-05-05 14:14:34 UTC. --
May 05 13:54:45 c8df7dc28ee3 systemd[1]: Started Axe Enterprise Service.
May 05 13:54:45 c8df7dc28ee3 axe-service[766]: {"config":{"extensionURL":"https://chrome.google.com/webstore/detail/axe/lhdoppojpmngadmnindnejefpokejbdd","port":"3000","assetC
DN":"","connection":{"host":"localhost","database":"walnut","user":"walnut","password":"<redacted>"},"defaultOrganization":{"name":"Axe Organization","realm":"axe"},"keycloak"
:{"url":"https://localhost","publicClientId":"axe-public","realm":{"username":"admin","password":"<redacted>","client_id":"axe-confidential","client_secret":"<redacted>"}},"ro
leLockPrefix":"team-","trackingID":"UA-132342340-1","datadog":{"host":"localhost","port":8125,"prefix":"axepro.server."}},"level":"info","message":"Starting application"}
May 05 13:54:45 c8df7dc28ee3 axe-service[766]: {"connection":{"host":"localhost","database":"walnut","user":"walnut","password":"<redacted>"},"level":"info","message":"Connect
ing to database"}
May 05 13:54:46 c8df7dc28ee3 axe-service[766]: {"message":"Connected to database","level":"info"}
May 05 13:54:46 c8df7dc28ee3 axe-service[766]: {"port":"3000","level":"info","message":"listening"}Systemstatus
Um den gesamten Systemstatus anzuzeigen, verwenden Sie systemctl:
systemctl statusUm den Status des axe-Dienstes anzuzeigen, tun Sie Folgendes:
systemctl status axeStarten / Stoppen von Axe-Diensten
Um einen Dienst zu starten/stoppen, verwenden Sie systemctl:
systemctl stop axe
systemctl start axeSelbstsignierte TLS/SSL-Zertifikate
Wenn selbstsignierte TLS/SSL-Zertifikate verwendet werden, AXE_DEVTOOLS_INSTALLER_ACCEPT_SELF_SIGNED_TLS=true oder das --accept-self-signed-tls=true muss gesetzt sein.
Maschinelles Lernen (ML)
Standardmäßig sind die ML-Erweiterungen der axe DevTools-Erweiterungen aktiviert.
Um die ML-Funktionalität auszuführen, kommuniziert der axe DevTools Server (axe Account Portal) mit dem ML service, der wiederum mit dem Sagemaker instance kommuniziert. Sagemaker führt die maschinelle Seh-Inferenz durch, die verwendet wird, um die Menge an manueller Arbeit in IGTs zu reduzieren. Der ML-Dienst verarbeitet alle Bilddaten, die für Inferenz und andere Zwecke wie Problem-Screenshots verwendet werden, und speichert die Daten zur langfristigen Nutzung.
SageMaker speichert keine Daten, und es wird daher empfohlen, dass alle Kunden ihren Instanzen erlauben, mit dem zentral gehosteten Modell zu kommunizieren. Ein Kunde kann diese Funktion deaktivieren lassen. Wenn dies geschieht, verlieren sie den Zugang zu den ML-Modelverbesserungen im Produkt, die dazu beitragen können, ihr Testen zu optimieren und sonst manuelle Aufgaben zu automatisieren. Die geteilten Problemscreenshots und die Farbkontrasteanalyse würden ohne SageMaker weiter funktionieren.
Private und lokale Instanzen können ML-Funktionen unterstützen, indem die Instanz über die ML_SERVICE-Umgebungsvariable (die URL des ML-Dienstes) auf eine ML-Dienstinstanz (diese kann geteilt oder nicht geteilt sein) und die Einstellung der ML_SERVICE_API_KEY-Umgebungsvariable mit einem gültigen API-Schlüssel verweist.
Funktionen des Maschinellen Lernens
- Problembildschirmfotos (können auf der Seite zum Teilen von Problemen angesehen werden)
- Automatisches Werkzeug zur Prüfung des Farbkontrasts
- Automatische Erkennung von Elementrollen
- Automatische Erkennung von Eingabelabels
Authentifizierung
Deque SSO ist erforderlich, damit Benutzer sich in die Anwendung einloggen können. Dieser SSO-Dienst kann zwischen mehreren Deque-Produkten geteilt werden und auf unterschiedliche Weise bereitgestellt werden. Wie oben dokumentiert, gibt es eine Anzahl von AXE_DEVTOOLS_INSTALLER_AUTH_SERVICE_* Umgebungsvariablen, die es der axe DevTools-Erweiterung ermöglichen, Benutzern das Einloggen in die Anwendung zu erlauben.
