Initial commit: PrivX HA Architecture & Setup Guides

This commit is contained in:
Ambrogio
2026-02-11 10:29:46 +00:00
commit 5d751b9cda
5 changed files with 571 additions and 0 deletions

146
core/setup-ha-nodes.md Normal file
View File

@@ -0,0 +1,146 @@
# PrivX Core HA Setup - 2 Nodi (Rocky Linux 9)
Questa guida descrive l'installazione di due server **PrivX Core** in configurazione Active-Active, connessi al DB centralizzato.
**Hostname:** `privx-core-01`, `privx-core-02`
**Ruolo:** Gestione autenticazione, API, storage configurazioni.
## 1. Prerequisiti su entrambi i nodi
### 1.1 Configurazione OS (Rocky Linux 9)
Assicurarsi che l'orario sia sincronizzato (Cruciale per i token TOTP/JWT):
```bash
sudo dnf install -y chrony
sudo systemctl enable --now chronyd
```
Disabilitare SELinux (Opzionale ma consigliato per evitare problemi iniziali nel lab, riabilitare poi):
```bash
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
sudo setenforce 0
```
### 1.2 Firewall (UFW/Firewalld)
Aprire le porte necessarie per la comunicazione tra nodi Core e verso il DB:
* TCP 80/443 (HTTP/S per Load Balancer)
* TCP 5432 (PostgreSQL - Outbound)
* TCP 8888 (PrivX internal API - Inbound da altri nodi PrivX)
```bash
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --permanent --add-port=8888/tcp
sudo firewall-cmd --reload
```
## 2. Installazione PrivX (Nodo 01 - Master Iniziale)
### 2.1 Aggiunta Repository PrivX
Scarica e installa la repo ufficiale SSH.com (richiede licenza o trial):
```bash
sudo dnf config-manager --add-repo https://product-repository.ssh.com/rhel8/privx/privx.repo
# Nota: La repo RHEL8 funziona spesso anche su RHEL9, altrimenti cercare specifica RHEL9 se disponibile.
sudo dnf install -y privx
```
### 2.2 Configurazione Post-Install (Script interattivo)
Lancia lo script di setup sul primo nodo. Questo popolerà il DB.
```bash
sudo /opt/privx/scripts/postinstall.sh
```
Durante il setup, ti verranno chiesti i parametri del DB. Inserisci quelli creati nella guida `setup-postgresql.md`:
* **Database Host:** `privx-db` (o IP del DB)
* **Database User:** `privx`
* **Database Password:** `password_super_segreta...`
* **Database Name:** `privx`
* **SSL Mode:** `verify-full` (o `require` se hai certificati self-signed senza CA affidabile nel sistema).
Lo script genererà anche i certificati interni per Nginx e i microservizi.
## 3. Configurazione HA (Shared Config)
Per far funzionare il cluster, entrambi i nodi devono condividere la **stessa chiave di cifratura** e puntare allo stesso DB.
### 3.1 Backup Chiavi e Config dal Nodo 01
Copia i file critici dal Nodo 01 al Nodo 02 (via SCP sicuro):
```bash
# Sul Nodo 01
sudo tar czvf privx-ha-pack.tar.gz \
/opt/privx/keyvault \
/opt/privx/etc/shared-config.toml \
/opt/privx/etc/privx-ca.crt \
/opt/privx/etc/privx-ca.key
```
Trasferisci `privx-ha-pack.tar.gz` sul Nodo 02.
## 4. Installazione PrivX (Nodo 02 - Replica)
### 4.1 Installazione RPM
Sul secondo nodo, installa solo i pacchetti senza lanciare `postinstall.sh` subito.
```bash
sudo dnf config-manager --add-repo https://product-repository.ssh.com/rhel8/privx/privx.repo
sudo dnf install -y privx
```
### 4.2 Ripristino Configurazione HA
Prima di avviare, sovrascrivi le config con quelle del Nodo 01:
```bash
# Sul Nodo 02
sudo systemctl stop privx || true
sudo tar xzvf privx-ha-pack.tar.gz -C /
sudo chown -R privx:privx /opt/privx
```
### 4.3 Registrazione Nodo
Ora avvia PrivX sul secondo nodo. Se la configurazione DB in `shared-config.toml` è corretta, il nodo si collegherà al DB esistente e scaricherà le policy.
```bash
sudo systemctl enable --now privx
sudo /opt/privx/scripts/init_node.sh # Se disponibile, per registrare il nodo nel cluster DB
```
## 5. Verifica Cluster
Dal Nodo 01, controlla lo stato dei componenti:
```bash
privx-status
# Dovresti vedere entrambi i nodi (hostname) listati nei log o nella dashboard "Settings > Deployment".
```
## 6. Configurazione Load Balancer (Nginx/HAProxy)
Davanti ai due nodi Core devi mettere un LB. Esempio config Nginx (upstream):
```nginx
upstream privx_core {
ip_hash; # Sticky session obbligatoria!
server privx-core-01:443;
server privx-core-02:443;
}
server {
listen 443 ssl;
server_name privx-lb.tuodominio.local;
location / {
proxy_pass https://privx_core;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```