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.
Latest-Version
Beta-Version
Alpha-Version
PostgreSQL
MySQL
MariaDB
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

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: