Installare Trama con Docker

Trama gira in container Docker: applicazione, web server, database, cache e un server di posta per i test. Questa guida segue il README (si apre in una nuova scheda) del repository.

Prerequisiti

  • Docker Desktop, oppure Docker Engine con il plugin Compose.
  • Almeno 4 GB di RAM liberi.
  • Queste porte libere sull'host:
Porte usate da Trama sull'host
PortaServizioVariabile
8081Trama (web)TRAMA_HTTP_PORT
5432PostgreSQLTRAMA_DB_PORT
6379RedisTRAMA_REDIS_PORT
1025Mailpit, SMTPTRAMA_MAIL_SMTP_PORT
8025Mailpit, interfaccia webTRAMA_MAIL_UI_PORT
5173Vite, solo per lo sviluppoTRAMA_VITE_PORT

Installazione rapida

Sette passi, gli stessi del README. Esegui i comandi nella cartella in cui vuoi installare Trama.

  1. Passo 1: Clona il repository

    $ git clone https://github.com/lejubila/trama-dev.git trama
    $ cd trama
  2. Passo 2: Configura l'ambiente

    Il secondo comando allinea l'utente del container al proprietario della cartella: senza, composer e npm non riescono a scrivere vendor/ e node_modules/.

    $ cp .env.example .env
    $ sed -i "s/^TRAMA_UID=.*/TRAMA_UID=$(id -u)/; s/^TRAMA_GID=.*/TRAMA_GID=$(id -g)/" .env
  3. Passo 3: Avvia i container

    La prima volta costruisce l'immagine dell'applicazione e richiede qualche minuto.

    $ docker compose up -d --build
  4. Passo 4: Installa le dipendenze PHP

    $ docker compose exec app composer install
  5. Passo 5: Genera la chiave e prepara il database

    --seed carica i dati dimostrativi: clienti di esempio e i tre utenti elencati sotto.

    $ docker compose exec app php artisan key:generate
    $ docker compose exec app php artisan migrate --seed
  6. Passo 6: Collega la cartella dei file caricati

    Crea il collegamento public/storage → storage/app/public, che serve per foto, planimetrie e icone.

    $ docker compose exec app php artisan storage:link
  7. Passo 7: Compila l'interfaccia

    Durante lo sviluppo usa docker compose exec app npm run dev al posto di npm run build.

    $ docker compose exec app npm install
    $ docker compose exec app npm run build

Primo accesso

Apri http://localhost:8081 e accedi con uno degli utenti di esempio. Le email inviate da Trama non escono dal tuo computer: le trovi in Mailpit su http://localhost:8025.

Utenti di esempio creati da --seed
RuoloEmailPasswordCosa può fare
Admin[email protected]passwordGestisce utenti, clienti e tutti i dati
Tecnico[email protected]passwordGestisce i dati di tutti i clienti
Cliente[email protected]passwordConsulta i clienti a cui è assegnato

Risoluzione dei problemi

vendor does not exist and could not be created o permessi negati

Lo stesso problema si presenta come permessi negati su storage/ o node_modules/. I comandi nel container girano come utente app, con UID e GID presi da TRAMA_UID e TRAMA_GID nel .env (default 1000). Devono coincidere con il proprietario della cartella del progetto sull'host.

  1. Confronta il proprietario della cartella con il tuo utente.

    $ ls -ldn .          # UID e GID proprietari della cartella
    $ id -u; id -g       # UID e GID del tuo utente
  2. Imposta TRAMA_UID e TRAMA_GID nel .env con quei valori, poi ricostruisci le immagini.

    $ docker compose build app scheduler && docker compose up -d
  3. Se la cartella è stata clonata da root, prima rendila tua.

    $ sudo chown -R $(id -u):$(id -g) .

Una porta è già in uso

Se docker compose up segnala che una porta è già allocata, cambia la variabile TRAMA_*_PORT corrispondente nel .env (vedi Prerequisiti) e rilancia docker compose up -d.

Comandi utili

Shell nel container dell'applicazione

$ docker compose exec app bash

Tinker (console di Laravel)

$ docker compose exec app php artisan tinker

Test

$ docker compose exec app php artisan test

Formattazione del codice (Pint)

$ docker compose exec app ./vendor/bin/pint

Analisi statica (PHPStan)

$ docker compose exec app ./vendor/bin/phpstan analyse

Worker delle code — parte già nel container scheduler

$ docker compose exec app php artisan queue:work

Reset completo del database — cancella tutto e ricarica i dati di esempio

$ docker compose exec app php artisan migrate:fresh --seed

Icone di default: installa quelle mancanti senza toccare quelle personalizzate

$ docker compose exec app php artisan icons:defaults

Icone di default: aggiorna il set con le icone globali impostate ora

$ docker compose exec app php artisan icons:defaults --export

Pubblicare una demo

Trama può funzionare come demo pubblica: i visitatori entrano con un clic, modificano i dati (tranne gli utenti) e ogni giorno tutto torna allo stato iniziale. È così che funziona demo.tramanet.work.

  1. Passo 1: Prepara i dati

    Crea, anche in locale, un cliente dimostrativo curato, con foto, planimetrie, Wi-Fi, VPN, documenti e snapshot, ed esportalo da Clienti → Esporta dati. Metti lo .zip in database/demo/: ogni archivio presente lì diventa un cliente della demo.

  2. Passo 2: Configura il .env del server demo

    APP_ENV=production
    APP_DEBUG=false
    MAIL_MAILER=log
    DEMO_MODE=true
    [email protected]
    DEMO_USER_PASSWORD=demo
    DEMO_RESET_TIME=03:00
    DEMO_TIMEZONE=Europe/Rome
    
    # Se sull'host le porte di default sono occupate:
    APP_URL=http://tuo-host:8083
    SANCTUM_STATEFUL_DOMAINS=tuo-host:8083
    TRAMA_HTTP_PORT=8083
    TRAMA_REDIS_PORT=6380
  3. Passo 3: Avvia lo scheduler ed esegui il primo popolamento

    Da qui in poi il container scheduler ripete il reset ogni giorno all'ora DEMO_RESET_TIME, nel fuso DEMO_TIMEZONE.

    $ docker compose up -d scheduler
    $ docker compose exec app php artisan demo:reset

Cosa cambia in modalità demo

  • La pagina di accesso mostra il pulsante «Entra nella demo» e le credenziali.
  • Un banner su ogni pagina avvisa del ripristino quotidiano, con il conto alla rovescia; dopo un reset compare un avviso.
  • Sono disattivati gestione utenti, modifica di profilo, email e password, eliminazione dell'account, token API, assegnazione degli utenti ai clienti e recupero password.
  • Lingua e cliente attivo si salvano nella sessione di ogni visitatore, perché l'account demo è condiviso.

Aggiornare

  1. Passo 1: Fai un backup del database

    $ docker compose exec -T postgres pg_dump -U trama trama > trama-backup.sql
  2. Passo 2: Scarica la nuova versione

    $ git pull
  3. Passo 3: Ricostruisci e riavvia i container

    Serve nel caso sia cambiata l'immagine dell'applicazione.

    $ docker compose up -d --build
  4. Passo 4: Aggiorna dipendenze, database e interfaccia

    Con APP_ENV=production, migrate chiede conferma prima di procedere.

    $ docker compose exec app composer install
    $ docker compose exec app php artisan migrate
    $ docker compose exec app npm install
    $ docker compose exec app npm run build

Per aggiungere le eventuali nuove icone di default senza toccare quelle personalizzate, esegui anche docker compose exec app php artisan icons:defaults.