Instalación de Docker

Requisitos previos
  • Tener Docker y Docker Compose instalados.
  • Asegurarse de que el servicio de Docker esté en ejecución.

1. Crear docker-compose.yml

# Cree una carpeta llamada my-project (o el nombre que prefiera) para almacenar los archivos del sistema generados por NocoBase.
mkdir my-project && cd my-project

# Cree un archivo docker-compose.yml vacío.
vi docker-compose.yml

2. Configurar docker-compose.yml

Elija una versión de NocoBase (Comparación de versiones) y el tipo de base de datos, luego copie la configuración correspondiente en el archivo docker-compose.yml.

Notas de configuración
  • Seleccione una imagen: latest latest-full beta beta-full alpha alpha-full 1.7.14 1.7.14-full
    • Para entornos de producción, le recomendamos fijar un número de versión específico para evitar actualizaciones automáticas no deseadas. Ver todas las versiones

    • Imagen de Docker Hub: nocobase/nocobase:latest-full

    • La imagen full incluye el cliente de PostgreSQL 16/17, el cliente de MySQL 8.0, el cliente de Oracle 19.25, necesarios para los plugins de gestión de copias de seguridad y migración, así como LibreOffice, requerido para la impresión de plantillas (PDF).

    • Si necesita construir su propia imagen, puede consultar los Dockerfile (versión ligera) y Dockerfile-full (versión completa) oficiales.

  • Modifique APP_KEY: Reemplace your-secret-key con una cadena aleatoria, que se utiliza para cifrar información sensible como los tokens de usuario.
  • Utilice una base de datos existente: Si ya dispone de un servicio de base de datos, modifique DB_HOST con la dirección del servidor de su base de datos y elimine o comente la configuración del servicio de base de datos (por ejemplo, los servicios postgres, mysql, mariadb).
  • Mapeo de puertos: Por defecto, el puerto 80 del contenedor se mapea al puerto 13000 del host. Puede modificarlo según sus necesidades.
Versión Latest
Versión Beta
Versión Alpha
PostgreSQL
MySQL
MariaDB
networks:
  nocobase:
    driver: bridge

services:
  app:
    image: nocobase/nocobase:latest-full
    restart: always
    networks:
      - nocobase
    depends_on:
      - postgres
    environment:
      # Clave de la aplicación, utilizada para generar tokens de usuario, etc.
      # Si se modifica APP_KEY, los tokens antiguos dejarán de ser válidos.
      # Puede ser cualquier cadena aleatoria y debe asegurarse de que no se filtre.
      - APP_KEY=your-secret-key
      # Tipo de base de datos, compatible con postgres, mysql, mariadb.
      - DB_DIALECT=postgres
      # Host de la base de datos, puede reemplazarse por la IP de un servidor de base de datos existente.
      - DB_HOST=postgres
      # Puerto de la base de datos
      - DB_PORT=5432
      # Nombre de la base de datos
      - DB_DATABASE=nocobase
      # Usuario de la base de datos
      - DB_USER=nocobase
      # Contraseña de la base de datos
      - DB_PASSWORD=nocobase
      # Zona horaria
      - TZ=Asia/Shanghai

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

  # Si utiliza un servicio de base de datos existente, puede omitir el inicio de 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. Instalar e iniciar NocoBase

# Descargue la última imagen
docker compose pull

# Ejecute en segundo plano (la instalación se realizará automáticamente la primera vez)
docker compose up -d

# Vea los registros de instalación y ejecución
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. Iniciar sesión en NocoBase

Abra http://localhost:13000 en su navegador. La cuenta y contraseña iniciales son admin@nocobase.com y admin123.

Aviso de seguridad de la cuenta

Después de iniciar sesión por primera vez, cambie la contraseña predeterminada de inmediato para garantizar la seguridad del sistema.

5. Despliegue en producción

Si usas la imagen con Nginx integrado, normalmente es mejor no exponer 13000 directamente a Internet. Lo más habitual es mantener el puerto del contenedor disponible solo en el host y dejar que el Nginx del host gestione el dominio, HTTPS y el proxy inverso.

Proxy de la ruta raíz con Nginx

La siguiente configuración proxy las solicitudes del dominio hacia http://127.0.0.1:13000/:

server {
    listen 80;
    server_name your_domain.com;  # Sustituye your_domain.com por tu dominio

    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 también quieres habilitar HTTPS, configura 443 y el certificado en el Nginx del host. El contenedor de NocoBase no necesita gestionar certificados por separado.

El bloque location / de esta configuración en la ruta raíz también reenvía /api/, /ws y /files/. Si separas los recursos estáticos de las rutas de la aplicación, asegúrate de que /files/ siga reenviándose a NocoBase y no se trate como un directorio estático.

Despliegue en subruta

Si quieres desplegar la aplicación en una subruta, por ejemplo https://your_domain.com/nocobase/, primero configura la variable de entorno APP_PUBLIC_PATH:

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

Mantén el / inicial y final en la ruta. Una vez configurado, la URL de la aplicación pasa a ser http://127.0.0.1:13000/nocobase/.

Después configura el Nginx del host con el mismo proxy de subruta:

server {
    listen 80;
    server_name your_domain.com;  # Sustituye your_domain.com por tu dominio

    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;
    }

    # Mantén la compatibilidad con las URL de acceso a archivos en la raíz.
    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;
    }
}

Ten en cuenta estos puntos:

  • APP_PUBLIC_PATH y la ruta en proxy_pass deben mantenerse coherentes. Si falta /nocobase/ en cualquiera de los dos lados, normalmente los recursos estáticos y el enrutamiento no funcionarán correctamente
  • /nocobase/files/ se reenvía mediante location /nocobase/; la ruta compatible /files/ en la raíz debe reenviarse a NocoBase por separado

Otras opciones

Si no quieres usar el Nginx integrado, también puedes consultar estas dos configuraciones con proxy separado: