NocoDB è una piattaforma open source no-code che permette di costruire database potenti con la semplicità di un foglio di calcolo. In pratica, trasforma qualsiasi database (PostgreSQL, MySQL, SQLite, SQL Server) in un’interfaccia visuale intuitiva, accessibile anche a chi non ha competenze tecniche di programmazione. Questo progetto è nato come alternativa open source ad Airtable.

A differenza dei servizi SaaS proprietari, NocoDB non impone limiti artificiali sull’accesso ai tuoi dati. Facendo self-hosting sulla tua infrastruttura puoi mantenere il pieno controllo dei tuoi dati senza vendor lock-in. La piattaforma gestisce grandi moli di dati senza dover passare a un piano a pagamento per sbloccare funzionalità specifiche.

A livello pratico, NocoDB può essere utilizzato in varie modalità: l’interfaccia è nativamente responsive, permette di visualizzare i dati in modi differenti (Grid, Kanban, Gallery, Form, Calendar) e genera API REST in automatico per integrare le varie fonti dati senza dover scrivere codice aggiuntivo.

NOTA IMPORTANTE: FLAKE ESTERNO

NocoDB non è in nixpkgs

NocoDB non è presente nei repository ufficiali di nixpkgs, quindi non lo troverai su search.nixos.org . Il team di NocoDB ha scelto di distribuire il package e il modulo NixOS tramite il proprio flake su GitHub.

Questo significa che:

  • Non puoi installarlo con un semplice pkgs.nocodb
  • Devi usare i Nix Flakes e aggiungere l’input github:nocodb/nocodb
  • Il modulo services.nocodb è disponibile solo dopo aver importato il flake

Questa scelta permette al progetto di rilasciare aggiornamenti più frequenti senza dipendere dai cicli di release di nixpkgs.

PROCESSO DI INSTALLAZIONE

NocoDB fornisce un modulo NixOS ufficiale tramite il suo flake. Questo permette un’installazione dichiarativa e riproducibile direttamente nella configurazione del sistema.

Configurazione del Flake

Nel tuo flake.nix, aggiungi NocoDB come input:

nix
{
  description = "NixOS configuration with NocoDB";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    nocodb.url = "github:nocodb/nocodb";
  };

  outputs = { self, nixpkgs, nocodb }: {
    nixosConfigurations.hostname = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      modules = [
        ./configuration.nix
        nocodb.nixosModules.nocodb
      ];
    };
  };
}

Configurazione Base (SQLite)

Il modulo NixOS usa SQLite di default, perfetto per installazioni single-user o piccoli team:

nix
{ config, pkgs, ... }:

{
  services.nocodb = {
    enable = true;
    environment = {
      NC_PORT = "8080";
      NC_DISABLE_TELE = "true";
      NC_INVITE_ONLY_SIGNUP = "true";
    };
  };

  # Apri la porta nel firewall
  networking.firewall.allowedTCPPorts = [ 8080 ];
}

Configurazione Avanzata con PostgreSQL

Per ambienti di produzione, è consigliato utilizzare PostgreSQL come database backend:

nix
{ config, pkgs, ... }:

{
  # Database PostgreSQL
  services.postgresql = {
    enable = true;
    ensureDatabases = [ "nocodb" ];
    ensureUsers = [
      {
        name = "nocodb";
        ensureDBOwnership = true;
      }
    ];
  };

  # Servizio NocoDB
  services.nocodb = {
    enable = true;
    environmentFile = "/var/lib/nocodb/secrets.env";
    environment = {
      NC_DB = "pg://localhost:5432?u=nocodb&d=nocodb";
      NC_PORT = "8080";
      NC_DISABLE_TELE = "true";
      NC_INVITE_ONLY_SIGNUP = "true";
    };
  };

  # Apri la porta nel firewall
  networking.firewall.allowedTCPPorts = [ 8080 ];
}

File dei Segreti

Crea il file /var/lib/nocodb/secrets.env con le variabili sensibili:

bash
# Autenticazione PostgreSQL
NC_DB_PASSWORD=password_sicura_database

# JWT Secret (minimo 256 bit)
NC_AUTH_JWT_SECRET=chiave_jwt_molto_lunga_e_sicura_generata_casualmente

# Credenziali Admin iniziali
NC_ADMIN_EMAIL=admin@nome-dominio.com
NC_ADMIN_PASSWORD=password_admin_sicura

# SMTP (opzionale)
NC_SMTP_HOST=smtp.gmail.com
NC_SMTP_PORT=587
NC_SMTP_USERNAME=your_email@gmail.com
NC_SMTP_PASSWORD=your_app_password
NC_SMTP_FROM=noreply@nome-dominio.com

Proteggi il file:

bash
sudo mkdir -p /var/lib/nocodb
sudo chown root:root /var/lib/nocodb/secrets.env
sudo chmod 600 /var/lib/nocodb/secrets.env

Applicazione della Configurazione

  1. Aggiorna il flake:
bash
nix flake update
  1. Ricostruisci il sistema:
bash
sudo nixos-rebuild switch --flake .#hostname
  1. Verifica lo stato del servizio:
bash
systemctl status nocodb
  1. Visualizza i log:
bash
journalctl -u nocodb -f
  1. Accedi all’interfaccia web: Apri il browser e vai su http://localhost:8080

SPIEGAZIONE DEL CODICE

Modulo NixOS

Il modulo NixOS di NocoDB crea automaticamente un servizio systemd con le seguenti caratteristiche:

  • Utente dinamico: Il servizio gira con un utente non privilegiato creato automaticamente
  • Stato persistente: I dati vengono salvati in /var/lib/nocodb/
  • Riavvio automatico: In caso di crash, il servizio si riavvia automaticamente
  • Isolamento: Il servizio è isolato dal resto del sistema per maggiore sicurezza

Integrazione PostgreSQL

Utilizzando services.postgresql di NixOS, il database viene gestito in modo dichiarativo:

  • Il database e l’utente vengono creati automaticamente
  • Le migrazioni dello schema sono gestite da NocoDB all’avvio
  • Il backup può essere integrato con gli strumenti standard di NixOS

Tabella delle Variabili d’Ambiente

Nome Variabile Scopo Valore Default Note
NC_DB Stringa di connessione database SQLite locale Formato: pg://host:port?u=user&d=database
NC_PORT Porta dell’interfaccia web 8080 Modifica se la porta è occupata
NC_AUTH_JWT_SECRET Chiave segreta per JWT - Obbligatoria - Minimo 256 bit
NC_ADMIN_EMAIL Email amministratore iniziale - Obbligatoria al primo avvio
NC_ADMIN_PASSWORD Password amministratore iniziale - Obbligatoria al primo avvio
NC_SMTP_HOST Server SMTP per email - Opzionale per notifiche
NC_SMTP_PORT Porta server SMTP 587 Standard per TLS
NC_SMTP_USERNAME Username SMTP - Per autenticazione email
NC_SMTP_PASSWORD Password SMTP - App password per Gmail
NC_SMTP_FROM Indirizzo mittente email - Email visibile agli utenti
NC_DISABLE_TELE Disabilita telemetria false Consigliato: “true”
NC_INVITE_ONLY_SIGNUP Registrazione solo su invito false Consigliato: “true” per sicurezza

Opzioni del Modulo NixOS

Opzione Tipo Default Descrizione
services.nocodb.enable bool false Abilita il servizio NocoDB
services.nocodb.package package dal flake Package NocoDB da utilizzare
services.nocodb.environment attrs { } Variabili d’ambiente non sensibili
services.nocodb.environmentFile path null File con variabili sensibili