Skip to content

Guía de Despliegue de Claude Code en Servidor en la Nube

Esta guía describe detalladamente el despliegue de un proyecto VitePress en un servidor en la nube usando PM2 para gestión de procesos, asegurando que el servicio siga funcionando incluso después de desconectar SSH.

🛠 Requisitos del Sistema

  • Sistema Operativo: Linux (Ubuntu/CentOS)
  • Node.js: v22.11.0 (instalado en /www/server/nodejs/v22.11.0/bin)
  • PM2: Gestor de procesos
  • Memoria: Mínimo 512MB
  • Almacenamiento: Mínimo 1GB de espacio libre

📋 Pasos de Despliegue

1. Configuración del Entorno del Servidor

1.1 Configuración de Variables de Entorno de Node.js

bash
# Agregar a ~/.bashrc o ~/.profile
echo 'export PATH=$PATH:/www/server/nodejs/v22.11.0/bin' >> ~/.bashrc
source ~/.bashrc

# Verificar versión de Node.js
node --version
npm --version

1.2 Creación del Directorio del Proyecto

bash
# Crear directorio del proyecto
mkdir -p /www/wwwroot/claudecode
cd /www/wwwroot/claudecode

2. Subida de Archivos del Proyecto

2.1 Usar SCP para Subir (Recomendado)

