Przejdź do treści

Przygotowanie środowiska

Instalacja platformy testto wymaga dwóch maszyn.

Maszyna Rola Kiedy potrzebna
Stacja wdrożeniowa uruchamia instalator (Ansible), łączy się po SSH z serwerem na czas instalacji i późniejszych aktualizacji
Serwer aplikacyjny tu stoi platforma - wszystkie usługi, bazy i roboty RPA stale

1. Dlaczego dwie maszyny

Instalator testto jest zestawem ról Ansible. Ansible działa bezagentowo: nie instaluje się go na serwerze docelowym, lecz uruchamia z osobnej maszyny, która łączy się z serwerem po SSH i wykonuje na nim polecenia. Serwer aplikacyjny nie musi więc mieć zainstalowanego ani Ansible, ani Pythona w konkretnej wersji - cały ten wymóg dotyczy stacji wdrożeniowej.

   Stacja wdrożeniowa                         Serwer aplikacyjny
   (Ansible, Python 3.11+)  ── SSH / 22 ──▶   (Rocky Linux 9, Docker Swarm)

Stacja wdrożeniowa nie może być tym samym serwerem

Uruchomienie instalatora na serwerze docelowym nie jest wspierane. Rola system wykonuje pełną aktualizację pakietów i restartuje maszynę w trakcie instalacji — proces Ansible uruchomiony lokalnie zostałby wtedy przerwany w połowie przebiegu.

2. Stacja wdrożeniowa

2.1. Czym może być

Dowolny komputer spełniający wymagania z sekcji 2.2 - również laptop administratora. Nie musi to być zasób stały: jest potrzebna na czas instalacji oraz później przy każdej aktualizacji platformy. Może stać wewnątrz sieci Odbiorcy.

2.2. Wymagania

Pozycja Wymaganie
System Linux lub macOS. Windows wyłącznie przez WSL 2 - Ansible nie działa natywnie w Windows
Python 3.11 lub nowszy
Ansible ansible-core 2.18 lub nowszy (pakiet ansible w wersji 11.x)
Pakiety Pythona psycopg2-binary, passlib
Kolekcje Ansible instalowane z collections/requirements.yml w paczce
Narzędzia w PATH openssl, dig (pakiet bind-utils / dnsutils), unzip, sshpass (gdy logowanie do serwera odbywa się hasłem)
Zasoby 2 vCPU, 2 GB RAM, 5 GB wolnego dysku

2.3. Instalacja narzędzi - Rocky Linux 9 / RHEL 9

# Python w wersji obsługiwanej przez instalator (3.11 również jest poprawne)
sudo dnf install -y python3.12

# sshpass nie występuje w repozytoriach bazowych - jest w EPEL
sudo dnf install -y epel-release
sudo dnf install -y sshpass

# pozostałe narzędzia
sudo dnf install -y openssl bind-utils unzip

Gdy polityka nie pozwala dokładać repozytorium EPEL

sshpass jest potrzebny wyłącznie przy logowaniu do serwera hasłem. Logowanie kluczem SSH usuwa ten wymóg całkowicie, a przy okazji eliminuje hasło z pliku z sekretami - patrz Instalacja platformy, sekcja 3.

2.4. Instalacja narzędzi - Ubuntu / Debian

sudo apt update
sudo apt install -y python3-venv python3-pip openssl dnsutils unzip sshpass
python3 --version   # musi pokazać 3.11 lub nowszy

2.5. Łączność stacji wdrożeniowej

Kierunek Cel Uwagi
Do serwera aplikacyjnego 22/TCP (SSH) konieczne przez cały czas instalacji
Do internetu 443/TCP wyłącznie po Ansible i kolekcje - imienna lista w Zasobach sieciowych, tabela A. Do pominięcia przy instalacji z paczki offline (sekcja 2.6)

2.6. Stacja wdrożeniowa bez dostępu do internetu

Gdy stacja nie ma dostępu do sieci zewnętrznej - również przez proxy - pobierz gotowe środowisko na dowolnej maszynie z internetem i przenieś je na tę maszynę dowolnym kanałem (nośnik, udział sieciowy):

Paczkę środowiska offline pobierzesz ze strony Historia wydań - z tabeli Linie wydań, z tego samego wiersza, co paczka instalacyjna Twojej linii.

Paczka zawiera ansible-core wraz z zależnościami oraz komplet kolekcji wymaganych przez instalator. Archiwum nie jest zabezpieczone hasłem - to publicznie dostępne pakiety open source, bez żadnych danych Twojej instalacji.

unzip testto-ansible-offline-<wersja>.zip
cd testto-ansible-offline-<wersja>
./instaluj.sh

Skrypt sam znajdzie interpreter Pythona w obsługiwanej wersji, utworzy środowisko wirtualne w ~/.venvs/ansible-testto i zainstaluje wszystko bez ani jednego połączenia z siecią. Inna lokalizacja: ./instaluj.sh /sciezka/do/venva. Wewnątrz paczki są też polecenia do wykonania ręcznie, gdyby polityka nie pozwalała uruchamiać skryptów.

