---
title: "NocoDB avec Docker Compose et hébergement en un clic"
description: "NocoDB fait d’une base de données des tableurs, formulaires et kanbans pour tous. Auto-hébergez cette alternative à Airtable avec PostgreSQL en un clic."
---

[← Tous les templates](https://pethost.dev/fr/templates/) · [Productivité](https://pethost.dev/fr/templates/productivity/)

# Déployez NocoDB en un clic

Une base de données sans code : des tables façon tableur, des formulaires, des tableaux kanban et des calendriers, avec une API

Une alternative auto-hébergée à Airtable.

[Déployer sur Pethost](https://console.pethost.dev/?template=nocodb)

## Qu’est-ce que NocoDB ?

NocoDB est une plateforme de base de données sans code : les tables ont l’aspect et le fonctionnement d’un tableur, et chacune peut aussi s’afficher en formulaire, en galerie, en tableau kanban, en calendrier, en carte ou en diagramme de Gantt. Les champs contiennent du texte, des nombres, des dates, des sélections, des pièces jointes, des formules, des liens vers d’autres tables, des lookups et des synthèses. Chaque table a une API REST, des webhooks se déclenchent quand des enregistrements sont créés, modifiés ou supprimés, et les tables s’importent depuis Airtable, CSV, Excel et JSON.

Des équipes utilisent NocoDB à la place d’Airtable pour tenir un CRM, un inventaire, un calendrier éditorial ou n’importe quelle liste partagée dans une base de données qu’elles contrôlent. Ce template fait tourner l’édition Community, gratuite, avec PostgreSQL, crée le super administrateur à partir des champs avant que NocoDB ne réponde à quiconque, et ferme l’inscription : on n’y entre que sur invitation. Le revers : la Sustainable Use License de NocoDB autorise l’usage interne et personnel mais pas la revente, et le SSO ainsi que les permissions par table et par champ font partie des offres auto-hébergées payantes.

## Hébergement de NocoDB sur Pethost

1. Vous vous connectez à Pethost avec une clé d’accès, GitHub ou Google. Pas encore de machine ? Vous choisissez une offre, et le lien attend qu’elle soit prête.
2. Nouveau projet s’ouvre sur NocoDB. Vous remplissez ce qu’il demande et cliquez sur Créer le projet : **E-mail**, **Mot de passe administrateur**.
3. En une minute ou deux, NocoDB tourne à sa propre adresse en HTTPS. Ses secrets sont créés au hasard, et ses données sont dans la sauvegarde nocturne.
4. C’est un projet comme les autres : vous ou votre agent pouvez le modifier, revenir à une version précédente ou le restaurer.

## Questions sur NocoDB

**NocoDB est-il gratuit ?**

L’édition Community auto-hébergée est gratuite, sans limite d’enregistrements ni d’utilisateurs, sous la Sustainable Use License de NocoDB : vous pouvez l’utiliser au sein de votre propre entreprise ou pour un usage personnel, mais pas la vendre à d’autres. Les offres auto-hébergées payantes commencent à 24 $ par utilisateur et par mois, en facturation annuelle, et ajoutent le SSO et les permissions par table et par champ.

**NocoDB ou Airtable : quelle différence ?**

Les deux affichent les tables en tableur, avec formulaires, kanban et galeries. Airtable ne tourne que dans son propre cloud, facturé par utilisateur, alors que NocoDB tourne là où vous le déployez, et son édition Community ne limite pas le nombre d’enregistrements.

**Puis-je importer mes bases Airtable dans NocoDB ?**

Oui. NocoDB importe une base à partir de son lien de partage, avec un token d’accès personnel Airtable autorisé à lire les enregistrements, et en reprend les tables, les vues et les enregistrements. Les champs de formule ne sont pas repris, et le lien d’une vue partagée n’apporte que cette table-là.

**NocoDB a-t-il une API ?**

Oui. Chaque table a une API REST, appelée avec un token d’API, et des webhooks envoient une requête quand un enregistrement est créé, modifié ou supprimé : d’autres applications et des scripts peuvent ainsi lire et écrire les données.

**Comment ajouter des personnes dans NocoDB ?**

Dans Members & teams → Ajouter des membres, par e-mail ou avec un lien d’invitation privé, en choisissant leur rôle. Ce template ferme l’inscription publique, donc personne n’entre sans invitation. NocoDB envoie les invitations par e-mail une fois que NC_SMTP_HOST et les autres réglages NC_SMTP_ sont dans le .env du projet.

**De combien de mémoire et de disque NocoDB a-t-il besoin ?**

NocoDB prend environ 800 MB de mémoire avec Postgres, et sa base de données grossit avec vos enregistrements ; les pièces jointes prennent la place de leurs fichiers. Sur Pethost, l’offre Starter lui suffit, avec de la place pour d’autres applications à côté.

## Le fichier Docker Compose de NocoDB

Le template, c’est ce compose.yaml et les variables écrites dans le .env du projet à sa création. Pethost exécute le fichier tel qu’il est écrit.

**Conteneurs :** nocodb (nocodb/nocodb:2026.10.0), postgres (postgres:18-alpine).

**Volumes, dans la sauvegarde nocturne :** data, db.

```
services:
  nocodb:
    image: nocodb/nocodb:2026.10.0
    restart: unless-stopped
    # Any setting of NocoDB can be added to the project's .env, such as NC_SMTP_HOST and the other
    # NC_SMTP_ settings, which send its invitations and password resets by email.
    env_file: .env
    environment:
      NC_DB: pg://postgres:5432?u=nocodb&p=${POSTGRES_PASSWORD}&d=nocodb
      NC_AUTH_JWT_SECRET: ${JWT_SECRET}
      NC_SITE_URL: ${URL}
      # The super admin is made from these at the first start, before NocoDB answers anyone, and
      # its email and password are set again from them at every start: change them here.
      NC_ADMIN_EMAIL: ${ADMIN_EMAIL}
      NC_ADMIN_PASSWORD: ${ADMIN_PASSWORD}
      # Uploaded files are served only to those signed in, through links that expire.
      NC_SECURE_ATTACHMENTS: "true"
    # A new NocoDB lets anyone sign up, and only its super admin closes that, in Account → Setup.
    # So until that setting has been saved once, NocoDB runs on port 8081, which nobody reaches,
    # and the super admin closes sign-up there; only then does it answer on 8080. Turned on again
    # in NocoDB later, sign-up stays open.
    command:
      - sh
      - -c
      - |
        set -e
        cd /usr/src/app
        if ! node -e '
          const { Client } = require("pg");
          const url = new URL(process.env.NC_DB);
          const params = url.searchParams;
          const connection = { host: url.hostname, port: Number(url.port), user: params.get("u"), password: params.get("p"), database: params.get("d") };
          (async () => {
            for (let i = 0; i < 60; i++) {
              const db = new Client(connection);
              try {
                await db.connect();
                const result = await db.query("select 1 from nc_store where key = $$1", ["nc-app-settings"]);
                process.exit(result.rowCount > 0 ? 0 : 1);
              } catch (error) {
                // No such table: a new database, which the migrations of NocoDB have yet to fill.
                if (error.code === "42P01") process.exit(1);
                await db.end().catch(() => {});
                await new Promise((done) => setTimeout(done, 1000));
              }
            }
            process.exit(1);
          })();
        '; then
          PORT=8081 node --no-wasm-dynamic-tiering --no-wasm-tier-up docker/index.js &
          setup=$$!
          node -e '
            const base = "http://127.0.0.1:8081";
            const call = async (path, body, token) => {
              const response = await fetch(base + path, {
                method: "POST",
                headers: { "content-type": "application/json", ...(token ? { "xc-auth": token } : {}) },
                body: JSON.stringify(body)
              });
              if (!response.ok) throw new Error(path + ": " + response.status + " " + (await response.text()));
              return response.json();
            };
            const closeSignUp = async () => {
              const { token } = await call("/api/v1/auth/user/signin", { email: process.env.NC_ADMIN_EMAIL, password: process.env.NC_ADMIN_PASSWORD });
              await call("/api/v1/app-settings", { invite_only_signup: true }, token);
            };
            (async () => {
              let failure;
              for (let i = 0; i < 300; i++) {
                try {
                  return await closeSignUp();
                } catch (error) {
                  failure = error;
                  await new Promise((done) => setTimeout(done, 1000));
                }
              }
              console.error(failure);
              process.exit(1);
            })();
          '
          kill $$setup
          wait $$setup || true
        fi
        exec /usr/src/appEntry/start.sh
    volumes:
      - data:/usr/app/data
    depends_on:
      postgres:
        condition: service_healthy
    # The port listens before NocoDB is ready: the deploy waits for its health.
    healthcheck:
      test: ["CMD-SHELL", "wget -q --tries=1 --spider http://127.0.0.1:8080/api/v1/health || exit 1"]
      interval: 5s
      timeout: 5s
      retries: 5
      start_period: 120s

  postgres:
    image: postgres:18-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: nocodb
      POSTGRES_USER: nocodb
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - db:/var/lib/postgresql
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -h 127.0.0.1 -U nocodb -d nocodb"]
      interval: 5s
      timeout: 5s
      retries: 10
      start_period: 30s

volumes:
  data:
  db:
```

[compose.yaml](https://pethost.dev/templates/nocodb/compose.yaml)[Le voir sur GitHub](https://github.com/pethost-dev/templates/tree/main/nocodb)

## [Aussi dans Productivité](https://pethost.dev/fr/templates/productivity/)

- [**Mealie**Un gestionnaire de recettes et planificateur de repas](https://pethost.dev/fr/templates/mealie/)
- [**Ryot**Un outil de suivi pour films, séries, livres, jeux et entraînements](https://pethost.dev/fr/templates/ryot/)
- [**Vikunja**Listes de tâches et projets, avec vues kanban et Gantt](https://pethost.dev/fr/templates/vikunja/)
- [**Excalidraw**Un tableau blanc pour des schémas et des croquis dessinés à la main, avec collaboration en direct](https://pethost.dev/fr/templates/excalidraw/)
- [**Odoo**Des applications de gestion réunies en une seule : CRM, ventes, facturation, inventaire, site web, projets et plus encore](https://pethost.dev/fr/templates/odoo/)
- [**PLANKA**Des tableaux kanban pour les projets et les équipes, mis à jour en temps réel pour tout le monde](https://pethost.dev/fr/templates/planka/)

Pethost · Stephan Gomer · NIP 1133096755

Pethost

- [Templates](https://pethost.dev/fr/templates/)
- [À propos](https://pethost.dev/about/)
- [Docs](https://pethost.dev/docs/)
- [Blog](https://pethost.dev/fr/blog/)
- [API](https://pethost.dev/docs/api/)
- [CLI](https://pethost.dev/docs/cli/)
- [Plugin](https://github.com/pethost-dev/plugin)
- [Conditions](https://pethost.dev/terms/)
- [Confidentialité](https://pethost.dev/privacy/)
- [Remboursements](https://pethost.dev/refunds/)
- [support@pethost.dev](mailto:support@pethost.dev)

Bases de données

- [Postgres](https://pethost.dev/fr/postgres/)

Comparatifs

- [Coolify vs Dokploy vs CapRover vs Dokku](https://pethost.dev/fr/blog/coolify-vs-dokploy-vs-caprover-vs-dokku/)
- [Coolify Cloud vs Dokploy Cloud](https://pethost.dev/fr/blog/coolify-cloud-vs-dokploy-cloud/)
- [Tarifs Railway vs Render vs Fly.io](https://pethost.dev/fr/blog/railway-vs-render-vs-fly-io-pricing/)
- [Hébergement Docker Compose managé](https://pethost.dev/fr/blog/managed-docker-compose-hosting/)

Alternatives

- [Alternatives à Railway](https://pethost.dev/fr/blog/railway-alternatives/)
- [Alternatives à Heroku](https://pethost.dev/fr/blog/heroku-alternatives/)
- [Alternatives à Dokploy](https://pethost.dev/fr/blog/dokploy-alternatives/)
- [Alternatives à Coolify](https://pethost.dev/fr/blog/coolify-alternatives/)
- [Alternatives à Render](https://pethost.dev/fr/blog/render-alternatives/)
- [Alternatives à Sliplane](https://pethost.dev/fr/blog/sliplane-alternatives/)