bash
# Ejecutar localmente (reemplazar your-server-ip con IP real)
scp -r /c:/Users/PC/Desktop/claudecode.blueshirtmap.com_eN7Pt/* root@your-server-ip:/www/wwwroot/claudecode/

2.2 Usar Clonación Git (si hay repositorio Git)

bash
# Ejecutar en el servidor
git clone https://github.com/your-username/claudecode.git .

3. Instalación de Dependencias del Proyecto

bash
# Ir al directorio del proyecto
cd /www/wwwroot/claudecode

# Instalar dependencias del proyecto
npm install

# Si hay problemas de permisos, usar
npm install --unsafe-perm

4. Construcción de Versión de Producción

bash
# Construir proyecto
npm run docs:build

# Verificar resultado de construcción
ls -la .vitepress/dist/

5. Instalación y Configuración de PM2

5.1 Instalación Global de PM2

bash
npm install -g pm2

# Verificar instalación
pm2 --version

5.2 Crear Archivo de Configuración PM2

bash
# Crear archivo de configuración PM2
cat > ecosystem.config.js << 'EOF'
module.exports = {
  apps: [
    {
      name: 'claudecode-docs',
      script: 'npm',
      args: 'run docs:preview',
      cwd: '/www/wwwroot/claudecode',
      instances: 1,
      exec_mode: 'fork',
      env: {
        NODE_ENV: 'production',
        PORT: 4173
      },
      error_file: '/www/wwwroot/claudecode/logs/err.log',
      out_file: '/www/wwwroot/claudecode/logs/out.log',
      log_file: '/www/wwwroot/claudecode/logs/combined.log',
      time: true,
      restart_delay: 1000,
      max_restarts: 5,
      min_uptime: '10s',
      max_memory_restart: '1G',
      watch: false,
      ignore_watch: ['node_modules', 'logs', '.git']
    }
  ]
}
EOF

5.3 Crear Directorio de Logs

bash
mkdir -p /www/wwwroot/claudecode/logs

6. Iniciar Servicio

6.1 Iniciar Proyecto con PM2

bash
# Iniciar servicio
pm2 start ecosystem.config.js

# Verificar estado del servicio
pm2 status

# Ver logs
pm2 logs claudecode-docs

6.2 Configurar Inicio Automático de PM2

bash
# Guardar configuración PM2
pm2 save

# Configurar inicio automático
pm2 startup
# Ejecutar el comando mostrado por el comando anterior (usualmente comando sudo)

7. Configuración de Proxy Inverso (Opcional)

Si se necesita acceso por nombre de dominio, se puede configurar proxy inverso Nginx:

7.1 Ejemplo de Configuración Nginx

nginx
server {
    listen 80;
    server_name claudecode.blueshirtmap.com;
    
    location / {
        proxy_pass http://localhost:4173;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # Cache de archivos estáticos
        location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
            expires 1y;
            add_header Cache-Control "public, immutable";
            proxy_pass http://localhost:4173;
        }
    }
}

8. Verificación del Despliegue

8.1 Verificar Estado del Servicio

bash
# Ver estado PM2
pm2 status

# Ver detalles del proceso
pm2 show claudecode-docs

# Ver logs en tiempo real
pm2 logs claudecode-docs --lines 50

8.2 Probar Acceso al Sitio Web

bash
# Prueba local
curl -I http://localhost:4173

# Prueba remota (reemplazar con IP real)
curl -I http://your-server-ip:4173

🔧 Comandos PM2 Frecuentemente Usados

Comandos Básicos

bash
# Ver todos los procesos
pm2 list

# Reiniciar servicio
pm2 restart claudecode-docs

# Detener servicio
pm2 stop claudecode-docs

# Eliminar servicio
pm2 delete claudecode-docs

# Recargar configuración
pm2 reload claudecode-docs

Gestión de Logs

bash
# Ver logs
pm2 logs claudecode-docs

# Limpiar logs
pm2 flush claudecode-docs

# Logs en tiempo real
pm2 logs claudecode-docs --lines 100 -f

Comandos de Monitoreo

bash
# Monitoreo en tiempo real
pm2 monit

# Ver uso de memoria
pm2 show claudecode-docs

🚀 Recomendaciones de Optimización de Rendimiento

1. Despliegue de Archivos Estáticos (Recomendado)

bash
# Si se usa Nginx, se pueden desplegar archivos estáticos directamente
cp -r .vitepress/dist/* /www/wwwroot/claudecode-static/

2. Habilitar Compresión Gzip

nginx
# Agregar en configuración Nginx
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;

3. Ajustar Configuración PM2

javascript
// Ajustar según rendimiento del servidor
instances: 'max',  // Usar todos los núcleos CPU
max_memory_restart: '500M',  // Ajustar según memoria disponible

🛡️ Configuraciones de Seguridad

1. Configuración de Firewall

bash
# Abrir puertos necesarios
ufw allow 22    # SSH
ufw allow 80    # HTTP
ufw allow 443   # HTTPS
ufw allow 4173  # VitePress (si acceso directo)

2. Permisos de Procesos

bash
# Crear usuario dedicado (opcional)
useradd -m -s /bin/bash claudecode
chown -R claudecode:claudecode /www/wwwroot/claudecode

📊 Monitoreo y Mantenimiento

1. Respaldo Regular

bash
# Crear script de respaldo
cat > /root/backup-claudecode.sh << 'EOF'
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
tar -czf /backup/claudecode_$DATE.tar.gz /www/wwwroot/claudecode
find /backup -name "claudecode_*.tar.gz" -mtime +7 -delete
EOF

chmod +x /root/backup-claudecode.sh

# Agregar a tareas cron
crontab -e
# Agregar: 0 2 * * * /root/backup-claudecode.sh

2. Rotación de Logs

bash
# Configurar logrotate
cat > /etc/logrotate.d/claudecode << 'EOF'
/www/wwwroot/claudecode/logs/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    postrotate
        pm2 reloadLogs
    endscript
}
EOF

🐛 Solución de Problemas Comunes

1. Puerto Ocupado

bash
# Verificar uso de puerto
netstat -tlnp | grep 4173
lsof -i :4173

# Terminar proceso que ocupa puerto
kill -9 <PID>

2. Problemas de Permisos

bash
# Corregir permisos
chown -R $USER:$USER /www/wwwroot/claudecode
chmod -R 755 /www/wwwroot/claudecode

3. Memoria Insuficiente

bash
# Verificar uso de memoria
free -h
pm2 show claudecode-docs

# Reiniciar servicio para liberar memoria
pm2 restart claudecode-docs

4. Error de Construcción

bash
# Limpiar cache y reconstruir
rm -rf node_modules package-lock.json
npm cache clean --force
npm install
npm run docs:build

📞 Lista de Verificación Post-Despliegue

  • [ ] ✅ Entorno Node.js configurado correctamente
  • [ ] ✅ Archivos del proyecto subidos exitosamente
  • [ ] ✅ Dependencias instaladas
  • [ ] ✅ Proyecto construido exitosamente
  • [ ] ✅ PM2 funcionando normalmente
  • [ ] ✅ Servicio accesible
  • [ ] ✅ Logs funcionando normalmente
  • [ ] ✅ Inicio automático configurado
  • [ ] ✅ Proxy inverso configurado (si es necesario)
  • [ ] ✅ Firewall y seguridad configurados

Después de completar todos los pasos, tu sitio de documentación Claude Code funcionará establemente en el servidor en la nube, y la desconexión SSH no afectará el funcionamiento del servicio.