Aggiornato Marzo 2026 ~2 ore di setup

Come fare Self-Host di Dify nel 2026

Una guida pratica e completa per eseguire Dify sul tuo VPS. Dalla scelta di un server ai certificati SSL e alla manutenzione continua — tutto ciò di cui hai bisogno in un unico posto.

Cos'è il Self-Hosting di Dify?

Dify è una piattaforma open-source per lo sviluppo di applicazioni LLM che ti permette di costruire app basate su AI, chatbot e pipeline RAG. Il self-hosting significa eseguire Dify sul proprio server invece di utilizzare Dify Cloud.

Si sceglie il self-hosting rispetto a Dify Cloud per tre ragioni principali:

  • Costo — Un Hetzner CX22 costa €3.79/mo vs $59/mo per Dify Cloud Pro. A scala di team, il risparmio è notevole.
  • Controllo — Accesso completo alla configurazione, plugin, modelli personalizzati, membri del workspace illimitati e nessun limite di crediti messaggio.
  • Privacy dei dati — I tuoi prompt, documenti e cronologia delle conversazioni non lasciano mai la tua infrastruttura. Fondamentale per i settori regolamentati.

Il compromesso è che sei responsabile del setup, degli aggiornamenti e dell'uptime. Questa guida rende tutto questo semplice.

Requisiti del Server

Minimo

2 vCPU 4 GB RAM 50 GB SSD

Consigliato

4 vCPU 8 GB RAM 80 GB SSD

OS: Ubuntu 22.04 LTS (consigliato). Anche Debian 11/12 funziona.

1

Scegli un Server

Per la maggior parte dei self-hoster, Hetzner CX22 (€3.79/mo, 2 vCPU, 4GB RAM, 40GB NVMe) è il punto di partenza migliore. Esegue comodamente Dify e tutti i suoi servizi. I data center europei lo rendono ideale per la conformità GDPR.

Per i principianti che vogliono un pannello di controllo più semplice, Hostinger VPS parte da $7.99/mo e include più assistenza. Se hai bisogno di 8GB RAM, il loro piano KVM 2 a $9.99/mo offre un ottimo rapporto qualità-prezzo.

Suggerimento: Crea il server con la tua chiave pubblica SSH già aggiunta. Questo evita completamente l'autenticazione con password ed è più sicuro.

2

Configurazione Iniziale del Server

Connettiti al server ed esegui la configurazione iniziale:

# Connettiti al server via SSH
ssh root@IP_DEL_TUO_SERVER

# Aggiorna i pacchetti
apt update && apt upgrade -y

# Installa strumenti essenziali
apt install -y curl wget git ufw

# Crea un utente non-root
adduser dify
usermod -aG sudo dify

# Copia le chiavi SSH al nuovo utente
rsync --archive --chown=dify:dify ~/.ssh /home/dify

# Configura il firewall UFW
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp comment 'SSH'
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'
ufw --force enable
ufw status

Ora esci e riconnettiti come utente dify per i passi successivi.

3

Installa Docker Engine

Installa Docker usando il repository apt ufficiale — non usare la versione snap:

# Installa i prerequisiti
sudo apt install -y ca-certificates curl gnupg lsb-release

# Aggiungi la chiave GPG ufficiale di Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
  sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Aggiungi il repository apt di Docker
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Installa Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

# Aggiungi il tuo utente al gruppo docker (nessun sudo necessario)
sudo usermod -aG docker $USER
newgrp docker

# Verifica l'installazione
docker --version
4

Installa il Plugin Docker Compose

Il plugin Docker Compose è incluso nel pacchetto precedente. Verifica che funzioni:

# Controlla la versione di Docker Compose (dovrebbe essere v2.x)
docker compose version

# Se non installato, aggiungilo manualmente
sudo apt install -y docker-compose-plugin
5

Clona e Configura Dify

Clona il repository ufficiale di Dify e configura il tuo ambiente:

# Clona il repository
git clone https://github.com/langgenius/dify.git
cd dify/docker

# Crea il tuo file .env dall'esempio
cp .env.example .env

# Genera una SECRET_KEY sicura
openssl rand -base64 42

# Modifica il file .env
nano .env

Impostazioni chiave da aggiornare in .env:

