Vai al contenuto
Q
QuoteNode

Installation

Installare su un server Windows LAN

Esegui QuoteNode con Docker Desktop su un PC Windows all'interno di una rete aziendale.

Installare su un server Windows LAN

Usa questo percorso quando un PC Windows in ufficio deve ospitare QuoteNode per gli utenti sulla stessa rete locale.

Quando usarlo

  • Il team vendite lavora all’interno di una sola LAN aziendale.
  • I clienti non devono aprire i link delle offerte da internet pubblico.
  • Vuoi una beta interna senza gestire un VPS pubblico.

Cosa non funzionerà

  • I link pubblici delle offerte e di notifica funzioneranno solo per i dispositivi sulla stessa LAN o VPN. I clienti esterni non possono aprire un indirizzo LAN privato.
  • I messaggi email possono essere inviati se SMTP è configurato, ma i link al loro interno puntano comunque all’URL LAN.
  • La sospensione di Windows, i riavvii o gli aggiornamenti di Docker Desktop possono interrompere il servizio.

Prerequisiti

  • Docker Desktop con Compose v2 abilitato.
  • Un indirizzo IP LAN stabile o una prenotazione DHCP per l’host Windows.
  • Almeno 2 GB di RAM disponibili e 10 GB di spazio libero su disco.
  • Posizione di backup regolare al di fuori del volume Docker.

Controlla in PowerShell o nel Prompt dei comandi:

docker --version        # Should show 24.0+
docker compose version  # Should show v2.x

Passo 1 — Creare una directory di progetto

mkdir quotenode
cd quotenode

Passo 2 — Creare il file di configurazione

Crea un file chiamato .env nella directory di progetto. Sostituisci 192.168.1.50 con l’IP reale dell’host Windows (o un nome DNS interno come quotenode.local):

# Database
DB_URL=jdbc:postgresql://postgres:5432/quotenode
DB_USERNAME=quotenode
DB_PASSWORD=change-me-to-something-random-32-chars
DB_NAME=quotenode

# ============================================================
# SECURITY SECRETS — UNIQUE to this installation.
# SAVE THIS FILE and keep a secure backup.
# ============================================================
DB_ENCRYPTION_KEY=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
TIMING_TOKEN_SECRET=change-me-timing-secret-min-32-chars
PUBLIC_LINK_PASSWORD_SESSION_SECRET=change-me-session-secret-min-32

# LAN URL — replace with your PC's IP or internal DNS name
CORS_ALLOWED_ORIGINS=http://192.168.1.50
DOMAIN=192.168.1.50

# L'IP del client viene rilevato automaticamente dietro proxy interni e CDN (incluso Cloudflare) — lascia vuoto.
# Imposta solo per un proxy insolito il cui peer di trasporto è un indirizzo PUBBLICO da considerare attendibile (IP/CIDR o hostname).
SECURITY_TRUSTED_PROXIES=

# Application
LOG_LEVEL=INFO
SPRING_PROFILES_ACTIVE=prod

Salva il tuo file .env immediatamente. Conserva una copia al di fuori di questo PC. Se perdi DB_ENCRYPTION_KEY, i campi cifrati diventano permanentemente illeggibili.

Passo 3 — Creare il file Docker Compose

Crea un file chiamato docker-compose.yml:

services:
  postgres:
    image: postgres:18-alpine
    cpus: 4.0
    mem_limit: 512m
    environment:
      POSTGRES_DB: ${DB_NAME}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      PGDATA: /var/lib/postgresql/data   # required for the postgres:18 image
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${DB_USERNAME}"]
      interval: 10s
      timeout: 5s
      retries: 10
    restart: unless-stopped

  gotenberg:
    image: gotenberg/gotenberg:8
    cpus: 2.0
    mem_limit: 448m
    environment:
      LOG_LEVEL: info
    healthcheck:
      test: ["CMD", "curl", "-fsS", "http://localhost:3000/health"]
      interval: 10s
      timeout: 5s
      retries: 5
    restart: unless-stopped

  backend:
    image: ghcr.io/lesisty7/quotenode/quotenode-api:latest
    cpus: 4.0
    mem_limit: 1792m
    depends_on:
      postgres: { condition: service_healthy }
      gotenberg: { condition: service_healthy }
    env_file: .env
    environment:
      SPRING_PROFILES_ACTIVE: prod
      JOBS_MODE: web
      PDF_ENABLED: "true"
      PDF_GOTENBERG_URL: http://gotenberg:3000
    volumes:
      - backend_uploads:/app/data/uploads
      - backend_pdfs:/app/data/pdfs
    healthcheck:
      test: ["CMD", "curl", "-fsS", "http://localhost:8080/health"]
      interval: 15s
      timeout: 10s
      retries: 5
      start_period: 45s
    restart: unless-stopped

  frontend:
    image: ghcr.io/lesisty7/quotenode/quotenode-frontend:latest
    cpus: 2.0
    mem_limit: 192m
    depends_on:
      backend: { condition: service_healthy }
    ports:
      - "80:80"
      - "443:443"
    healthcheck:
      test: ["CMD", "curl", "-fsS", "http://localhost:80/"]
      interval: 15s
      timeout: 5s
      retries: 3
    restart: unless-stopped

volumes:
  postgres_data:
  backend_uploads:
  backend_pdfs:

Passo 4 — Avviare QuoteNode

docker compose up -d

Docker scaricherà le immagini al primo avvio. Monitora il lancio:

docker compose logs -f backend

Attendi di vedere Started QuoteNodeApplication.

Passo 5 — Aprire QuoteNode

Naviga su http://192.168.1.50 (o l’indirizzo del tuo PC) da qualsiasi dispositivo sulla LAN.

Credenziali di accesso predefinite:

CampoValore
Email[email protected]
PasswordAdmin123!

Cambia la password predefinita immediatamente dopo aver effettuato l’accesso.

Firewall Windows

  • Consenti TCP in entrata sulla porta 80 per l’accesso HTTP dalla LAN.
  • Consenti TCP in entrata sulla porta 443 solo se configuri HTTPS.
  • Non esporre PostgreSQL alla LAN a meno che tu non abbia un’esigenza amministrativa specifica.
  • Tieni Docker Desktop in esecuzione sotto un account e una policy di avvio appropriati per il tuo ufficio.

Cosa è in esecuzione?

ContainerCosa faUtilizzo RAM
postgresArchivia tutti i tuoi dati~256 MB
backendServer API Java, logica di business~512 MB – 1,5 GB
gotenbergConverte HTML in PDF (basato su Chromium)~200 MB
frontendServe l’interfaccia web + reverse proxy~20 MB

Totale: circa 1,5 – 2,5 GB di RAM.

Comandi comuni

# Check service status
docker compose ps

# View logs
docker compose logs -f backend

# Stop QuoteNode
docker compose down

# Update to the latest version
docker compose pull && docker compose up -d

Mantenere al sicuro i tuoi segreti

SegretoCosa proteggeSe perso
DB_PASSWORDAccesso al databaseRecuperabile — reimposta tramite strumenti di amministrazione PostgreSQL
DB_ENCRYPTION_KEYCodici MFA, password SMTP, chiave API FX, campi PIIPermanentemente illeggibile
TIMING_TOKEN_SECRETToken anti-timing-attackRigenera — gli utenti si ri-autenticano
PUBLIC_LINK_PASSWORD_SESSION_SECRETSessioni dei link pubbliciRigenera — le sessioni attive scadono

Il segreto critico è DB_ENCRYPTION_KEY. Conserva backup di .env al di fuori di questo PC. Vedi Risoluzione problemi installazione per i passaggi di ripristino.

Passi successivi consigliati

Last reviewed: Recently