Infrastructure Nodes

I nodi Infrastructure permettono di gestire server, deploy applicazioni, eseguire query database e comandi remoti.


Blueprint

blueprint

Deploya un blueprint infrastrutturale predefinito con tutti i suoi servizi configurati.

Configurazione

CampoTipoObbligatorioDescrizione
labeltextNome identificativo
blueprintIdselectBlueprint da deployare
clientIdselectNoCliente destinatario
autoStartbooleanNoAvvia dopo deploy (default: true)
envOverrideskeyValueNoOverride variabili ambiente

Blueprint disponibili

BlueprintDescrizioneServizi inclusi
WordPressCMS completoWordPress, MySQL, Redis, Nginx
GhostBlog platformGhost, MySQL, Nginx
StrapiHeadless CMSStrapi, PostgreSQL
n8nWorkflow automationn8n, PostgreSQL, Redis
Grafana StackMonitoringGrafana, Prometheus, AlertManager

Workflow Esempio: Setup Ambiente Cliente

Diagramma di flusso

Configurazione completa

1. Trigger

type: trigger
triggerType: event
eventType: "client.created"

2. Blueprint

type: blueprint
blueprintId: "wordpress-starter"
clientId: "{{trigger.event.data.clientId}}"
autoStart: true
envOverrides:
  WORDPRESS_ADMIN_EMAIL: "{{trigger.event.data.email}}"
  SITE_URL: "{{trigger.event.data.domain}}"

3. DNS Manager

type: dnsManager
action: createRecord
domain: "{{trigger.event.data.domain}}"
recordType: A
value: "{{blueprint.output.serverIp}}"

Output

{
  "blueprintId": "wordpress-starter",
  "deploymentId": "deploy-789",
  "serverIp": "192.168.1.100",
  "services": [
    { "name": "wordpress", "status": "running", "port": 80 },
    { "name": "mysql", "status": "running", "port": 3306 }
  ],
  "accessUrl": "https://client-domain.com"
}

Deployment

deployment

Esegue operazioni di deploy Docker su VPS configurati.

Configurazione

CampoTipoObbligatorioDescrizione
labeltextNome identificativo
vpsIdselectServer VPS target
actionselectAzione da eseguire
stackNametextDipendeNome dello stack Docker
composeFiletextareaPer deployContenuto docker-compose.yml
waitForHealthybooleanNoAttendi containers healthy
timeoutnumberNoTimeout in secondi (default: 300)

Azioni disponibili

AzioneDescrizione
deployCrea o aggiorna uno stack Docker
startAvvia containers esistenti
stopFerma containers
restartRiavvia containers
pullAggiorna immagini Docker
removeRimuove stack completo

Workflow Esempio: Blue-Green Deployment

Diagramma di flusso

Configurazione Docker Compose
type: deployment
vpsId: "prod-server-1"
action: deploy
stackName: "myapp-green"
waitForHealthy: true
timeout: 120
composeFile: |
  version: "3.8"
  services:
    app:
      image: myregistry/myapp:{{dockerBuild.output.imageTag}}
      ports:
        - "8081:3000"
      environment:
        - NODE_ENV=production
        - DATABASE_URL={{secrets.DATABASE_URL}}
      healthcheck:
        test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
        interval: 10s
        timeout: 5s
        retries: 3
      deploy:
        resources:
          limits:
            memory: 512M

Output

{
  "action": "deploy",
  "stackName": "myapp-green",
  "status": "running",
  "containers": [
    {
      "name": "myapp-green-app-1",
      "status": "running",
      "health": "healthy",
      "ports": ["8081:3000"]
    }
  ],
  "startTime": "2024-01-15T09:00:00Z"
}

Database

database

Esegue query o operazioni su database configurati.

Configurazione

CampoTipoObbligatorioDescrizione
labeltextNome identificativo
connectionIdselectConnessione database
queryTypeselectTipo operazione
tableNametextPer CRUDNome tabella
querytextareaPer customQuery SQL
whereClausetextPer select/update/deleteCondizione WHERE
limitnumberPer selectLimite risultati

Tipi di operazione

TipoDescrizioneCampi richiesti
selectLettura datitableName, whereClause (opt), limit (opt)
insertInserimentotableName, data
updateAggiornamentotableName, data, whereClause
deleteEliminazionetableName, whereClause
customQuery liberaquery
backupBackup tabellatableName

Workflow Esempio: ETL Pipeline

Diagramma di flusso

Configurazione completa

1. Database SELECT

type: database
connectionId: "orders-db"
queryType: select
tableName: "orders"
whereClause: "created_at > NOW() - INTERVAL 1 DAY AND processed = false"
limit: 1000

2. Transform

type: transform
operation: map
expression: |
  items.map(order => ({
    date: order.created_at.split('T')[0],
    revenue: order.total,
    items_count: order.items.length,
    customer_segment: order.total > 100 ? 'high' : 'standard'
  }))

3. Database INSERT

type: database
connectionId: "analytics-db"
queryType: custom
query: |
  INSERT INTO daily_analytics (date, revenue, orders, avg_order)
  VALUES (
    '{{transform.output[0].date}}',
    {{transform.output.reduce((sum, o) => sum + o.revenue, 0)}},
    {{transform.output.length}},
    {{transform.output.reduce((sum, o) => sum + o.revenue, 0) / transform.output.length}}
  )
  ON CONFLICT (date) DO UPDATE SET
    revenue = EXCLUDED.revenue,
    orders = EXCLUDED.orders,
    avg_order = EXCLUDED.avg_order

Query con variabili

Puoi usare variabili template nelle query:

SELECT * FROM users 
WHERE email = '{{trigger.data.body.email}}'
AND created_at > '{{previousNode.output.lastSync}}'

Output

{
  "queryType": "select",
  "rowCount": 42,
  "rows": [
    { "id": 1, "name": "John", "email": "john@example.com" },
    // ...
  ],
  "executionTime": 23 // ms
}

Terminal

terminal

Esegue comandi SSH su server remoti.

Configurazione

CampoTipoObbligatorioDescrizione
labeltextNome identificativo
serverIdselectServer target
commandtextareaComando da eseguire
workingDirtextNoDirectory di lavoro
timeoutnumberNoTimeout in secondi (default: 60)
continueOnErrorbooleanNoContinua se fallisce

Workflow Esempio: Manutenzione Server

Diagramma di flusso

Configurazione completa

1. Docker Prune

type: terminal
serverId: "prod-server-1"
command: "docker system prune -af --volumes"
workingDir: "/root"
timeout: 120
continueOnError: false

2. Clear Logs

type: terminal
serverId: "prod-server-1"
command: |
  find /var/log -type f -name "*.log" -mtime +7 -delete
  truncate -s 0 /var/log/syslog
continueOnError: true

3. Update Packages

type: terminal
serverId: "prod-server-1"
command: |
  apt-get update
  apt-get upgrade -y --with-new-pkgs
  apt-get autoremove -y
timeout: 300

Comandi con variabili

command: |
  cd /app/{{deployment.output.stackName}}
  docker-compose pull
  docker-compose up -d

Output

{
  "exitCode": 0,
  "stdout": "Total reclaimed space: 2.5GB\n",
  "stderr": "",
  "executionTime": 8500 // ms
}

Attenzione

I comandi vengono eseguiti con i permessi dell’utente SSH configurato.

  • Usa continueOnError: true per comandi non critici
  • Imposta timeout appropriati per operazioni lunghe
  • Evita comandi interattivi (richiedono input)

Best Practices

Rollback automatico

Implementa sempre una strategia di rollback:

Diagramma di flusso

Secrets management

Non hardcodare credenziali nei workflow:

# ❌ Sbagliato
password: "mypassword123"

# ✅ Corretto
password: "{{secrets.DB_PASSWORD}}"
Timeout appropriati
OperazioneTimeout consigliato
Health check5-10 secondi
Deploy container60-120 secondi
Database query30 secondi
Build Docker300+ secondi