# OBBLIGATORIO: Imposta una chiave segreta casuale robusta
SECRET_KEY=la-tua-chiave-segreta-generata-qui

# Imposta il tuo dominio (usato nelle email e nei link)
CONSOLE_URL=https://tuo-dominio.com
APP_URL=https://tuo-dominio.com

# Cambia la password predefinita del database
DB_PASSWORD=la-tua-password-db-robusta

# Cambia la password predefinita di Redis
REDIS_PASSWORD=la-tua-password-redis-robusta

# Opzionale: Aggiungi la tua chiave API OpenAI per un avvio rapido
OPENAI_API_KEY=sk-...
6

Avvia Dify

Avvia tutti i servizi Dify con Docker Compose:

# Avvia tutti i servizi in background
docker compose up -d

# Verifica che tutti i container siano in esecuzione
docker compose ps

# Segui i log per guardare l'avvio (Ctrl+C per uscire)
docker compose logs -f

Una volta che tutti i container mostrano lo stato healthy (impiega 1-2 minuti), visita http://IP_DEL_TUO_SERVER per completare la procedura guidata di configurazione admin.

7

Configura SSL con Nginx

Lo stack Docker di Dify include il proprio Nginx sulla porta 80. Per SSL, aggiungeremo un Nginx a livello host come reverse proxy davanti ad esso. Prima, cambia la porta di Dify per evitare conflitti:

# In dify/docker/.env, cambia la porta Nginx
EXPOSE_NGINX_PORT=8080

# Riavvia per applicare
docker compose down && docker compose up -d

# Installa Nginx host e Certbot
sudo apt install -y nginx certbot python3-certbot-nginx

# Crea la config Nginx per il tuo dominio
sudo nano /etc/nginx/sites-available/dify

Aggiungi questa config (sostituisci tuo-dominio.com):

server {
    listen 80;
    server_name tuo-dominio.com www.tuo-dominio.com;

    location / {
        proxy_pass http://localhost:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 300s;
        client_max_body_size 100M;
    }
}
# Abilita e testa
sudo ln -s /etc/nginx/sites-available/dify /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

# Ottieni il certificato SSL (configura automaticamente Nginx per HTTPS)
sudo certbot --nginx -d tuo-dominio.com -d www.tuo-dominio.com
8

Manutenzione

Aggiornamento di Dify — Dify rilascia aggiornamenti frequentemente. Aggiorna senza modifiche di configurazione:

cd ~/dify
git pull origin main
cd docker
docker compose pull
docker compose up -d

Backup — Fai il backup del database PostgreSQL e dei file caricati:

# Backup del database
docker compose exec db pg_dump -U postgres dify > backup_$(date +%Y%m%d).sql

# Backup dei file caricati
tar -czf dify_storage_$(date +%Y%m%d).tar.gz ./volumes/app/storage

Monitoraggio — Controlla l'utilizzo delle risorse:

# Utilizzo risorse container
docker stats

# Utilizzo disco
df -h
docker system df

Domande Frequenti

Conflitto porta: qualcosa sta già usando la porta 80

Un altro servizio (spesso Apache) occupa la porta 80. O fermalo (sudo systemctl stop apache2) o cambia la porta Nginx di Dify in .env impostando EXPOSE_NGINX_PORT=8080.

Il container si chiude con errore out-of-memory

Dify ha bisogno di almeno 4GB RAM. Controlla con free -h. Se la RAM è al limite, aggiungi un file di swap da 4GB: fallocate -l 4G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile.

Non riesco ad accedere alla pagina di setup admin

Verifica che tutti i container siano in esecuzione (docker compose ps) e che il tuo firewall consenta la porta 80 (sudo ufw status). Il container API impiega 30-60 secondi per essere pronto — attendi lo stato healthy.

Ho dimenticato la password admin

Reimpostala tramite il container API: docker compose exec api flask reset-password — segui le istruzioni per inserire la tua email e la nuova password.

Come aggiorno Dify senza downtime?

Esegui docker compose pull per pre-scaricare le nuove immagini, poi docker compose up -d per applicarle. Docker Compose esegue riavvii progressivi di default, quindi il downtime è tipicamente inferiore a 30 secondi.