npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@octavio.cubillos/deploy-docker

v1.0.8

Published

Una herramienta CLI para desplegar aplicaciones Node.js en Docker de forma local o remota.

Readme

Herramienta de Despliegue Docker (deploy-docker)

Versión Licencia

deploy-docker es una herramienta de línea de comandos (CLI) potente y flexible diseñada para automatizar y estandarizar el despliegue de aplicaciones en contenedores Docker. Permite gestionar el ciclo de vida completo de tus despliegues, desde entornos locales de desarrollo hasta servidores remotos de producción, con un único archivo de configuración.

Soporta despliegues de Node.js y sitios estáticos (HTML/CSS/JS) con Nginx, gestión de versiones, rotación de despliegues antiguos y un sistema de configuración robusto basado en archivos JSON.


Características Principales

  • Despliegue Multi-Entorno: Despliega en tu máquina local o en servidores remotos vía SSH (con clave o contraseña).
  • Soporte para Múltiples Tipos de Aplicación: Despliega servicios de Node.js o sitios web estáticos con Nginx de forma nativa.
  • Gestión de Versiones: Cada despliegue es versionado, permitiendo un control granular y evitando colisiones.
  • Rotación Automática: Limpia automáticamente las versiones más antiguas, manteniendo tu servidor ordenado y liberando espacio.
  • Configuración Declarativa: Define toda tu infraestructura y configuración en un simple archivo JSON.
  • Validaciones de Seguridad para Producción: Evita el re-despliegue de la misma versión o el despliegue de versiones más antiguas en entornos de producción.
  • Flexibilidad Avanzada: Control total sobre los parámetros de Docker, variables de entorno, redes, volúmenes y más.
  • Automatización Inteligente: Crea redes y volúmenes si no existen, optimiza el package.json para producción y gestiona la copia de código de forma eficiente.
  • Comandos de Anulación: Usa --force para archivar un despliegue y --rm para una recreación limpia desde cero.

Instalación

Puedes instalar la herramienta globalmente para uso general o localmente como una dependencia de desarrollo para mayor consistencia en equipos. La versión actual es 1.0.8.

Global:

npm install -g @octavio.cubillos/deploy-docker

Local (Recomendado):

npm install @octavio.cubillos/deploy-docker --save-dev

Uso Básico

El comando se ejecuta apuntando a un archivo de configuración .json que define el despliegue.

Si está instalado globalmente:

deploy-docker --file=ruta/a/tu/config.json

Si está instalado localmente, úsalo a través de los scripts de package.json:

// package.json
"scripts": {
  "deploy:prod": "deploy-docker --file=prod.deploy.json"
}

Y luego ejecuta:

npm run deploy:prod

Flags de Línea de Comandos

  • --file=<ruta>: (Obligatorio) Ruta al archivo de configuración.
  • -f, --force: (Opcional) Anula las validaciones de producción. Fuerza un despliegue de la misma versión renombrando el contenedor y volumen antiguos como un backup.
  • --rm: (Opcional) La opción "destructiva". Elimina por completo el contenedor y el volumen de la versión que estás intentando desplegar antes de crear uno nuevo.
  • -h, --help: Muestra el mensaje de ayuda.

El Archivo de Configuración (.deploy.json)

Este archivo es el corazón de la herramienta. A continuación, se muestra una referencia completa de todas las opciones disponibles.

Referencia Completa

