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.
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
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:latest-full
restart: always
networks:
- nocobase
depends_on:
- mysql
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=mysql
# Host de la base de datos, puede reemplazarse por la IP de un servidor de base de datos existente.
- DB_HOST=mysql
# Puerto de la base de datos
- DB_PORT=3306
# Nombre de la base de datos
- DB_DATABASE=nocobase
# Usuario de la base de datos
- DB_USER=root
# Contraseña de la base de datos
- DB_PASSWORD=nocobase
# Indica si los nombres de tablas y campos de la base de datos se convierten a formato snake_case.
- DB_UNDERSCORED=true
# 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 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:
# 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=mariadb
# Host de la base de datos, puede reemplazarse por la IP de un servidor de base de datos existente.
- DB_HOST=mariadb
# Puerto de la base de datos
- DB_PORT=3306
# Nombre de la base de datos
- DB_DATABASE=nocobase
# Usuario de la base de datos
- DB_USER=root
# Contraseña de la base de datos
- DB_PASSWORD=nocobase
# Indica si los nombres de tablas y campos de la base de datos se convierten a formato snake_case.
- DB_UNDERSCORED=true
# 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 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:
# 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
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:beta-full
restart: always
networks:
- nocobase
depends_on:
- mysql
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=mysql
# Host de la base de datos, puede reemplazarse por la IP de un servidor de base de datos existente.
- DB_HOST=mysql
# Puerto de la base de datos
- DB_PORT=3306
# Nombre de la base de datos
- DB_DATABASE=nocobase
# Usuario de la base de datos
- DB_USER=root
# Contraseña de la base de datos
- DB_PASSWORD=nocobase
# Indica si los nombres de tablas y campos de la base de datos se convierten a formato snake_case.
- DB_UNDERSCORED=true
# 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 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:
# 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=mariadb
# Host de la base de datos, puede reemplazarse por la IP de un servidor de base de datos existente.
- DB_HOST=mariadb
# Puerto de la base de datos
- DB_PORT=3306
# Nombre de la base de datos
- DB_DATABASE=nocobase
# Usuario de la base de datos
- DB_USER=root
# Contraseña de la base de datos
- DB_PASSWORD=nocobase
# Indica si los nombres de tablas y campos de la base de datos se convierten a formato snake_case.
- DB_UNDERSCORED=true
# 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 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:
# 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
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:alpha-full
restart: always
networks:
- nocobase
depends_on:
- mysql
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=mysql
# Host de la base de datos, puede reemplazarse por la IP de un servidor de base de datos existente.
- DB_HOST=mysql
# Puerto de la base de datos
- DB_PORT=3306
# Nombre de la base de datos
- DB_DATABASE=nocobase
# Usuario de la base de datos
- DB_USER=root
# Contraseña de la base de datos
- DB_PASSWORD=nocobase
# Indica si los nombres de tablas y campos de la base de datos se convierten a formato snake_case.
- DB_UNDERSCORED=true
# 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 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:
# 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=mariadb
# Host de la base de datos, puede reemplazarse por la IP de un servidor de base de datos existente.
- DB_HOST=mariadb
# Puerto de la base de datos
- DB_PORT=3306
# Nombre de la base de datos
- DB_DATABASE=nocobase
# Usuario de la base de datos
- DB_USER=root
# Contraseña de la base de datos
- DB_PASSWORD=nocobase
# Indica si los nombres de tablas y campos de la base de datos se convierten a formato snake_case.
- DB_UNDERSCORED=true
# 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 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. 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: