Menu

News

Post #2

Published Fri Dec 12 2025 09:38:28 GMT+0100 (Central European Standard Time)

Post #2

www.backwelltechcorp.com

Server Express con templating Nunjucks, upload di file e invio email via SMTP.

Prerequisiti

  • Node.js 18+ e npm.
  • MySQL raggiungibile con un DB (es. NHCMS) e le tabelle già create.
  • Accesso alle credenziali SMTP per l'invio email.

Installazione

  1. Clona il repository e spostati nella cartella del progetto.
  2. Installa le dipendenze (crea node_modules):
    npm install
    

Configurazione ambiente

  1. Crea un file .env nella root del progetto con le variabili necessarie:
    PORT=3000
    
    # DB MySQL
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_USER=nhcms_user
    DB_PASSWORD=super-segreta
    DB_NAME=NHCMS
    
    # Auth CMS
    JWT_SECRET=cambia-questa-stringa
    JWT_EXPIRES_IN=7d
    COOKIE_SECURE=false
    
    SMTP_HOST=smtp.example.com
    SMTP_PORT=465
    SMTP_SECURE=true
    [email protected]
    SMTP_PASSWORD=super-segreta
    SMTP_FROM="Backwell Tech <[email protected]>"
    [email protected]
    [email protected],[email protected]
    
    # Cartella per gli upload e limite (in byte)
    UPLOAD_DIR=tmp/uploads
    UPLOAD_MAX_SIZE=5242880
    
    # Media CMS (upload immagini)
    MEDIA_UPLOAD_DIR=uploads
    MEDIA_MAX_SIZE=5242880
    
    • SMTP_CC è opzionale; lascia vuoto se non serve.
    • UPLOAD_DIR viene creata automaticamente da Multer se non esiste.
    • MEDIA_UPLOAD_DIR viene creata automaticamente per gli upload di immagini del CMS.
  2. Se cambi PORT, ricorda di usare lo stesso valore quando apri l'app nel browser.

Avvio

  • Ambiente produzione/local semplice:
    npm start
    
  • Ambiente sviluppo con restart automatico (richiede nodemon già installato come devDependency):
    npm run dev
    

L'app sarà disponibile su http://localhost:3000 (o sulla porta definita in PORT).

Note utili

  • Asset statici serviti da public/ sotto il path /public.
  • Upload consentiti solo per PDF e ZIP, con limite configurabile via UPLOAD_MAX_SIZE.
  • Upload contatti consentiti solo per PDF e ZIP, con limite configurabile via UPLOAD_MAX_SIZE.
  • Upload immagini del CMS serviti da /uploads (solo immagini, limite configurabile via MEDIA_MAX_SIZE).
  • Rotte principali: redirect automatico verso /en/ e contenuti localizzati su /:lang/... (en, it, de) attualmente c'è solo l'inglese.

DB e CMS

  • c'è il supporto a Postgres ma non è usato. i post nella sezione News vanno ricreati usando un CSM o altro. Il server attuale gira in Perl usando Template Toolkit, quindi non è possibile utilizzare il CMS, ma i post sono pochi quindi conviene ricaricarli manualmente. (anche la privacy era inserita nel CMS)
  • deploy: il server attuale non può essere utilizzato. non c'è FTP ma solo SSH con chiave pubblica/privata e contiene progetti non condivisibili. Una volta che siete pronti dovete farvi puntare il DNS del record A del www verso il server che decidete.

CMS headless (API)

  • Admin: /api/cms/auth/login, /api/cms/auth/logout, /api/cms/auth/me (cookie httpOnly con JWT).
  • Posts: /api/cms/posts (CRUD, draft/published, slug unico, tag, cover image).
  • Tags: /api/cms/tags (CRUD).
  • Media: /api/cms/media (multipart field file, solo immagini).
  • Pubblico: /api/public/posts e /api/public/posts/:slug restituiscono solo post pubblicati (filtrabili per tag).

Admin UI

  • Accesso via /admin/login (usa le API e il cookie httpOnly).
  • Elenco/modifica post, creazione bozza/pubblicato, selezione tag, caricamento cover (via /api/cms/media), editor Markdown con textarea + preview di base.
  • Gestione tag via /admin/tags.

Sezione News (frontend)

  • Pagina elenco: /:lang/news/ mostra i post pubblicati (con cover, data, tag, excerpt).
  • Dettaglio: /:lang/news/:slug/ mostra il contenuto in HTML sanificato.
  • Link nel menu principale “News”.

Deploy

  • Non c'è FTP ma solo SSH con chiave pubblica/privata.
  • Una volta pronto, puntare il DNS del record A del www verso il server scelto.