Poprawny wynik kończy się linią ansible [core 2.18.19] i listą czterech kolekcji. Po tym kroku pomiń sekcję 5 Instalacji platformy - środowisko jest gotowe.

Warunek Wymaganie
Architektura Linux x86-64, glibc 2.17 lub nowsza (Rocky/RHEL 8+, Ubuntu 18.04+)
Python 3.11 albo 3.12 - musi być już zainstalowany na stacji
sshpass nadal potrzebny przy logowaniu hasłem; nie ma go w paczce, bo to pakiet systemowy

Pakiety systemowe pozostają po Twojej stronie

Paczka rozwiązuje wyłącznie zależności Pythona i Ansible. Sam interpreter oraz openssl, dig, unzip i sshpass instalujesz z repozytoriów systemowych (sekcja 2.3) albo z nośnika instalacyjnego systemu.

Inna architektura niż x86-64

Pakiety binarne w paczce są skompilowane dla Linuksa x86-64. Dla ARM albo macOS poproś zespół Testto o osobny wariant.

3. Serwer aplikacyjny

Cała platforma pracuje na jednym hoście w klastrze Docker Swarm złożonym z tego jednego węzła. Roboty RPA uruchamiają się jako kontenery na tym samym serwerze, więc jego zasoby obsługują zarówno platformę, jak i wykonywane procesy.

3.1. System operacyjny

Pozycja Wymaganie
System Rocky Linux 9 (instalacja minimalna)
Architektura x86-64
Stan wyjściowy system czysty, bez zainstalowanego Dockera

Instalator sam doinstaluje silnik Docker, pakiety systemowe i zależności - nie należy przygotowywać ich wcześniej.

3.2. Zasoby sprzętowe

Zakres instalacji vCPU RAM Dysk
Pełny (z centralnym logowaniem) 8 24 GB 200 GB
Bez centralnego logowania 8 16 GB 200 GB

3.3. Porty przychodzące

Port Protokół Przeznaczenie
443 TCP cały ruch użytkowników i API (HTTPS)
5671 TCP AMQPS - broker komunikatów; wymagany, gdy agent RPA pracuje na odrębnej maszynie
22 TCP dostęp administracyjny i instalacja (SSH)
80 TCP przekierowanie HTTP na HTTPS - port jest otwierany przy każdej instalacji

Ruch przychodzący może zostać ograniczony do sieci użytkowników (LAN / VPN) - nie jest wymagana dostępność z całego internetu.

Port 80 a Let's Encrypt

Platforma weryfikuje certyfikaty Let's Encrypt metodą TLS-ALPN po porcie 443, nie przez port 80. Port 80 służy wyłącznie przekierowaniu użytkowników wpisujących adres bez https:// i można go zamknąć - kosztem tego, że taki adres nie zadziała.

3.4. Konto i uprawnienia

Instalator loguje się na serwer jednym kontem i wykonuje wszystkie zadania przez sudo.

Pozycja Wymaganie
Konto zwykłe konto systemowe z prawem do sudo
Logowanie hasłem (wymaga sshpass na stacji) albo kluczem SSH (zalecane)
sudo bez hasła (NOPASSWD) albo hasło podane w konfiguracji instalacji

3.5. Hasło startowe od dostawcy serwera

Zmień hasło ręcznie przed instalacją

Dostawcy maszyn wirtualnych (OVH, Hetzner i inni) wysyłają hasło oznaczone jako wygasłe, które system wymusza zmienić przy pierwszym logowaniu. Ansible tego nie wykona - połączenie zakończy się błędem uwierzytelnienia, bez czytelnej przyczyny.

Przed instalacją zaloguj się na serwer ręcznie przez SSH i zmień hasło.

4. Rekordy DNS

Nazwy usług muszą wskazywać rekordem A (lub AAAA) na adres IP serwera aplikacyjnego — publiczny albo wewnętrzny, zależnie od wariantu wdrożenia. W instalacji wewnętrznej nazwy może obsługiwać wewnętrzny serwer DNS.

Nazwa Usługa Kiedy wymagana
dashboard.<domena> interfejs użytkownika zawsze
api.<domena> API backendu zawsze
auth.<domena> uwierzytelnianie (Keycloak) zawsze
amq.<domena> broker komunikatów zawsze
logs.<domena> podgląd logów przy centralnym logowaniu
s3.<domena> magazyn plików - API zawsze
web-s3.<domena> magazyn plików - konsola zawsze

Wariant z prefiksem - bez wydzielonej strefy DNS

Gdy usługi mają działać pod domeną korporacyjną bez osobnej strefy, stosujemy prefiks: testto-dashboard.firma.pl, testto-api.firma.pl i tak dalej. Zestaw nazw pozostaje ten sam, zmienia się wyłącznie schemat <prefiks><nazwa>.<domena>.

