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
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.
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
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:latest-full
restart: always
networks:
- nocobase
depends_on:
- mysql
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=mysql
# 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=mysql
# Port de la base de données
- DB_PORT=3306
# Nom de la base de données
- DB_DATABASE=nocobase
# Utilisateur de la base de données
- DB_USER=root
# Mot de passe de la base de données
- DB_PASSWORD=nocobase
# Indique si les noms de tables et de champs doivent être convertis au format snake_case.
- DB_UNDERSCORED=true
# 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 mysql.
mysql:
image: mysql:8
environment:
MYSQL_DATABASE: nocobase
MYSQL_USER: nocobase
MYSQL_PASSWORD: nocobase
MYSQL_ROOT_PASSWORD: nocobase
restart: always
volumes:
- ./storage/db/mysql:/var/lib/mysql
networks:
- nocobase
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:latest-full
restart: always
networks:
- nocobase
depends_on:
- mariadb
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=mariadb
# 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=mariadb
# Port de la base de données
- DB_PORT=3306
# Nom de la base de données
- DB_DATABASE=nocobase
# Utilisateur de la base de données
- DB_USER=root
# Mot de passe de la base de données
- DB_PASSWORD=nocobase
# Indique si les noms de tables et de champs doivent être convertis au format snake_case.
- DB_UNDERSCORED=true
# 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 mariadb.
mariadb:
image: mariadb:11
environment:
MYSQL_DATABASE: nocobase
MYSQL_USER: nocobase
MYSQL_PASSWORD: nocobase
MYSQL_ROOT_PASSWORD: nocobase
restart: always
volumes:
- ./storage/db/mariadb:/var/lib/mysql
networks:
- nocobase
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:beta-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
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:beta-full
restart: always
networks:
- nocobase
depends_on:
- mysql
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=mysql
# 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=mysql
# Port de la base de données
- DB_PORT=3306
# Nom de la base de données
- DB_DATABASE=nocobase
# Utilisateur de la base de données
- DB_USER=root
# Mot de passe de la base de données
- DB_PASSWORD=nocobase
# Indique si les noms de tables et de champs doivent être convertis au format snake_case.
- DB_UNDERSCORED=true
# 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 mysql.
mysql:
image: mysql:8
environment:
MYSQL_DATABASE: nocobase
MYSQL_USER: nocobase
MYSQL_PASSWORD: nocobase
MYSQL_ROOT_PASSWORD: nocobase
restart: always
volumes:
- ./storage/db/mysql:/var/lib/mysql
networks:
- nocobase
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:beta-full
restart: always
networks:
- nocobase
depends_on:
- mariadb
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=mariadb
# 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=mariadb
# Port de la base de données
- DB_PORT=3306
# Nom de la base de données
- DB_DATABASE=nocobase
# Utilisateur de la base de données
- DB_USER=root
# Mot de passe de la base de données
- DB_PASSWORD=nocobase
# Indique si les noms de tables et de champs doivent être convertis au format snake_case.
- DB_UNDERSCORED=true
# 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 mariadb.
mariadb:
image: mariadb:11
environment:
MYSQL_DATABASE: nocobase
MYSQL_USER: nocobase
MYSQL_PASSWORD: nocobase
MYSQL_ROOT_PASSWORD: nocobase
restart: always
volumes:
- ./storage/db/mariadb:/var/lib/mysql
networks:
- nocobase
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:alpha-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
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:alpha-full
restart: always
networks:
- nocobase
depends_on:
- mysql
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=mysql
# 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=mysql
# Port de la base de données
- DB_PORT=3306
# Nom de la base de données
- DB_DATABASE=nocobase
# Utilisateur de la base de données
- DB_USER=root
# Mot de passe de la base de données
- DB_PASSWORD=nocobase
# Indique si les noms de tables et de champs doivent être convertis au format snake_case.
- DB_UNDERSCORED=true
# 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 mysql.
mysql:
image: mysql:8
environment:
MYSQL_DATABASE: nocobase
MYSQL_USER: nocobase
MYSQL_PASSWORD: nocobase
MYSQL_ROOT_PASSWORD: nocobase
restart: always
volumes:
- ./storage/db/mysql:/var/lib/mysql
networks:
- nocobase
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:alpha-full
restart: always
networks:
- nocobase
depends_on:
- mariadb
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=mariadb
# 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=mariadb
# Port de la base de données
- DB_PORT=3306
# Nom de la base de données
- DB_DATABASE=nocobase
# Utilisateur de la base de données
- DB_USER=root
# Mot de passe de la base de données
- DB_PASSWORD=nocobase
# Indique si les noms de tables et de champs doivent être convertis au format snake_case.
- DB_UNDERSCORED=true
# 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 mariadb.
mariadb:
image: mariadb:11
environment:
MYSQL_DATABASE: nocobase
MYSQL_USER: nocobase
MYSQL_PASSWORD: nocobase
MYSQL_ROOT_PASSWORD: nocobase
restart: always
volumes:
- ./storage/db/mariadb:/var/lib/mysql
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é :