| Clave | Tipo | Requerido | Descripción | | :--- | :--- | :--- | :--- | | name | string | | El nombre base de tu aplicación. | | version | string | | La versión semántica del despliegue (ej. "1.2.3"). | | port | number | No | Puerto en el host que se mapeará al puerto del contenedor. Opcional. | | deployType | string | No | Tipo de aplicación. Opciones: "node" (defecto), "static". | | main | string | No | Archivo de entrada. Defecto: index.js (node) o index.html (static). | | buildDir | string | No | Carpeta local con los archivos compilados. Defecto: "build". | | keepVersions | number | No | Número de versiones antiguas a conservar. Defecto: 4. | | customCommand | string | No | (Solo para Node) Comando personalizado para iniciar la app (ej. pm2-runtime start). | | envFile | string | No | Ruta a un archivo .env local para cargar variables de entorno. | | env | object | No | Un objeto para definir o sobrescribir variables de entorno. | | remote | object | No | Si esta clave existe, activa el despliegue remoto. | | remote.host | string | | IP o dominio del servidor remoto. | | remote.user | string | | Usuario para la conexión SSH. | | remote.path | string | No | Ruta base en el servidor para los despliegues. Defecto: /tmp/<name>. | | remote.privateKeyPath| string | Sí (o password) | Ruta a tu clave SSH privada local (soporta ~). | | remote.password | string | Sí (o privateKeyPath) | Contraseña para la conexión SSH. | | dockerOptions | object | No | Objeto para pasar parámetros avanzados a docker run. | | dockerOptions.user| string | No | Usuario para ejecutar el proceso dentro del contenedor (ej. "node"). | | dockerOptions.restart| string | No | Política de reinicio (ej. "unless-stopped"). | | dockerOptions.cpus | string | No | Límite de CPU (ej. "0.5"). | | dockerOptions.memory| string | No | Límite de memoria (ej. "512m"). | | dockerOptions.hostname| string | No | Nombre de host del contenedor. | | dockerOptions.networks| array | No | Lista de redes Docker a las que conectar. | | dockerOptions.labels| array u object| No | Lista o objeto de etiquetas para el contenedor. |


Ejemplos de Configuración

1. Ejemplos Mínimos (Solo Campos Obligatorios)

Despliegue Mínimo de Node.js (Local):

{
  "name": "mi-app-simple",
  "version": "1.0.0",
  "port": 3000
}

La herramienta asumirá deployType: "node", buildDir: "build", main: "index.js", etc.

Despliegue Mínimo Estático (Remoto):

{
  "name": "mi-landing-simple",
  "version": "1.0.0",
  "deployType": "static",
  "port": 8080,
  "remote": {
    "host": "IP_O_DOMINIO_DEL_SERVIDOR",
    "user": "usuario",
    "privateKeyPath": "~/.ssh/id_rsa"
  }
}

La herramienta asumirá buildDir: "build", main: "index.html", usará la imagen de Nginx por defecto y generará la ruta remota automáticamente.

2. Ejemplos Completos

Despliegue Remoto de Producción (Node.js con PM2):

{
  "name": "backend-principal",
  "version": "1.5.2",
  "deployType": "node",
  "main": "server.js",
  "port": 80,
  "keepVersions": 5,
  "customCommand": "pm2-runtime start server.js --name backend-principal",
  "remote": {
    "host": "198.51.100.10",
    "user": "deployer",
    "privateKeyPath": "~/.ssh/id_rsa_prod"
  },
  "dockerOptions": {
    "user": "node",
    "restart": "unless-stopped",
    "memory": "1g",
    "networks": ["backend-net"]
  },
  "envFile": ".env.prod",
  "env": {
    "NODE_ENV": "production"
  }
}

Despliegue Remoto de un Sitio Estático (HTML/CSS/JS):

{
  "name": "pagina-web-principal",
  "version": "2.0.1",
  "deployType": "static",
  "buildDir": "public",
  "port": 80,
  "remote": {
    "host": "198.51.100.20",
    "user": "deployer",
    "password": "mi_password_segura"
  },
  "dockerOptions": {
    "restart": "unless-stopped",
    "labels": {
      "traefik.enable": "true",
      "traefik.http.routers.landing.rule": "Host(`www.miempresa.com`)"
    }
  }
}

Prerrequisitos

  • Máquina Local: Node.js y NPM instalados.
  • Servidor Remoto: Docker instalado y el servicio en ejecución. Acceso SSH configurado (por clave o contraseña).

Licencia

Este proyecto está bajo la Licencia MIT.