Istruzioni per l'installazione in sede
Questo documento descrive il processo di installazione di axe DevTools in una sede locale.
Requisiti
Prima di tentare di installare axe, assicurarsi che i seguenti requisiti siano soddisfatti.
Sistema operativo
Axe è progettato per funzionare su RHEL7 o RHEL8. Nessun altro sistema operativo è attualmente supportato.
Prima di installare axe, si prevede che il sistema sia stato aggiornato tramite:
yum update -yRequisiti hardware
I nostri test di carico hanno dimostrato che un AWS t2.micro è in grado di supportare una piccola base di utenti (circa 25 utenti) senza mettere un carico significativo sull'applicazione. Non raccomandiamo di distribuire axe su un server che non abbia specifiche equivalenti a un t2.micro.
| Spec | Requisito |
|---|---|
| Core CPU | 1 |
| Velocità CPU | 3.3 GHz |
| RAM | 1 GB |
| Memoria | 15 GB |
Se hai una base di utenti più ampia, fai riferimento alla tabella qui sotto per le raccomandazioni.
| Utenti | CPU | RAM (GB) | Dimensione AWS T2 |
|---|---|---|---|
| 100 | 1 | 2 | piccola |
| 300 | 2 | 4 | media |
| 500 | 4 | 8 | grande |
| 700 | 8 | 16 | xlarge |
| 1000 | 8 | 32 | 2xlarge |
Su qualsiasi dimensione di macchina, è richiesto un minimo di 15 GB di spazio di archiviazione fisico (spazio disco). Tuttavia, raccomandiamo 30+ GB.
Requisiti di rete
Attualmente axe non necessita di accesso di rete in uscita, a parte rispondere alle richieste fatte ad esso.
Axe aprirà le seguenti porte sul sistema dove è distribuito:
| Numero di porta | Accessibile da Internet | Scopo |
|---|---|---|
| 80 | sì | Traffico HTTP in entrata |
| 443 | sì | Traffico HTTPS in entrata (solo quando eseguito in modalità SSL) |
| 3000 | no | Server Axe |
Se prevedi di eseguire PostgreSQL sulla stessa macchina di axe, la sua porta standard (5432) sarà aperta, ma non è accessibile da Internet esterno.
Requisiti DNS
Il DNS deve essere creato per axe. Questo DNS può essere dietro il firewall della tua azienda, nella tua rete privata, o accessibile a Internet pubblico. Per il nostro server axe privato, abbiamo un record A puntato a un'istanza EC2 nel nostro account AWS.
Il DNS di esempio utilizzato in questo documento è axe.mycompany.com.
Configurazione SELinux
Axe richiede che un singolo flag SELinux sia disabilitato:
setsebool -P httpd_can_network_connect 1Questo permette a NGINX di agire come un reverse proxy e di rispondere alle richieste di rete in uscita.
Utenti
Si prevede che l'installatore venga eseguito come utente root. Se non puoi sudo su all'utente root, l'installazione fallirà.
L'installatore creerà i seguenti utenti:
| Utente | Scopo |
|---|---|
| nginx | esegue il servizio nginx |
| axe | esegue il servizio axe |
| postgres | esegue il servizio postgres |
Nessuno di questi utenti necessita di permessi elevati.
Dipendenze
L'installatore di axe include tutte le sue dipendenze. Il server axe è installato su non deve bisogno di accesso a Internet esterno per far funzionare axe.
Un'installazione di axe ha dipendenze forti dal seguente software:
- NGINX - Espone i server axe alla tua rete
- PostgreSQL - Archiviazione dati
Il server axe funziona tramite Node.js, ma Node non necessita di essere installato sul sistema.
NGINX
NGINX deve essere installato/configurato per inoltrare il traffico al server axe. È stata fornita una configurazione di esempio per NGINX (vedi axe-nginx-example.conf).
Gli RPM necessari per installare NGINX sono inclusi nell'installatore di axe. Per installare NGINX, esegui:
# 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
Il server axe utilizza PostgreSQL per l'archiviazione dei dati. Una connessione valida a PostgreSQL deve essere fornita all'installatore.
Axe supporta sia un PostgreSQL esterno (ad esempio un RDS ospitato da AWS) che un server PostgreSQL che gira sulla stessa macchina.
Gli RPM necessari per installare PostgreSQL sono inclusi nell'installatore di axe. Per installare PostgreSQL, esegui:
# 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-14Esecuzione dell'installatore
L'installatore deve essere eseguito come utente root. Verifica di essere l'utente root eseguendo:
whoamiSe hai precedentemente estratto l'installatore, assicurati di svuotare la directory migrations:
rm -f installer/migrations/*.sqlL'installatore sarà fornito come un unico file (archivio): installer.tar.gz. Per estrarre l'archivio, esegui il seguente comando:
mkdir installer
tar -xvzf ./installer.tar.gz -C ./installerCiò risulterà in una struttura simile a:
.
└── installer
├── axe-nginx-example.conf
├── axe-service
├── installer
├── migrations
│ ├── 0000-00-00-baseline.sql
│ └── [...]
└── rpms
├── nginx
└── postgresUna volta estratto, il passo successivo è eseguire il programma installer/installer.
Configurazione dell'installatore
Molte opzioni di configurazione sono necessarie per configurare l'installatore. La seguente tabella spiega ogni flag CLI da passare al programma installer.
| Opzione | Descrizione |
|---|---|
| axe-database-name | Nome del database per Axe |
| axe-database-password | Password per il database Axe |
| master-database-name | Nome del database principale |
| master-database-user | Utente per il database principale |
| master-database-password | Password per l'utente del database principale |
| master-database-host | Host per il database principale |
| master-database-port | Porta per il database principale (valore predefinito 5432) |
| database-encryption-key | Chiave di 32 caratteri per la crittografia del database |
| database-encryption-iv | IV di 16 caratteri per la crittografia del database |
| migration-directory | Directory contenente le migrazioni del database Axe |
| axe-user | Nome per l'utente di sistema che eseguirà l'axe-service |
| extension-id | ID dell'estensione Google Chrome per l'estensione Axe |
| indirizzo | Indirizzo (URL) che il servizio Axe assumerà |
| porta | Porta su cui il servizio Axe ascolterà (valore predefinito 3000) |
| cookie-secrets | Segreti per la firma dei cookie di Axe (elenco separato da virgole) |
| allowed-email-domains | Elenco dei domini email consentiti (elenco separato da virgole) |
| auth-service-url | Imposta l'indirizzo su un deployment esistente di auth-service |
| auth-service-realm | Nome del realm che Axe utilizzerà |
| auth-service-admin-username | Nome utente per un amministratore di realm "master" esistente |
| auth-service-admin-password | Password per un amministratore di realm "master" esistente |
| auth-service-axe-admin-username | Nome utente per l'utente amministratore di Axe |
| auth-service-axe-admin-password | Password per l'utente amministratore di Axe |
| auth-service-public-client-id | ID client pubblico per questa distribuzione Axe |
| auth-service-confidential-client-id | ID client riservato per questa distribuzione Axe |
| auth-service-admin-client-id | ID client per un client amministrativo esistente (di solito "admin-cli") |
| ml-service-api-key | Chiave API per il servizio di Machine Learning di Deque |
| ml-service-url | URL per il servizio di Machine Learning di Deque |
| ml-service-timeout | Timeout della richiesta (in ms) per il servizio di Machine Learning di Deque |
| shared-with | Sovrascrive la condivisione di test e problemi. Può essere "users" o "anyone". |
| mobile-app-url | Imposta l'URL del cruscotto mobile |
| api-keys | Chiavi API da servizio a servizio (separate da virgole) |
| cors-domains | Domini CORS (separati da virgole) |
| billing-service-url | URL per il servizio di fatturazione (facoltativo) |
| migrate-to-billing | Migra gli utenti esistenti al servizio di fatturazione |
| billing-service-admins | Rendi alcuni utenti amministratori durante la migrazione al billing-service (facoltativo; richiede --billing-service-url e --migrate-to-billing) |
| accept-self-signed-ssl | Accetta certificati TLS/SSL autofirmati (facoltativo) |
| max-migration-concurrency | Numero massimo di richieste effettuate durante la migrazione degli utenti al billing-service (facoltativo; predefinito a 20) |
| enable-audit-log | Abilita o disabilita la funzione di log di audit |
| smtp-host | Host SMTP per inviare email |
| smtp-port | Porta SMTP per inviare email |
| smtp-username | Nome utente SMTP per inviare email |
| smtp-password | Password SMTP per inviare email |
| from-email-address | Indirizzo email da utilizzare come mittente per le email in uscita |
Note sui flag di configurazione
--migration-directorydovrebbe puntare alla directory in cui l'archivio tar dell'installer è stato estratto più/migrations. Questo può probabilmente essere$PWD/migrations.--addressè il DNS preconfigurato per l'installazione di axe.--allowed-email-domainspuò essere impostato se l'installazione di axe dovrebbe consentire l'uso solo da domini email specifici (es.*@mycompany.com).--extension-idpredefinisce tutti i conosciuto ID di estensione axe (inclusi Chrome ed Edge).--database-encryption-keydeve essere lungo 32 caratteri.--database-encryption-ivdeve essere lungo 16 caratteri.
Variabili d'ambiente
Ognuno di questi flag di configurazione può essere impostato da variabili d'ambiente con il formato:
AXE_DEVTOOLS_INSTALLER_{flag name}Dove {flag name} è la variante in maiuscolo snake case del flag di configurazione. Ad esempio, --auth-service-admin-client-id può essere fornito utilizzando la variabile d'ambiente AXE_DEVTOOLS_INSTALLER_AUTH_SERVICE_ADMIN_CLIENT_ID.
Inoltre, un file .env nella stessa directory di lavoro da cui viene eseguito l'installatore verrà caricato, abilitando quanto segue:
echo 'AXE_DEVTOOLS_INSTALLER_AUTH_SERVICE_ADMIN_CLIENT_ID=my-admin-client' > .env
./installerConfigurazione di esempio
Configurazioni di esempio per l'installazione di axe DevTools.
Flag da riga di comando
./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"Variabili d'ambiente (.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"Note
Registrazione
I registri sono attualmente inviati a stdio. I registri vengono ruotati in base alla configurazione del sistema (non decisa da axe stessa).
Possono essere recuperati con journalctl. Ad esempio:
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"}Stato del sistema
Per visualizzare lo stato completo del sistema, utilizzare systemctl:
systemctl statusPer vedere lo stato del servizio axe, eseguire:
systemctl status axeAvvio / Arresto dei servizi Axe
Per avviare/fermare un servizio, utilizzare systemctl:
systemctl stop axe
systemctl start axeCertificati TLS/SSL Autofirmati
Se vengono utilizzati certificati TLS/SSL autofirmati, AXE_DEVTOOLS_INSTALLER_ACCEPT_SELF_SIGNED_TLS=true o il --accept-self-signed-tls=true devono essere impostati.
Apprendimento automatico (ML)
Per impostazione predefinita, i miglioramenti ML delle estensioni di axe DevTools sono abilitati.
Per eseguire la funzionalità ML, il Server DevTools di axe (Portale Account di axe) comunica con il ML service che a sua volta comunica con il Sagemaker instance. Sagemaker esegue l'inferenza di visione artificiale utilizzata per ridurre il lavoro manuale negli IGT. Il servizio ML gestisce tutti i dati immagine usati per l'inferenza e per altri scopi - come le schermate dei problemi - e conserva i dati per un uso a lungo termine.
SageMaker non memorizza alcun dato, ed è pertanto consigliato che tutti i clienti consentano alle loro istanze di comunicare con il modello ospitato centralmente. Un cliente può richiedere che questa funzionalità sia disabilitata. Se ciò avviene, perderanno l'accesso ai miglioramenti del modello ML nel prodotto che possono aiutare a ottimizzare i loro test e a automatizzare compiti che altrimenti sarebbero manuali. Le schermate dei problemi condivise e l'analisi automatica del contrasto dei colori continueranno a funzionare senza SageMaker.
Le istanze private e on-prem possono supportare le funzionalità ML puntando l'istanza a un'istanza di servizio ML (che potrebbe essere condivisa o non condivisa) tramite la variabile d'ambiente ML_SERVICE (l'URL del servizio di ML) e impostando la variabile d'ambiente ML_SERVICE_API_KEY con una chiave API valida.
Funzionalità di apprendimento automatico
- Schermate dei problemi (possono essere visualizzate sulla pagina di condivisione dei problemi)
- Strumento di revisione automatica del contrasto dei colori
- Rilevazione automatica del ruolo degli elementi
- Rilevamento automatico dell'etichetta di input
Autenticazione
È richiesto il SSO di Deque affinché gli utenti possano accedere all'applicazione. Questo servizio SSO può essere condiviso tra più prodotti Deque e può essere impostato in diversi modi. Come documentato sopra, ci sono una serie di variabili d'ambiente AXE_DEVTOOLS_INSTALLER_AUTH_SERVICE_* che abilitano l'estensione di axe DevTools a consentire agli utenti di accedere all'applicazione.