5. Certyfikat TLS

Cały ruch użytkowników odbywa się po HTTPS. Certyfikat jest też importowany do magazynów zaufania usług wewnętrznych platformy, dlatego niekompletny łańcuch uniemożliwia poprawną pracę systemu, a nie tylko wywołuje ostrzeżenie w przeglądarce.

Wariant Kiedy stosować
Certyfikat Odbiorcy (zalecany) instalacje wewnętrzne oraz każda instalacja bez ruchu przychodzącego z internetu
Let's Encrypt wyłącznie gdy domena jest publiczna, a serwer osiągalny z internetu na porcie 443

Zalecany jest certyfikat wildcard *.<domena> - pokrywa wszystkie usługi i pozostaje ważny przy zmianie zakresu instalacji. Certyfikat z listą nazw (SAN) jest dopuszczalny, ale musi obejmować wszystkie nazwy z sekcji 4; brak choćby jednej uniemożliwi uruchomienie odpowiedniej usługi.

Formaty dostarczenia: PKCS#12 (.p12 / .pfx, certyfikat wraz z pośrednimi i kluczem, hasło przekazywane odrębnym kanałem) albo para plików PEM (pełny łańcuch w jednym pliku oraz osobny klucz prywatny bez hasła). Klucz RSA co najmniej 2048 bitów albo ECDSA P-256. Certyfikat główny urzędu nie jest wymagany w pliku.

Let's Encrypt nie zadziała w instalacji izolowanej

Wystawienie certyfikatu wymaga, aby serwery Let's Encrypt nawiązały połączenie zwrotne z serwerem Odbiorcy. W instalacji odciętej od internetu lub pracującej wyłącznie przez proxy jest to niemożliwe - obowiązuje wtedy certyfikat dostarczony przez Odbiorcę.

6. Poczta wychodząca

Poczta nie jest wymagana do instalacji. System wdroży się i będzie działał bez skonfigurowanego serwera poczty - wiadomości (zaproszenia użytkowników, resetowanie haseł) poczekają w kolejce i zostaną wysłane po uzupełnieniu konfiguracji i ponownym uruchomieniu playbooka.

Gdy poczta ma działać od początku, przygotuj: adres serwera przekazującego (host:port), dane uwierzytelniające (jeśli wymagane) oraz adres nadawcy.

Microsoft 365 i Google Workspace

Konta w tych usługach wymagają hasła aplikacji - uwierzytelnianie OAuth2 nie jest obsługiwane. Serwer przekazujący musi też akceptować wskazany adres nadawcy (zgodność z SPF).

7. Baza danych

Domyślnie instalator stawia własny klaster PostgreSQL na serwerze aplikacyjnym - w tym wariancie nie są potrzebne żadne dodatkowe przygotowania.

Jeżeli baza ma pracować na infrastrukturze Odbiorcy, wymagane są: PostgreSQL w wersji minimum 16, dostępne locale en_US.UTF-8, dwie bazy danych (dane aplikacji oraz uwierzytelnianie) i jednorazowy dostęp konta administracyjnego, które potrafi zakładać role i schematy. Szczegółową specyfikację przekazuje zespół Testto przed wdrożeniem.

8. Lista kontrolna

# Pozycja Gotowe
1 Serwer Rocky Linux 9 z zasobami wg sekcji 3.2, konto z sudo ☐
2 Hasło startowe serwera zmienione ręcznie po pierwszym logowaniu ☐
3 Ustalone, czy sudo działa bez hasła - jeśli nie, hasło przygotowane ☐
4 Stacja wdrożeniowa z Pythonem ≥ 3.11 i dostępem SSH do serwera ☐
4a Gdy stacja jest bez internetu - pobrana paczka środowiska offline (sekcja 2.6) ☐
5 Na stacji wdrożeniowej: openssl, dig, unzip, sshpass (przy logowaniu hasłem) ☐
6 Porty przychodzące 443, 5671 i 22 otwarte na serwer ☐
7 Adresy z Zasobów sieciowych - tabela A i B - dopuszczone ☐
8 Adresy systemów docelowych robotów zebrane i dopuszczone ☐
9 Dane proxy przekazane: adres, uwierzytelnianie, certyfikat CA (jeśli dotyczy) ☐
10 Potwierdzone, że proxy nie wymaga NTLM ani Kerberos ☐
11 Certyfikat TLS dostarczony w jednym z formatów z sekcji 5 ☐
12 Rekordy DNS założone i wskazujące na serwer ☐
13 Dane serwera poczty przekazane (jeśli poczta ma działać od początku) ☐
14 Wymagania PostgreSQL spełnione (jeśli baza po stronie Odbiorcy) ☐

Po odhaczeniu listy przejdź do Instalacji platformy.