Passa al contenuto principale
Versione: Prossima

Database

Openbeehive memorizza tutti i suoi dati lato server in un database relazionale. Il backend è agnostico rispetto al database: comunica con un livello di archiviazione modulare e include driver per SQLite, PostgreSQL e MySQL. Scegli quale usare con due variabili d'ambiente.

Questa pagina spiega come scegliere il database giusto per la tua situazione e come configurarlo correttamente.

:::note Dove risiedono i dati offline? L'app sul tuo telefono o laptop mantiene il proprio database locale SQLite-WASM e funziona completamente offline. Il database del server descritto qui è la copia centrale verso cui i dispositivi sincronizzano in background. Sono archivi separati; questa pagina riguarda solo il server. :::

Le due impostazioni

Ogni database è configurato tramite la stessa coppia di variabili:

VariabileScopo
BEEHIVE_DATABASE_DRIVERQuale motore usare: sqlite, postgres o mysql.
BEEHIVE_DATABASE_DSNLa stringa di connessione (Data Source Name) per quel motore.

Il profilo di deployment selfhost usa SQLite per impostazione predefinita, mentre il profilo cloud usa PostgreSQL. Puoi sovrascrivere entrambi impostando esplicitamente queste due variabili. Vedi Configurazione per l'elenco completo delle variabili d'ambiente.

Quale database dovrei scegliere?

SituazioneConsigliato
Singolo apicoltore, un server, configurazione il più semplice possibileSQLite
Alcuni membri della famiglia che condividono apiariSQLite o PostgreSQL
Molti utenti, sincronizzazione concorrente intensa o deployment ospitato/cloudPostgreSQL
Esegui già MySQL/MariaDB e vuoi una cosa in meno da gestireMySQL

:::tip In breve In caso di dubbio, usa SQLite. Non richiede un servizio separato, risiede in un unico file ed è perfettamente in grado di gestire un alveare personale o familiare. Passa a PostgreSQL quando hai una vera concorrenza multiutente o vuoi un hosting cloud gestito. :::

SQLite (predefinito per il self-host)

SQLite è la scelta a dipendenza zero. Non c'è alcun server di database da installare o gestire: i tuoi dati risiedono in un file su disco, il che rende i backup semplici come copiare quel file.

BEEHIVE_DATABASE_DRIVER=sqlite
BEEHIVE_DATABASE_DSN=file:openbeehive.db?_pragma=journal_mode(WAL)

La parte _pragma=journal_mode(WAL) abilita il Write-Ahead Logging. Il WAL consente ai lettori e a uno scrittore di lavorare contemporaneamente senza bloccarsi a vicenda, il che migliora notevolmente il comportamento quando più dispositivi si sincronizzano contemporaneamente. Consigliamo vivamente di tenerlo attivo.

Un paio di pragma utili che puoi aggiungere (separali con &):

BEEHIVE_DATABASE_DSN=file:openbeehive.db?_pragma=journal_mode(WAL)&_pragma=busy_timeout(5000)
  • journal_mode(WAL) — letture concorrenti insieme a uno scrittore.
  • busy_timeout(5000) — attende fino a 5 secondi per un lock invece di fallire immediatamente.

Puoi usare un percorso relativo (risolto rispetto alla directory di lavoro del server) o un percorso assoluto come file:/var/lib/openbeehive/openbeehive.db?_pragma=journal_mode(WAL).

:::caution Il WAL crea file extra In modalità WAL SQLite mantiene file di accompagnamento accanto al database principale (openbeehive.db-wal e openbeehive.db-shm). Quando esegui il backup tramite copia di file, ferma prima il server, oppure usa gli strumenti di backup propri di SQLite, così catturi un'istantanea coerente. Vedi Backup. :::

PostgreSQL

PostgreSQL è la scelta giusta per le configurazioni multiutente, il servizio ospitato e qualsiasi deployment in cui molti dispositivi si sincronizzano contemporaneamente. È anche il valore predefinito per il profilo cloud.

BEEHIVE_DATABASE_DRIVER=postgres
BEEHIVE_DATABASE_DSN=postgres://user:pass@host:5432/db?sslmode=disable

Un esempio più realistico che punta a un database chiamato openbeehive:

BEEHIVE_DATABASE_DRIVER=postgres
BEEHIVE_DATABASE_DSN=postgres://openbeehive:secret@db.example.com:5432/openbeehive?sslmode=require

Il parametro sslmode controlla la sicurezza del trasporto:

ValoreSignificato
disableNessun TLS. Va bene per un database sullo stesso host o su una rete privata fidata.
requireCifra la connessione (senza verifica del certificato).
verify-fullCifra e verifica il certificato del server e l'hostname. Il più robusto.

:::caution Sicurezza in produzione Usa sslmode=require o più forte ogni volta che il database comunica con il server su una rete che non controlli completamente. Riserva sslmode=disable alle connessioni solo locali. :::

Crea il database e l'utente prima del primo avvio, ad esempio:

CREATE DATABASE openbeehive;
CREATE USER openbeehive WITH PASSWORD 'secret';
GRANT ALL PRIVILEGES ON DATABASE openbeehive TO openbeehive;

MySQL

MySQL (e MariaDB) sono supportati per chi ne gestisce già uno. Il formato del DSN differisce da PostgreSQL: usa la sintassi del driver MySQL di Go.

BEEHIVE_DATABASE_DRIVER=mysql
BEEHIVE_DATABASE_DSN=user:pass@tcp(host:3306)/openbeehive?parseTime=true

Il parametro parseTime=true è obbligatorio. Indica al driver di restituire le colonne DATE e DATETIME come valori temporali appropriati anziché byte grezzi, cosa su cui Openbeehive fa affidamento per i timestamp e la gestione dell'Hybrid Logical Clock. Ometterlo causerà errori.

Un esempio più completo con UTF-8 e una posizione predefinita sensata:

BEEHIVE_DATABASE_DRIVER=mysql
BEEHIVE_DATABASE_DSN=openbeehive:secret@tcp(db.example.com:3306)/openbeehive?parseTime=true&charset=utf8mb4&loc=UTC

Crea prima il database e l'utente:

CREATE DATABASE openbeehive CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'openbeehive'@'%' IDENTIFIED BY 'secret';
GRANT ALL PRIVILEGES ON openbeehive.* TO 'openbeehive'@'%';
FLUSH PRIVILEGES;

Le migrazioni vengono eseguite automaticamente

Non esegui le migrazioni a mano. A ogni avvio, il server controlla lo schema e applica eventuali migrazioni in sospeso prima di iniziare a servire le richieste. Un database nuovo e vuoto viene configurato automaticamente al primo avvio.

L'SQL è scritto in modo portabile così lo stesso schema funziona su tutti e tre i motori; non c'è alcuna configurazione specifica del motore oltre alla creazione del database e dell'utente mostrata sopra.

:::tip Esegui sempre il backup prima di aggiornare Poiché una nuova versione può includere migrazioni che modificano lo schema, esegui un backup prima di aggiornare. Vedi Aggiornamento e Backup. :::

Cambiare database in seguito

I driver non sono intercambiabili a livello di dati: puntare BEEHIVE_DATABASE_DRIVER a un motore diverso non sposta i tuoi registri tra di essi. Per migrare, ad esempio, da SQLite a PostgreSQL dovresti esportare e reimportare i tuoi dati. Per la maggior parte dei self-hoster il percorso più semplice è scegliere il database giusto fin dall'inizio.

Se ti serve solo un server centrale per te stesso, SQLite ti servirà bene per molto tempo.

Per saperne di più sulla configurazione circostante, vedi Self-hosting e Archiviazione.