Aller au contenu
Q
QuoteNode

Installation

Installer sur un serveur LAN Windows

Exécuter QuoteNode avec Docker Desktop sur un PC Windows au sein d'un réseau de bureau.

Installer sur un serveur LAN Windows

Utilisez ce chemin quand un PC Windows au bureau doit héberger QuoteNode pour les utilisateurs sur le même réseau local.

Quand l’utiliser

  • L’équipe commerciale travaille dans un seul LAN de bureau.
  • Les clients n’ont pas besoin d’ouvrir les liens d’offre depuis internet public.
  • Vous voulez une beta interne sans gérer de VPS public.

Ce qui ne fonctionnera pas

  • Les liens publics d’offre et de notification fonctionneront uniquement pour les appareils sur le même LAN ou VPN. Les clients externes ne peuvent pas ouvrir une adresse LAN privée.
  • Les messages email peuvent être envoyés si SMTP est configuré, mais les liens à l’intérieur pointent toujours vers l’URL LAN.
  • Les veilles, redémarrages ou mises à jour de Docker Desktop peuvent interrompre le service.

Prérequis

  • Docker Desktop avec Compose v2 activé.
  • Une adresse IP LAN stable ou une réservation DHCP pour l’hôte Windows.
  • Au moins 2 Go de RAM disponibles et 10 Go d’espace disque libre.
  • Emplacement de sauvegarde régulier en dehors du volume Docker.

Vérifiez dans PowerShell ou l’invite de commandes :

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

Étape 1 — Créer un répertoire de projet

mkdir quotenode
cd quotenode

Étape 2 — Créer le fichier de configuration

Créez un fichier nommé .env dans le répertoire de projet. Remplacez 192.168.1.50 par l’IP réelle de l’hôte Windows (ou un nom DNS interne comme 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 du client est détectée automatiquement derrière des proxys internes et des CDN (Cloudflare inclus) — laisser vide.
# À définir uniquement pour un proxy inhabituel dont le pair de transport est une adresse PUBLIQUE à approuver (IP/CIDR ou nom d'hôte).
SECURITY_TRUSTED_PROXIES=

# Application
LOG_LEVEL=INFO
SPRING_PROFILES_ACTIVE=prod

Sauvegardez votre fichier .env immédiatement. Conservez une copie en dehors de ce PC. Si vous perdez DB_ENCRYPTION_KEY, les champs chiffrés deviennent définitivement illisibles.

Étape 3 — Créer le fichier Docker Compose

Créez un fichier nommé 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:

Étape 4 — Démarrer QuoteNode

docker compose up -d

Docker téléchargera les images au premier lancement. Suivez le démarrage :

docker compose logs -f backend

Attendez de voir Started QuoteNodeApplication.

Étape 5 — Ouvrir QuoteNode

Naviguez vers http://192.168.1.50 (ou l’adresse de votre PC) depuis n’importe quel appareil sur le LAN.

Identifiants de connexion par défaut :

ChampValeur
Email[email protected]
Mot de passeAdmin123!

Changez le mot de passe par défaut immédiatement après la connexion.

Pare-feu Windows

  • Autorisez le TCP entrant sur le port 80 pour l’accès HTTP depuis le LAN.
  • Autorisez le TCP entrant sur le port 443 uniquement si vous configurez le HTTPS.
  • N’exposez pas PostgreSQL au LAN sauf si vous avez un besoin admin spécifique.
  • Gardez Docker Desktop en cours d’exécution sous un compte et une politique de démarrage appropriés pour votre bureau.

Qu’est-ce qui tourne ?

ConteneurRôleUtilisation RAM
postgresStocke toutes vos données~256 Mo
backendServeur API Java, logique métier~512 Mo – 1,5 Go
gotenbergConvertit HTML en PDF (basé sur Chromium)~200 Mo
frontendSert l’interface web + reverse proxy~20 Mo

Total : environ 1,5 – 2,5 Go de RAM.

Commandes courantes

# 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

Sécuriser vos secrets

SecretCe qu’il protègeEn cas de perte
DB_PASSWORDAccès à la base de donnéesRécupérable — réinitialiser via les outils admin PostgreSQL
DB_ENCRYPTION_KEYCodes MFA, mot de passe SMTP, clé API FX, champs PIIDéfinitivement illisible
TIMING_TOKEN_SECRETTokens anti-timing-attackRégénérer — les utilisateurs se ré-authentifient
PUBLIC_LINK_PASSWORD_SESSION_SECRETSessions de liens publicsRégénérer — les sessions actives expirent

Le secret critique est DB_ENCRYPTION_KEY. Stockez des sauvegardes de .env en dehors de ce PC. Voir Résolution de problèmes d’installation pour les étapes de récupération.

Étapes suivantes recommandées

Last reviewed: Recently