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
- Clona il repository e spostati nella cartella del progetto.
- Installa le dipendenze (crea
node_modules):npm install
Configurazione ambiente
- Crea un file
.envnella 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=5242880SMTP_CCè opzionale; lascia vuoto se non serve.UPLOAD_DIRviene creata automaticamente da Multer se non esiste.MEDIA_UPLOAD_DIRviene creata automaticamente per gli upload di immagini del CMS.
- 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
nodemongià 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 viaMEDIA_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 fieldfile, solo immagini). - Pubblico:
/api/public/postse/api/public/posts/:slugrestituiscono 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
wwwverso il server scelto.