Installation de NocoBase avec Docker

Prérequis
  • Vous avez installé Docker et Docker Compose.
  • Assurez-vous que le service Docker est en cours d'exécution.

1. Créer le fichier docker-compose.yml

# Créez un dossier nommé my-project (vous pouvez choisir un autre nom) pour stocker les fichiers système générés par NocoBase.
mkdir my-project && cd my-project

# Créez un fichier docker-compose.yml vide.
vi docker-compose.yml

2. Configurer le fichier docker-compose.yml

Choisissez une version de NocoBase (Comparaison des versions) et un type de base de données, puis copiez la configuration correspondante dans votre fichier docker-compose.yml.

Notes de configuration
  • Choisir une image : latest latest-full beta beta-full alpha alpha-full 1.7.14 1.7.14-full
    • Pour les environnements de production, nous vous recommandons de fixer une version spécifique pour éviter les mises à jour automatiques involontaires. Voir toutes les versions

    • Image Docker Hub : nocobase/nocobase:latest-full

    • L'image full inclut les clients PostgreSQL 16/17, MySQL 8.0, Oracle 19.25 nécessaires aux plugins de gestion des sauvegardes et des migrations, ainsi que LibreOffice pour l'impression de modèles (PDF).

    • Si vous souhaitez créer votre propre image, vous pouvez consulter les Dockerfile officiels (version allégée) et Dockerfile-full (version complète).

  • Modifier APP_KEY : Veuillez remplacer your-secret-key par une chaîne de caractères aléatoire. Cette clé est utilisée pour chiffrer les informations sensibles comme les jetons utilisateur.
  • Utiliser une base de données existante : Si vous disposez déjà d'un service de base de données, modifiez DB_HOST pour y indiquer l'adresse de votre serveur de base de données, puis supprimez ou commentez la configuration du service de base de données (par exemple, les services postgres, mysql, mariadb).
  • Mappage des ports : Par défaut, le port 80 du conteneur est mappé sur le port 13000 de l'hôte. Vous pouvez le modifier selon vos besoins.
Version Latest
Version Beta
Version Alpha
PostgreSQL
MySQL
MariaDB
networks:
  nocobase:
    driver: bridge

services:
  app:
    image: nocobase/nocobase:latest-full
    restart: always
    networks:
      - nocobase
    depends_on:
      - postgres
    environment:
      # Clé de l'application, utilisée pour générer les jetons utilisateur, etc.
      # Si APP_KEY est modifiée, les anciens jetons deviendront invalides.
      # Il peut s'agir de n'importe quelle chaîne de caractères aléatoire ; assurez-vous qu'elle ne soit pas divulguée.
      - APP_KEY=your-secret-key
      # Type de base de données, supporte postgres, mysql, mariadb
      - DB_DIALECT=postgres
      # Hôte de la base de données, peut être remplacé par l'IP d'un serveur de base de données existant
      - DB_HOST=postgres
      # Port de la base de données
      - DB_PORT=5432
      # Nom de la base de données
      - DB_DATABASE=nocobase
      # Utilisateur de la base de données
      - DB_USER=nocobase
      # Mot de passe de la base de données
      - DB_PASSWORD=nocobase
      # Fuseau horaire
      - TZ=Asia/Shanghai # Ou votre fuseau horaire local, par exemple Europe/Paris

    volumes:
      - ./storage:/app/nocobase/storage
    ports:
      - '13000:80'
    # init: true

  # Si vous utilisez un service de base de données existant, vous pouvez ne pas démarrer postgres.
  postgres:
    image: postgres:16
    restart: always
    command: postgres -c wal_level=logical
    environment:
      POSTGRES_USER: nocobase
      POSTGRES_DB: nocobase
      POSTGRES_PASSWORD: nocobase
    volumes:
      - ./storage/db/postgres:/var/lib/postgresql/data
    networks:
      - nocobase

3. Installer et démarrer NocoBase

# Téléchargez la dernière image
docker compose pull

# Exécutez en arrière-plan (l'installation s'exécutera automatiquement lors du premier démarrage)
docker compose up -d

# Affichez les journaux d'installation et d'exécution
docker compose logs -f app

app-postgres-app-1  | nginx started
app-postgres-app-1  | yarn run v1.22.15
app-postgres-app-1  | $ cross-env DOTENV_CONFIG_PATH=.env node -r dotenv/config packages/app/server/lib/index.js install -s
app-postgres-app-1  | Done in 2.72s.
app-postgres-app-1  | yarn run v1.22.15
app-postgres-app-1  | $ pm2-runtime start --node-args="-r dotenv/config" packages/app/server/lib/index.js -- start
app-postgres-app-1  | 2022-04-28T15:45:38: PM2 log: Launching in no daemon mode
app-postgres-app-1  | 2022-04-28T15:45:38: PM2 log: App [index:0] starting in -fork mode-
app-postgres-app-1  | 2022-04-28T15:45:38: PM2 log: App [index:0] online
app-postgres-app-1  | 🚀 NocoBase server running at: http://localhost:13000/

