# Instalación Guía detallada de instalación de 9Router con consejos de solución de problemas. --- ## Requisitos ### Requisitos del sistema - **Node.js**: Versión 20.0.0 o superior - **npm**: Versión 10.0.0 o superior (viene con Node.js) - **OS**: macOS, Linux, Windows (WSL recomendado) - **Espacio en disco**: ~200MB para la instalación ### Verifica tu versión ```bash node --version # Debería mostrar v20.x.x o superior npm --version # Debería mostrar 10.x.x o superior ``` **¿No tienes Node.js?** Instálalo desde [nodejs.org](https://nodejs.org/) --- ## Métodos de instalación ### Método 1: Instalación global (Recomendado) Instala 9Router globalmente para usar desde cualquier lugar: ```bash npm install -g 9router ``` **Iniciar 9Router:** ```bash 9router ``` **Beneficios:** - ✅ Ejecuta desde cualquier directorio - ✅ Comando simple: `9router` - ✅ Auto-actualizaciones con `npm update -g 9router` ### Método 2: Instalación local Instala en un proyecto específico: ```bash mkdir my-9router cd my-9router npm install 9router ``` **Iniciar 9Router:** ```bash npx 9router ``` **Beneficios:** - ✅ Aislado por proyecto - ✅ Control de versiones por proyecto - ✅ Sin contaminación del namespace global ### Método 3: Desde el código fuente (Desarrollo) Clona y compila desde GitHub: ```bash git clone https://github.com/decolua/9router.git cd 9router/app npm install npm run build npm start ``` **Beneficios:** - ✅ Últimas características de desarrollo - ✅ Contribuir al desarrollo - ✅ Modificaciones personalizadas --- ## Primera ejecución ### Iniciar el servidor ```bash 9router ``` **Qué sucede:** 1. El servidor inicia en `http://localhost:20128` 2. El dashboard se abre automáticamente en el navegador 3. Se crea el directorio de datos en `~/.9router` 4. API key generada automáticamente ### Login del dashboard **Credenciales por defecto:** - Contraseña: `123456` **⚠️ Cambia la contraseña inmediatamente:** 1. Inicia sesión en el dashboard 2. Settings → Change Password 3. Usa una contraseña fuerte ### Obtén tu API key ``` Dashboard → Settings → API Keys → Copia tu API key → Úsala en herramientas CLI ``` **Ejemplo de formato de API key:** ``` 9r_1234567890abcdef1234567890abcdef ``` --- ## Verificar la instalación ### Verifica el estado del servidor ```bash curl http://localhost:20128/health ``` **Respuesta esperada:** ```json { "status": "ok", "version": "1.0.0" } ``` ### Lista los modelos disponibles ```bash curl http://localhost:20128/v1/models \ -H "Authorization: Bearer your-api-key" ``` **Respuesta esperada:** ```json { "object": "list", "data": [ { "id": "cc/claude-opus-4-5-20251101", "object": "model", "created": 1234567890, "owned_by": "claude-code" } ] } ``` ### Prueba el chat completion ```bash curl http://localhost:20128/v1/chat/completions \ -H "Authorization: Bearer your-api-key" \ -H "Content-Type: application/json" \ -d '{ "model": "cc/claude-opus-4-5-20251101", "messages": [ {"role": "user", "content": "Hello!"} ] }' ``` --- ## Configuración ### Variables de entorno Crea un archivo `.env` o establece variables de entorno: ```bash # Security (REQUIRED in production) export JWT_SECRET="your-secure-secret-change-this" export INITIAL_PASSWORD="your-password" # Storage export DATA_DIR="~/.9router" # Server export PORT="20128" export NODE_ENV="production" # Logging export ENABLE_REQUEST_LOGS="false" ``` ### Directorio de datos **Ubicación por defecto:** `~/.9router` **Contenido:** ``` ~/.9router/ ├── db.json # Database (providers, combos, usage) ├── api-keys.json # API keys └── logs/ # Request logs (if enabled) ``` **Cambiar ubicación:** ```bash export DATA_DIR="/custom/path" 9router ``` ### Configuración de puerto **Puerto por defecto:** `20128` **Cambiar puerto:** ```bash export PORT="3000" 9router ``` **O usa la línea de comandos:** ```bash 9router --port 3000 ``` --- ## Solución de problemas ### Puerto ya en uso **Error:** ``` Error: listen EADDRINUSE: address already in use :::20128 ``` **Solución 1: Mata el proceso existente** ```bash # Encuentra proceso usando el puerto 20128 lsof -i :20128 # Mata el proceso kill -9 ``` **Solución 2: Usa otro puerto** ```bash 9router --port 3000 ``` ### Permiso denegado **Error:** ``` Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/9router' ``` **Solución: Usa sudo (no recomendado) o corrige los permisos de npm** ```bash # Corregir permisos de npm (recomendado) mkdir ~/.npm-global npm config set prefix '~/.npm-global' echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc source ~/.bashrc # Luego instalar nuevamente npm install -g 9router ``` ### Versión de Node.js muy antigua **Error:** ``` Error: The engine "node" is incompatible with this module ``` **Solución: Actualizar Node.js** ```bash # Usando nvm (recomendado) nvm install 20 nvm use 20 # O descargar desde nodejs.org ``` ### El dashboard no se abre **Problema:** El dashboard no se abre automáticamente **Solución 1: Abrir manualmente** ``` http://localhost:20128 ``` **Solución 2: Verifica el firewall** ```bash # macOS: Permitir Node.js en System Preferences → Security # Linux: Verificar iptables # Windows: Verificar Windows Firewall ``` ### No se puede conectar a proveedores **Problema:** El login OAuth falla o la API key es inválida **Solución 1: Verifica la conexión a internet** ```bash ping google.com ``` **Solución 2: Verifica el estado del proveedor** - Claude Code: [status.anthropic.com](https://status.anthropic.com) - OpenAI: [status.openai.com](https://status.openai.com) - Gemini: [status.cloud.google.com](https://status.cloud.google.com) **Solución 3: Regenera la API key** ``` Dashboard → Provider → Disconnect → Reconnect ``` ### Uso alto de memoria **Problema:** 9Router usa demasiada RAM **Solución: Reinicia el servidor** ```bash # Detener pkill -f 9router # Iniciar 9router ``` **O usa PM2 para auto-reinicio:** ```bash npm install -g pm2 pm2 start 9router --name 9router pm2 save ``` --- ## Opciones de despliegue ### Desarrollo local ```bash npm install -g 9router 9router ``` **Caso de uso:** Codificación personal, pruebas ### Servidor VPS/Cloud ```bash # Instalar npm install -g 9router # Configurar export JWT_SECRET="your-secure-secret" export INITIAL_PASSWORD="your-password" export NODE_ENV="production" # Iniciar con PM2 npm install -g pm2 pm2 start 9router --name 9router pm2 save pm2 startup ``` **Caso de uso:** Acceso de equipo, codificación remota ### Docker ```bash docker pull 9router/9router:latest docker run -d \ -p 20128:20128 \ -e JWT_SECRET="your-secure-secret" \ -e INITIAL_PASSWORD="your-password" \ -v 9router-data:/root/.9router \ --name 9router \ 9router/9router:latest ``` **Caso de uso:** Despliegue containerizado, Kubernetes ### Proxy reverso (Nginx) ```nginx server { listen 80; server_name your-domain.com; location / { proxy_pass http://localhost:20128; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; # SSE support for streaming proxy_buffering off; proxy_read_timeout 86400; } } ``` **Caso de uso:** HTTPS, dominio personalizado, balanceo de carga --- ## Desinstalación ### Eliminar instalación global ```bash npm uninstall -g 9router ``` ### Eliminar el directorio de datos ```bash rm -rf ~/.9router ``` ### Eliminar la configuración ```bash # Eliminar variables de entorno del archivo de configuración del shell nano ~/.bashrc # o ~/.zshrc # Eliminar exports relacionados con 9router ``` --- ## Próximos pasos - [Guía para empezar](../getting-started.md) - Conecta proveedores y comienza a codificar - [Características](../features/) - Explora seguimiento de cuota, combos, despliegue - [Solución de problemas](../troubleshooting.md) - Resuelve problemas comunes --- ## ¿Necesitas ayuda? - **Sitio web**: [9router.com](https://9router.com) - **GitHub**: [github.com/decolua/9router](https://github.com/decolua/9router) - **Issues**: [github.com/decolua/9router/issues](https://github.com/decolua/9router/issues)