DevOps

De mi PC a Producción en 5 Minutos: CI/CD con GitHub Actions y Docker

En este tutorial dockerizamos una app mínima, subimos su imagen a un registro y automatizamos el despliegue a un VPS con GitHub Actions y SSH. Verás el flujo completo: build → push …

Contenido del tutorial

El ciclo es arcaico: codificas, haces `git push`, y luego te conviertes en un operador manual de SSH. Ese ritual es un lastre. Hoy no lo mejoraremos, lo aniquilaremos. Vamos a forjar un autómata de software que vigilará tu repositorio. Al detectar tu señal (`push`), despertará y ejecutará su directiva: construir, publicar y desplegar tu obra en la nube. Tu única misión será crear.

 Stack Node  Contenedor Docker  CI/CD Actions

El Plano de Ensamblaje

Este es el mapa completo de nuestro autómata. Cada archivo es un componente con una misión específica.

automaton-app/
├─ .github/
│  └─ workflows/
│     └─ <strong>deploy.yml</strong>     # El Cerebro Lógico (La pipeline)
├─ <strong>.dockerignore</strong>      # El Protocolo de Pureza
├─ <strong>Dockerfile</strong>         # El Esquema de la Armadura
├─ <strong>index.js</strong>           # El Corazón Operativo (El servidor)
├─ <strong>package.json</strong>       # El Manifiesto de Identidad
└─ README.md          # (Opcional)
A partir de este punto, cada bloque de código te indicará exactamente qué archivo crear o editar.

Fase 1: El Núcleo (La Aplicación Node.js)

Todo autómata necesita un propósito. El nuestro será desplegar una aplicación. Empezamos forjando su núcleo con dos archivos esenciales.

Archivo a crear: package.json

El manifiesto de identidad. Define qué es, qué necesita y cómo cobra vida.

{
  "name": "automaton-app",
  "version": "1.0.0",
  "description": "Aplicación para el Autómata de Despliegue",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "express": "^4.19.2"
  }
}

Archivo a crear: index.js

El corazón operativo. Un servidor web diseñado para prosperar dentro de una armadura de contenedores.

Protocolo Vital: La instrucción '0.0.0.0' es crucial. Ordena al núcleo aceptar conexiones desde cualquier interfaz, permitiendo que la armadura (Docker) le redirija el tráfico del mundo exterior.
const express = require('express');
const app = express();
// El puerto es adaptable, una necesidad para operar en entornos controlados.
const PORT = process.env.PORT || 3000;

app.get('/', (_req, res) => {
  res.send('Diagnóstico del Núcleo: OPERATIVO. Esperando directivas.');
});

// Protocolo de escucha abierto para comunicación externa.
app.listen(PORT, '0.0.0.0', () => {
  console.log(`Núcleo escuchando en puerto local: ${PORT}`);
});
Punto de Control 1: Calibración del Núcleo

Verifiquemos la integridad del núcleo antes de construir la armadura. Ejecuta en tu terminal:

# 1. Instala los componentes necesarios
npm install

# 2. Activa el núcleo
npm start

# 3. Abre http://localhost:3000 en tu navegador. ¿Recibes el diagnóstico? Excelente.

Fase 2: La Armadura (Contenedor Docker)

El núcleo es vulnerable. Necesita una armadura que lo haga portable, seguro y consistente en cualquier campo de batalla (desarrollo, producción, etc.). Docker es nuestro taller de forja.

Archivo a crear: Dockerfile

El esquema de ensamblaje. Instrucciones precisas para forjar una armadura de producción optimizada, multicapa y segura.

Archivo a crear: .dockerignore

El protocolo de pureza. Una lista de materiales y herramientas de desarrollo que deben quedar fuera de la armadura final para mantenerla ligera y ágil.

# Dockerfile
# Etapa 1: La Forja - Prepara el entorno base
FROM node:18-alpine AS base
WORKDIR /app
COPY package*.json ./

# Etapa 2: Ensamblaje de Dependencias
FROM base AS dependencies
RUN npm install --omit=dev

# Etapa 3: Integración del Código Fuente
FROM base AS build
COPY . .
COPY --from=dependencies /app/node_modules ./node_modules

# Etapa 4: Armadura Final - Optimizada y Segura
FROM node:18-alpine AS final
ENV NODE_ENV=production
WORKDIR /app
COPY --from=build /app .
EXPOSE 3000
# Protocolo de seguridad: No operar como root
USER node
CMD ["npm", "start"]
# .dockerignore
# Materiales de desarrollo local
node_modules
npm-debug.log

# Planos de Git y CI/CD
.git
.gitignore
.github

# Archivos de ensamblaje
Dockerfile
README.md

Estás viendo solo el 60% del contenido. Hazte Premium para acceder al tutorial completo.

Comunidad

Comentarios y valoraciones

No hay comentarios aún. ¡Sé el primero en opinar!