4. Se connecter à NocoBase

Ouvrez http://localhost:13000 dans votre navigateur. Les identifiants initiaux sont admin@nocobase.com et admin123.

Avis de sécurité du compte

Après votre première connexion, veuillez modifier rapidement le mot de passe par défaut pour garantir la sécurité du système.

5. Déploiement en production

Si vous utilisez l'image avec Nginx intégré, il est généralement préférable de ne pas exposer directement 13000 sur Internet. Le plus courant est de garder le port du conteneur accessible uniquement depuis l'hôte, puis de laisser le Nginx de l'hôte gérer le domaine, HTTPS et le proxy inverse.

Proxy de la racine avec Nginx

La configuration suivante proxy les requêtes du domaine vers http://127.0.0.1:13000/ :

server {
    listen 80;
    server_name your_domain.com;  # Remplacez your_domain.com par votre domaine

    location / {
        proxy_pass http://127.0.0.1:13000/;
        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $upstream_x_forwarded_proto;
        proxy_set_header Host $final_host;
        proxy_set_header Referer $http_referer;
        proxy_set_header User-Agent $http_user_agent;

        add_header Cache-Control "no-cache, no-store" always;
        proxy_cache_bypass $http_upgrade;

        proxy_connect_timeout 600;
        proxy_send_timeout 600;
        proxy_read_timeout 600;
        send_timeout 600;
        proxy_buffering off;
    }
}

Si vous voulez aussi activer HTTPS, configurez 443 et le certificat dans le Nginx de l'hôte. Le conteneur NocoBase n'a pas besoin de gérer les certificats séparément.

Le bloc location / de cette configuration à la racine transmet également /api/, /ws et /files/. Si vous séparez les ressources statiques des routes de l'application, assurez-vous que /files/ reste transmis à NocoBase et n'est pas traité comme un répertoire statique.

Déploiement sous un sous-chemin

Si vous voulez déployer l'application sous un sous-chemin, par exemple https://your_domain.com/nocobase/, configurez d'abord la variable d'environnement APP_PUBLIC_PATH :

services:
  app:
    image: nocobase/nocobase:latest
    environment:
+     - APP_PUBLIC_PATH=/nocobase/

Conservez le / au début et à la fin du chemin. Une fois la configuration terminée, l'URL de l'application devient http://127.0.0.1:13000/nocobase/.

Configurez ensuite le Nginx de l'hôte avec le même sous-chemin :

server {
    listen 80;
    server_name your_domain.com;  # Remplacez your_domain.com par votre domaine

    location /nocobase/ {
        proxy_pass http://127.0.0.1:13000/nocobase/;
        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $upstream_x_forwarded_proto;
        proxy_set_header Host $final_host;
        proxy_set_header Referer $http_referer;
        proxy_set_header User-Agent $http_user_agent;

        add_header Cache-Control "no-cache, no-store" always;
        proxy_cache_bypass $http_upgrade;

        proxy_connect_timeout 600;
        proxy_send_timeout 600;
        proxy_read_timeout 600;
        send_timeout 600;
        proxy_buffering off;
    }

    # Conserver la compatibilité avec les URL d'accès aux fichiers à la racine.
    location ^~ /files/ {
        proxy_pass http://127.0.0.1:13000;
        proxy_http_version 1.1;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $upstream_x_forwarded_proto;
        proxy_set_header Host $final_host;
        proxy_set_header Referer $http_referer;
        proxy_set_header User-Agent $http_user_agent;

        add_header Cache-Control "no-cache, no-store" always;

        proxy_connect_timeout 600;
        proxy_send_timeout 600;
        proxy_read_timeout 600;
        send_timeout 600;
    }
}

Gardez ces points à l'esprit :

  • APP_PUBLIC_PATH et le chemin dans proxy_pass doivent rester cohérents. Si l'un des deux oublie /nocobase/, les ressources statiques et le routage risquent de ne pas fonctionner correctement
  • /nocobase/files/ est transmis par location /nocobase/ ; la route compatible /files/ à la racine doit être transmise séparément à NocoBase

Autres options

Si vous ne voulez pas utiliser le Nginx intégré, vous pouvez aussi consulter ces deux configurations avec proxy séparé :