Info

Dalle Foto al Workspace Digitale Link to heading

Nel precedente articolo abbiamo completato la migrazione da iCloud a Immich, conquistando il controllo totale delle nostre foto. Con foto e musica ormai gestite autonomamente, il prossimo passo è creare un workspace digitale completo: AFFiNE, una piattaforma all-in-one che combina note, whiteboard, database e funzionalità AI in un’unica soluzione self-hosted.

Info
AFFiNE vs servizi commerciali: Combina le funzionalità di Notion, Miro e Obsidian in un’unica piattaforma. Nessun limite di blocchi, nessuna lettura automatica dei contenuti, nessun vendor lock-in. I tuoi dati rimangono completamente sotto il tuo controllo.

Container Dedicato per AFFiNE Link to heading

Seguendo l’approccio consolidato della serie, creiamo un container LXC dedicato esclusivamente ad AFFiNE. AFFiNE richiede più risorse rispetto a semplici app di note, dato che include rendering di whiteboard, AI features e database integrato.

Creazione Container AFFiNE Link to heading

Via Interfaccia Web Proxmox:

  1. Create CTGeneral

    • CT ID: 107
    • Hostname: affine
    • Password: Impostare password sicura
  2. Template: ubuntu-22.04-standard

  3. Root Disk:

    • Storage: local-lvm
    • Disk size: 8 GB (minimo, dati su disco esterno)
  4. CPU:

    • Cores: 2 (AFFiNE raccomanda almeno 4 core, 2 core per uso singolo utente)
  5. Memory:

    • Memory: 4 GB (AFFiNE è più esigente per AI e whiteboard)
    • Swap: 2 GB
  6. Network:

    • Bridge: vmbr0
    • IPv4: Static
    • IPv4/CIDR: 192.168.1.208/24
    • Gateway: 192.168.1.1
    • Firewall: ✓ Enabled

Storage Strategy per AFFiNE Link to heading

AFFiNE gestisce non solo note testuali, ma anche whiteboard con elementi grafici, database e attachment vari. Tuttavia, per un utente singolo, i volumi rimangono gestibili. Manteniamo tutti i dati sul disco interno M.2 per massimizzare le performance del database PostgreSQL e Redis.

Info
Scelta Storage: AFFiNE include PostgreSQL, Redis e file storage. Il database beneficia della velocità dell’SSD M.2 interno. Il volume dei dati sarà contenuto (10-20GB con uso intensivo), rendendo appropriato l’uso del disco interno.
Tip
Performance vs Storage: AFFiNE privilegia velocità per rendering whiteboard e AI features. Database PostgreSQL e Redis cache performano meglio su SSD interno rispetto a storage di rete.

Setup Docker nel Container AFFiNE Link to heading

# Avviare il container
pct start 107

# Entrare nel container
pct enter 107

# Aggiornare sistema e installare Docker
apt update && apt install -y curl
curl -fsSL https://get.docker.com | sudo sh
usermod -aG docker $USER

# Verificare installazione
docker --version

# Riavviare per applicare gruppo docker
exit
pct reboot 107
pct enter 107

Preparazione Directory per AFFiNE Link to heading

# Creare struttura directory per AFFiNE sul disco interno
mkdir -p /opt/affine/{postgres,redis,storage}

# Verificare spazio disponibile su disco interno
df -h /

# Verificare permessi
ls -la /opt/affine/

Setup AFFiNE con Docker Compose Link to heading

AFFiNE richiede PostgreSQL e Redis per funzionare. Utilizziamo la configurazione ufficiale Docker Compose fornita dal progetto.

Step 1 - Download File Ufficiali Link to heading

# Creare directory di lavoro
mkdir -p /root/affine-app
cd /root/affine-app

# Scaricare docker-compose.yml ufficiale
wget -O docker-compose.yml https://github.com/toeverything/affine/releases/latest/download/docker-compose.yml

# Scaricare file .env di esempio
wget -O .env https://github.com/toeverything/affine/releases/latest/download/default.env.example

# Verificare download
ls -la

Step 2 - Personalizzazione File .env Link to heading

Il file .env scaricato contiene tutte le variabili necessarie. Personalizziamolo per il nostro setup:

# Editare il file .env
nano .env

Configurazioni principali da modificare:

# URL base per accesso web
AFFINE_SERVER_HOST=192.168.1.208
AFFINE_SERVER_PORT=3010

# Database PostgreSQL
POSTGRES_USER=affine
POSTGRES_PASSWORD=affine_secure_password_456
POSTGRES_DB=affine

# Redis (mantieni default)
REDIS_HOST=redis
REDIS_PORT=6379

# Storage paths (personalizzati per nostro setup)
AFFINE_CONFIG_PATH=/opt/affine/storage
POSTGRES_DATA_PATH=/opt/affine/postgres
REDIS_DATA_PATH=/opt/affine/redis

# Feature flags (opzionali)
AFFINE_ADMIN_EMAIL=[email protected]
AFFINE_ADMIN_PASSWORD=admin_password_123
Warning
Password Sicure: Cambiare tutte le password di default con valori sicuri. Usare caratteri A-Za-z0-9_- per evitare problemi di escape nei container.

Step 3 - Verifica e Personalizzazione Docker Compose Link to heading

Il file docker-compose.yml ufficiale è ben configurato, ma verifichiamo che usi i nostri path personalizzati:

# Verificare contenuto docker-compose.yml
cat docker-compose.yml

# Il file dovrebbe riferirsi alle variabili .env per i path
# Se necessario, possiamo modificare i volumi per puntare ai nostri path
Info
Docker Compose Ufficiale: AFFiNE fornisce una configurazione Docker Compose completa che include PostgreSQL con estensione pgvector, Redis e il server AFFiNE. Non è necessario modificare manualmente il YAML.

Step 4 - Primo Avvio di AFFiNE Link to heading

# Dalla directory del progetto
cd /root/affine-app

# Verificare configurazione
docker compose config

# Primo pull delle immagini (può richiedere tempo)
docker compose pull

# Avvio servizi
docker compose up -d

# Verificare stato container
docker compose ps

# Dovremmo vedere 3 container running: affine, postgres, redis

Step 5 - Verifica Funzionamento Link to heading

# Controllare log del server AFFiNE
docker compose logs affine

# Dovremmo vedere messaggi come:
# "Server listening on port 3010"
# "Database connected successfully"

# Controllare log database e redis
docker compose logs postgres
docker compose logs redis

Accesso e Configurazione Iniziale Link to heading

AFFiNE dovrebbe essere accessibile su http://192.168.1.208:3010.

Primo Accesso e Setup Link to heading

  1. Aprire browser e navigare a http://192.168.1.208:3010
  2. Se è la prima volta, AFFiNE mostrerà la schermata di benvenuto
  3. Creare account:
  4. Confermare registrazione
Info
Workspace Personale: AFFiNE crea automaticamente un workspace personale per ogni utente. Tutti i documenti, whiteboard e database sono organizzati all’interno del workspace.

Esplorazione Funzionalità AFFiNE Link to heading

AFFiNE combina diverse modalità di lavoro in un’unica interfaccia:

📝 Page Mode: Note tradizionali in stile Notion

  • Blocchi di testo, immagini, tabelle
  • Markdown support nativo
  • Struttura gerarchica documenti

🎨 Edgeless Mode: Whiteboard infinito

  • Canvas per diagrammi e brainstorming
  • Elementi grafici e connessioni
  • Ideale per mappe mentali

🗃️ Database Mode: Tabelle e viste

  • Gestione dati strutturati
  • Filtri e ordinamenti
  • Viste multiple (tabella, kanban, calendario)

Prossimi Passi Link to heading

Con AFFiNE operativo, abbiamo aggiunto un workspace digitale completo al nostro ecosistema self-hosted. Non più solo note, ma un ambiente integrato per documenti, whiteboard, database e collaborazione - tutto sotto il nostro controllo.

AFFiNE rappresenta un salto qualitativo rispetto ai semplici note-taking app: combina la flessibilità di Notion, la creatività di Miro e la potenza di un database, il tutto in un’unica piattaforma self-hosted.

Il prossimo servizio nella roadmap homelab sarà la gestione documenti con Paperless-NGX, per digitalizzare e organizzare documenti fisici con OCR automatico, completando così la transizione verso un ufficio completamente digitale.

Continua con: Homelab: Paperless-NGX e Gestione Documenti