Docker-Installation
Voraussetzungen
- Docker und Docker Compose sind installiert.
- Stellen Sie sicher, dass der Docker-Dienst läuft.
1. docker-compose.yml erstellen
# Erstellen Sie einen Ordner namens my-project (oder einen beliebigen anderen Namen), um die von NocoBase generierten Systemdateien zu speichern.
mkdir my-project && cd my-project
# Erstellen Sie eine leere docker-compose.yml-Datei.
vi docker-compose.yml
2. docker-compose.yml konfigurieren
Wählen Sie eine NocoBase-Version (Versionsvergleich) und den Datenbanktyp aus und kopieren Sie die entsprechende Konfiguration in die docker-compose.yml-Datei.
Hinweise zur Konfiguration
- Image auswählen:
latest latest-full beta beta-full alpha alpha-full 1.7.14 1.7.14-full
- Für Produktionsumgebungen wird empfohlen, eine spezifische Versionsnummer festzulegen, um unbeabsichtigte automatische Updates zu vermeiden. Alle Versionen anzeigen
- Alibaba Cloud Image:
nocobase/nocobase:latest-full
- Docker Hub Image:
nocobase/nocobase:latest-full
- Das Full-Image enthält die für die Backup- und Migrationsmanagement-Plugins erforderlichen PostgreSQL 16/17 Clients, MySQL 8.0 Clients, Oracle 19.25 Clients sowie LibreOffice für den Vorlagendruck (PDF).
- Wenn Sie ein eigenes Image erstellen möchten, können Sie sich an den offiziellen Dockerfile (schlanke Version) und Dockerfile-full (vollständige Version) orientieren.
APP_KEY ändern: Bitte ersetzen Sie your-secret-key durch eine zufällige Zeichenkette, die zur Verschlüsselung sensibler Informationen wie Benutzer-Tokens verwendet wird.
- Bestehende Datenbank verwenden: Wenn Sie bereits einen Datenbankdienst nutzen, ändern Sie bitte
DB_HOST auf die Adresse Ihres Datenbankservers und löschen oder kommentieren Sie die Konfiguration des Datenbankdienstes (z.B. postgres-, mysql- oder mariadb-Dienste) aus.
- Port-Mapping: Standardmäßig wird Port 80 des Containers auf Port 13000 des Hosts gemappt. Sie können dies bei Bedarf anpassen.
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:latest-full
restart: always
networks:
- nocobase
depends_on:
- postgres
environment:
# Anwendungs-Schlüssel, wird zur Generierung von Benutzer-Tokens usw. verwendet.
# Wenn APP_KEY geändert wird, werden alte Tokens ungültig.
# Kann eine beliebige zufällige Zeichenkette sein; stellen Sie sicher, dass sie nicht nach außen gelangt.
- APP_KEY=your-secret-key
# Datenbanktyp, unterstützt postgres, mysql, mariadb
- DB_DIALECT=postgres
# Datenbank-Host, kann durch die IP eines bestehenden Datenbankservers ersetzt werden.
- DB_HOST=postgres
# Datenbank-Port
- DB_PORT=5432
# Datenbankname
- DB_DATABASE=nocobase
# Datenbank-Benutzer
- DB_USER=nocobase
# Datenbank-Passwort
- DB_PASSWORD=nocobase
# Zeitzone
- TZ=Etc/UTC
volumes:
- ./storage:/app/nocobase/storage
ports:
- '13000:80'
# init: true
# Wenn Sie einen bestehenden Datenbankdienst verwenden, müssen Sie postgres nicht starten.
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:
# Anwendungs-Schlüssel, wird zur Generierung von Benutzer-Tokens usw. verwendet.
# Wenn APP_KEY geändert wird, werden alte Tokens ungültig.
# Kann eine beliebige zufällige Zeichenkette sein; stellen Sie sicher, dass sie nicht nach außen gelangt.
- APP_KEY=your-secret-key
# Datenbanktyp, unterstützt postgres, mysql, mariadb
- DB_DIALECT=mysql
# Datenbank-Host, kann durch die IP eines bestehenden Datenbankservers ersetzt werden.
- DB_HOST=mysql
# Datenbank-Port
- DB_PORT=3306
# Datenbankname
- DB_DATABASE=nocobase
# Datenbank-Benutzer
- DB_USER=root
# Datenbank-Passwort
- DB_PASSWORD=nocobase
# Sollen Tabellen- und Feldnamen in Snake-Case-Schreibweise konvertiert werden?
- DB_UNDERSCORED=true
# Zeitzone
- TZ=Etc/UTC
volumes:
- ./storage:/app/nocobase/storage
ports:
- '13000:80'
# init: true
# Wenn Sie einen bestehenden Datenbankdienst verwenden, müssen Sie mysql nicht starten.
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:
# Anwendungs-Schlüssel, wird zur Generierung von Benutzer-Tokens usw. verwendet.
# Wenn APP_KEY geändert wird, werden alte Tokens ungültig.
# Kann eine beliebige zufällige Zeichenkette sein; stellen Sie sicher, dass sie nicht nach außen gelangt.
- APP_KEY=your-secret-key
# Datenbanktyp, unterstützt postgres, mysql, mariadb
- DB_DIALECT=mariadb
# Datenbank-Host, kann durch die IP eines bestehenden Datenbankservers ersetzt werden.
- DB_HOST=mariadb
# Datenbank-Port
- DB_PORT=3306
# Datenbankname
- DB_DATABASE=nocobase
# Datenbank-Benutzer
- DB_USER=root
# Datenbank-Passwort
- DB_PASSWORD=nocobase
# Sollen Tabellen- und Feldnamen in Snake-Case-Schreibweise konvertiert werden?
- DB_UNDERSCORED=true
# Zeitzone
- TZ=Etc/UTC
volumes:
- ./storage:/app/nocobase/storage
ports:
- '13000:80'
# init: true
# Wenn Sie einen bestehenden Datenbankdienst verwenden, müssen Sie mariadb nicht starten.
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:
# Anwendungs-Schlüssel, wird zur Generierung von Benutzer-Tokens usw. verwendet.
# Wenn APP_KEY geändert wird, werden alte Tokens ungültig.
# Kann eine beliebige zufällige Zeichenkette sein; stellen Sie sicher, dass sie nicht nach außen gelangt.
- APP_KEY=your-secret-key
# Datenbanktyp, unterstützt postgres, mysql, mariadb
- DB_DIALECT=postgres
# Datenbank-Host, kann durch die IP eines bestehenden Datenbankservers ersetzt werden.
- DB_HOST=postgres
# Datenbank-Port
- DB_PORT=5432
# Datenbankname
- DB_DATABASE=nocobase
# Datenbank-Benutzer
- DB_USER=nocobase
# Datenbank-Passwort
- DB_PASSWORD=nocobase
# Zeitzone
- TZ=Etc/UTC
volumes:
- ./storage:/app/nocobase/storage
ports:
- '13000:80'
# init: true
# Wenn Sie einen bestehenden Datenbankdienst verwenden, müssen Sie postgres nicht starten.
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:
# Anwendungs-Schlüssel, wird zur Generierung von Benutzer-Tokens usw. verwendet.
# Wenn APP_KEY geändert wird, werden alte Tokens ungültig.
# Kann eine beliebige zufällige Zeichenkette sein; stellen Sie sicher, dass sie nicht nach außen gelangt.
- APP_KEY=your-secret-key
# Datenbanktyp, unterstützt postgres, mysql, mariadb
- DB_DIALECT=mysql
# Datenbank-Host, kann durch die IP eines bestehenden Datenbankservers ersetzt werden.
- DB_HOST=mysql
# Datenbank-Port
- DB_PORT=3306
# Datenbankname
- DB_DATABASE=nocobase
# Datenbank-Benutzer
- DB_USER=root
# Datenbank-Passwort
- DB_PASSWORD=nocobase
# Sollen Tabellen- und Feldnamen in Snake-Case-Schreibweise konvertiert werden?
- DB_UNDERSCORED=true
# Zeitzone
- TZ=Etc/UTC
volumes:
- ./storage:/app/nocobase/storage
ports:
- '13000:80'
# init: true
# Wenn Sie einen bestehenden Datenbankdienst verwenden, müssen Sie mysql nicht starten.
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:
# Anwendungs-Schlüssel, wird zur Generierung von Benutzer-Tokens usw. verwendet.
# Wenn APP_KEY geändert wird, werden alte Tokens ungültig.
# Kann eine beliebige zufällige Zeichenkette sein; stellen Sie sicher, dass sie nicht nach außen gelangt.
- APP_KEY=your-secret-key
# Datenbanktyp, unterstützt postgres, mysql, mariadb
- DB_DIALECT=mariadb
# Datenbank-Host, kann durch die IP eines bestehenden Datenbankservers ersetzt werden.
- DB_HOST=mariadb
# Datenbank-Port
- DB_PORT=3306
# Datenbankname
- DB_DATABASE=nocobase
# Datenbank-Benutzer
- DB_USER=root
# Datenbank-Passwort
- DB_PASSWORD=nocobase
# Sollen Tabellen- und Feldnamen in Snake-Case-Schreibweise konvertiert werden?
- DB_UNDERSCORED=true
# Zeitzone
- TZ=Etc/UTC
volumes:
- ./storage:/app/nocobase/storage
ports:
- '13000:80'
# init: true
# Wenn Sie einen bestehenden Datenbankdienst verwenden, müssen Sie mariadb nicht starten.
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:
# Anwendungs-Schlüssel, wird zur Generierung von Benutzer-Tokens usw. verwendet.
# Wenn APP_KEY geändert wird, werden alte Tokens ungültig.
# Kann eine beliebige zufällige Zeichenkette sein; stellen Sie sicher, dass sie nicht nach außen gelangt.
- APP_KEY=your-secret-key
# Datenbanktyp, unterstützt postgres, mysql, mariadb
- DB_DIALECT=postgres
# Datenbank-Host, kann durch die IP eines bestehenden Datenbankservers ersetzt werden.
- DB_HOST=postgres
# Datenbank-Port
- DB_PORT=5432
# Datenbankname
- DB_DATABASE=nocobase
# Datenbank-Benutzer
- DB_USER=nocobase
# Datenbank-Passwort
- DB_PASSWORD=nocobase
# Zeitzone
- TZ=Etc/UTC
volumes:
- ./storage:/app/nocobase/storage
ports:
- '13000:80'
# init: true
# Wenn Sie einen bestehenden Datenbankdienst verwenden, müssen Sie postgres nicht starten.
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:
# Anwendungs-Schlüssel, wird zur Generierung von Benutzer-Tokens usw. verwendet.
# Wenn APP_KEY geändert wird, werden alte Tokens ungültig.
# Kann eine beliebige zufällige Zeichenkette sein; stellen Sie sicher, dass sie nicht nach außen gelangt.
- APP_KEY=your-secret-key
# Datenbanktyp, unterstützt postgres, mysql, mariadb
- DB_DIALECT=mysql
# Datenbank-Host, kann durch die IP eines bestehenden Datenbankservers ersetzt werden.
- DB_HOST=mysql
# Datenbank-Port
- DB_PORT=3306
# Datenbankname
- DB_DATABASE=nocobase
# Datenbank-Benutzer
- DB_USER=root
# Datenbank-Passwort
- DB_PASSWORD=nocobase
# Sollen Tabellen- und Feldnamen in Snake-Case-Schreibweise konvertiert werden?
- DB_UNDERSCORED=true
# Zeitzone
- TZ=Etc/UTC
volumes:
- ./storage:/app/nocobase/storage
ports:
- '13000:80'
# init: true
# Wenn Sie einen bestehenden Datenbankdienst verwenden, müssen Sie mysql nicht starten.
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:
# Anwendungs-Schlüssel, wird zur Generierung von Benutzer-Tokens usw. verwendet.
# Wenn APP_KEY geändert wird, werden alte Tokens ungültig.
# Kann eine beliebige zufällige Zeichenkette sein; stellen Sie sicher, dass sie nicht nach außen gelangt.
- APP_KEY=your-secret-key
# Datenbanktyp, unterstützt postgres, mysql, mariadb
- DB_DIALECT=mariadb
# Datenbank-Host, kann durch die IP eines bestehenden Datenbankservers ersetzt werden.
- DB_HOST=mariadb
# Datenbank-Port
- DB_PORT=3306
# Datenbankname
- DB_DATABASE=nocobase
# Datenbank-Benutzer
- DB_USER=root
# Datenbank-Passwort
- DB_PASSWORD=nocobase
# Sollen Tabellen- und Feldnamen in Snake-Case-Schreibweise konvertiert werden?
- DB_UNDERSCORED=true
# Zeitzone
- TZ=Etc/UTC
volumes:
- ./storage:/app/nocobase/storage
ports:
- '13000:80'
# init: true
# Wenn Sie einen bestehenden Datenbankdienst verwenden, müssen Sie mariadb nicht starten.
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. NocoBase installieren und starten
# Das neueste Image herunterladen
docker compose pull
# Im Hintergrund ausführen (die Installation erfolgt beim ersten Start automatisch)
docker compose up -d
# Installations- und Laufzeitprotokolle anzeigen
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. Bei NocoBase anmelden
Öffnen Sie http://localhost:13000 in Ihrem Browser. Die anfänglichen Anmeldedaten sind admin@nocobase.com als Benutzername und admin123 als Passwort.
Hinweis zur Kontosicherheit
Nach der ersten Anmeldung ändern Sie bitte umgehend das Standardpasswort, um die Systemsicherheit zu gewährleisten.
5. Bereitstellung in Produktion
Wenn du das Image mit integriertem Nginx verwendest, ist es normalerweise besser, 13000 nicht direkt im Internet freizugeben. Üblicher ist es, den Container-Port nur auf dem Host verfügbar zu halten und Nginx auf dem Host Domain, HTTPS und Reverse Proxy übernehmen zu lassen.
Root-Pfad über Nginx weiterleiten
Die folgende Konfiguration leitet Anfragen an die Domain an http://127.0.0.1:13000/ weiter:
server {
listen 80;
server_name your_domain.com; # Ersetze your_domain.com durch deine Domain
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;
}
}
Wenn du auch HTTPS aktivieren möchtest, konfiguriere 443 und das Zertifikat im Nginx auf dem Host. Der NocoBase-Container muss Zertifikate nicht separat verarbeiten.
Der Block location / in dieser Root-Pfad-Konfiguration leitet auch /api/, /ws und /files/ weiter. Wenn du statische Ressourcen und Anwendungsrouten trennst, stelle weiterhin sicher, dass /files/ an NocoBase weitergeleitet und nicht als statisches Verzeichnis behandelt wird.
Bereitstellung unter einem Unterpfad
Wenn du die Anwendung unter einem Unterpfad bereitstellen möchtest, etwa https://your_domain.com/nocobase/, konfiguriere zuerst die Umgebungsvariable APP_PUBLIC_PATH:
services:
app:
image: nocobase/nocobase:latest
environment:
+ - APP_PUBLIC_PATH=/nocobase/
Behalte den führenden und abschließenden / im Pfad bei. Nach der Konfiguration lautet die URL der Anwendung http://127.0.0.1:13000/nocobase/.
Konfiguriere anschließend Nginx auf dem Host mit demselben Unterpfad:
server {
listen 80;
server_name your_domain.com; # Ersetze your_domain.com durch deine Domain
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;
}
# Kompatibilität mit Dateizugriffs-URLs auf Root-Ebene beibehalten.
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;
}
}
Beachte dabei:
APP_PUBLIC_PATH und der Pfad in proxy_pass müssen übereinstimmen. Wenn auf einer Seite /nocobase/ fehlt, funktionieren statische Dateien und Routing normalerweise nicht korrekt
/nocobase/files/ wird durch location /nocobase/ weitergeleitet; die kompatible Root-Route /files/ muss separat an NocoBase weitergeleitet werden
Weitere Optionen
Wenn du das integrierte Nginx nicht verwenden möchtest, kannst du auch eine dieser separaten Proxy-Varianten nutzen: