Ir al artículo
Aniq-UI

Dashboard 2Publícala en internet

Publícala en internet

Publica el panel y su API en un servidor con Docker, o el panel en Vercel o en cualquier host Node.js.

Para el paquete Front + Back

Antes de desplegar

Antes de salir a producción. Cada seed (yarn seed, yarn seed:prod y el primer inicio de Docker) crea administradores de ejemplo cuyas contraseñas aparecen en las guías. Cambia sus contraseñas o elimínalos, y define tu propio JWT_SECRET, antes de que el panel sea accesible para nadie más.

  • Ejecuta la API con NODE_ENV=production, tu propio JWT_SECRET, y CORS_ORIGIN y FRONTEND_URL con la dirección pública del panel. Una API de producción se niega a arrancar sin los dos primeros.
  • Detrás de un proxy inverso (Nginx, Caddy, un balanceador de carga), define TRUST_PROXY=1, para que el límite de inicios de sesión cuente visitantes en lugar del proxy.
  • Deja DEMO_MODE y NEXT_PUBLIC_DEMO_MODE desactivados, salvo que el despliegue sea una demo pública.

Antes de desplegar

Construido sin una dirección de API, el panel funciona con su API simulada: las cuentas de ejemplo están en el código de la aplicación y se comprueban en el navegador, así que cualquiera puede leerlas e iniciar sesión, y cada cambio se queda en el navegador del visitante. Conéctalo a tu API antes de que lleguen usuarios o datos reales.

La API simulada integrada

Deja NEXT_PUBLIC_DEMO_MODE desactivado salvo que el despliegue sea una demo pública.

Las dos aplicaciones en un servidor con Docker

El docker-compose.yml que ejecuta la plantilla en local también la ejecuta en un servidor. Da a cada aplicación su propio dominio detrás de un servidor web que añada HTTPS, como Caddy o Nginx, que reenvíe el dominio del panel al puerto 3030 y el de la API al puerto 8000.

  1. Nombra las dos direcciones

    Crea .env en la carpeta dashboard-2-full-stack, junto a docker-compose.yml. El panel compila la dirección de la API en su JavaScript, y la API permite la dirección del panel en CORS_ORIGIN y FRONTEND_URL, ambos a partir de estas dos líneas.

    dashboard-2-full-stack/.env
    DASHBOARD_URL=https://admin.your-domain.com
    API_URL=https://api.your-domain.com
  2. Añade tus claves

    La API también lee back-end/.env cuando existe, para las claves del proveedor de IA, R2 y la clave MCP. Créalo desde .env.example y añade TRUST_PROXY=1 detrás de tu servidor web. El archivo compose define por sí mismo la base de datos, el puerto y NODE_ENV=production, y la API genera un JWT_SECRET en el volumen de datos cuando no das ninguno.

    Terminalen dashboard-2-full-stack
    cp back-end/.env.example back-end/.env
  3. Inícialo en segundo plano

    Terminalen dashboard-2-full-stack
    docker compose up --build -d

    Resultado esperado: https://api.your-domain.com/api/health responde "status":"ok", y el dominio del panel abre la página de inicio de sesión.

Los servicios se reinician con el servidor. La base de datos vive en el volumen dashboard-2-data. Después de cambiar DASHBOARD_URL, API_URL o un puerto, ejecuta docker compose up --build -d de nuevo: el panel tiene que construirse con la nueva dirección.

La API por sí sola

back-end tiene su propio Dockerfile, así que cualquier host que construya desde un Dockerfile puede ejecutar la API sola. El contenedor guarda su base de datos SQLite en /data: monta un volumen allí, o los datos se pierden con el contenedor. En un volumen nuevo, crea la base de datos con los datos de ejemplo una vez.

Terminalen back-end
docker build -t dashboard-api .
docker run -d --restart unless-stopped -p 8000:8000 -v dashboard-data:/data -e CORS_ORIGIN=https://admin.your-domain.com -e FRONTEND_URL=https://admin.your-domain.com dashboard-api

La imagen ya funciona con NODE_ENV=production y su archivo SQLite en /data. Pasa solo los valores que necesites, cada uno con -e, como -e GOOGLE_API_KEY=.... La forma habitual de ejecutar la API sigue siendo docker compose up --build en la raíz del paquete, que la inicia junto con el panel.

En un host Node.js sin Docker, el comando de construcción es yarn build, el de inicio yarn start:prod, y yarn seed:prod se ejecuta una vez para crear las tablas. Un archivo SQLite necesita un disco persistente allí; en un host que no lo tenga, usa MySQL.

El panel en Vercel

  1. Pon el panel en un repositorio Git privado

    Sube la carpeta del panel (front-end en Full Stack, dashboard-2-front-end en el paquete Admin Dashboard) a un repositorio privado de GitHub, GitLab o Bitbucket. Tu licencia no permite compartir el código fuente públicamente.

  2. Impórtala en Vercel

    Añade un proyecto nuevo desde ese repositorio. Vercel detecta Next.js; deja los ajustes de construcción por defecto. En el repositorio de Full Stack, define el directorio raíz del proyecto como front-end.

  3. Añade las variables de entorno

    Añade ENABLE_EXPERIMENTAL_COREPACK con el valor 1, para que Vercel instale con la versión de Yarn que fija package.json. Luego NEXT_PUBLIC_API_BASE_URL (tu API con /api), NEXT_PUBLIC_WEBSOCKET_BASE_URL (la misma dirección sin /api) y NEXT_PUBLIC_BASE_URL (la dirección del propio panel). WEATHER_API_KEY es opcional.

  4. Despliega

    Inicia el despliegue, luego añade tu dominio en los ajustes Domains del proyecto y añade esa dirección al CORS_ORIGIN y al FRONTEND_URL de la API.

    Resultado esperado: Tu dominio abre la página de inicio de sesión.

Después de cambiar una variable NEXT_PUBLIC_*, despliega de nuevo: la aplicación en marcha conserva los valores con los que se construyó.

El panel en un servidor Node.js

Con tus ajustes en el .env del panel, instala, construye e inicia:

Terminal
corepack enable
yarn install
yarn build
yarn start

Responde en el puerto 3030, o en PORT cuando el host define uno. Pon un servidor web delante para tu dominio y HTTPS, y mantén yarn start en ejecución con un gestor de procesos o un servicio del sistema.

El panel como imagen de Docker

El Dockerfile del panel construye un servidor independiente en el puerto 3030, que se ejecuta con un usuario sin derechos de administrador. La dirección de la API es un argumento de construcción:

Terminal
docker build -t dashboard-2 --build-arg NEXT_PUBLIC_API_BASE_URL=https://api.your-domain.com/api --build-arg NEXT_PUBLIC_WEBSOCKET_BASE_URL=https://api.your-domain.com --build-arg NEXT_PUBLIC_BASE_URL=https://admin.your-domain.com .
docker run -d --restart unless-stopped -p 3030:3030 dashboard-2

WEATHER_API_KEY se lee cuando el contenedor se ejecuta: añade -e WEATHER_API_KEY=... a docker run.

Cuando ya está en internet

  • Inicia sesión en la dirección de tu panel, con /en y /ar, y comprueba los dos idiomas.
  • Cada página indica a los buscadores que no la indexen, mediante una cabecera X-Robots-Tag: noindex, nofollow definida en next.config.js, porque un panel con sesión iniciada no tiene lugar en los resultados de búsqueda.

¿Te atascaste en un paso?

Busca una solución antes de empezar de nuevo.

Solución de problemas

Preferencias de Cookies

Utilizamos cookies para mejorar tu experiencia de navegación, analizar el tráfico del sitio y personalizar el contenido. Al hacer clic en "Aceptar Todo", consientes nuestro uso de cookies para análisis y publicidad personalizada.