Salta ai contenuti
PortoPorto

Docker e Docker Compose

Requisiti: un server Linux con Docker e Docker Compose e, per la prenotazione online, un dominio che punti al server.

Il file compose.yaml nella radice del repository compila l’immagine dai sorgenti e avvia un’istanza in modalità sviluppo con Mailpit per leggere le email inviate. Non usarlo in produzione.

Finestra del terminale
git clone https://github.com/coste360/porto.git && cd porto
PORTO_BOOTSTRAP_OWNER_EMAIL=titolare@porto.test PORTO_BOOTSTRAP_OWNER_NAME="Mario Rossi" \
PORTO_BOOTSTRAP_OWNER_ORG="Marina Prova SRL" PORTO_ADMIN_PASSWORD=password-di-prova \
docker compose up --build # oppure: make up

Apri http://localhost:8080/admin/ e accedi con quelle credenziali (password di almeno 12 caratteri); le email si leggono su http://localhost:8025. Per caricare il porto dimostrativo: docker compose exec porto /porto seed demo (Dati dimostrativi).

I file di produzione sono in deploy/: docker-compose.yml (SQLite nel volume porto-data) e docker-compose.postgres.yml (PostgreSQL 17). Il container gira come utente non root, con file system in sola lettura e nessuna capability.

  1. Configurazione. Parti da .env.example e crea deploy/.env:

    Finestra del terminale
    git clone https://github.com/coste360/porto.git && cd porto
    cat > deploy/.env <<FINE
    PORTO_BASE_URL=https://porto.mio-marina.it
    PORTO_SECRET_KEY=$(openssl rand -base64 32)
    PORTO_SMTP_URL=
    PORTO_BOOTSTRAP_OWNER_EMAIL=titolare@mio-marina.it
    PORTO_BOOTSTRAP_OWNER_NAME=Mario Rossi
    PORTO_BOOTSTRAP_OWNER_ORG=Marina Esempio SRL
    PORTO_ADMIN_PASSWORD=scegli-una-password-lunga
    FINE

    Le variabili sono descritte in Configurazione.

  2. Immagine. Quando l’immagine è pubblicata il compose la scarica da sola (PORTO_VERSION, predefinito latest). Finché non lo è, compilala sul server e indica il tag:

    Finestra del terminale
    docker build -f deploy/Dockerfile -t ghcr.io/coste360/porto:dev . # oppure: make docker
    echo "PORTO_VERSION=dev" >> deploy/.env
  3. Avvio.

    Finestra del terminale
    docker compose -f deploy/docker-compose.yml up -d
  4. Primo accesso su https://porto.mio-marina.it/admin/: vedi Primo avvio.

Aggiungi POSTGRES_PASSWORD a deploy/.env e usa l’altro file:

Finestra del terminale
echo "POSTGRES_PASSWORD=$(openssl rand -hex 24)" >> deploy/.env
docker compose -f deploy/docker-compose.postgres.yml up -d

Il compose inserisce la password in DATABASE_URL senza codificarla: usa solo caratteri sicuri negli URL, come quelli di openssl rand -hex. Vedi Database.

L’immagine è distroless e non ha una shell, ma exec lancia direttamente il binario:

Finestra del terminale
docker compose -f deploy/docker-compose.yml exec porto /porto version
docker compose -f deploy/docker-compose.yml exec porto /porto migrate status
docker compose -f deploy/docker-compose.yml exec porto /porto backup --out /data/backup.porto-backup

Metti Porto dietro un reverse proxy oppure lascia che ottenga da sé i certificati Let’s Encrypt: vedi HTTPS e reverse proxy. I controlli di salute vanno fatti dall’esterno con GET /healthz e GET /readyz (Monitoraggio e log).

diCoste360.itCoste360.it

Porto è sviluppato da Coste360 SRL. Codice sorgente disponibile con licenza BSL 1.1; il marchio Porto è escluso dalla licenza.