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.