Wiki completa de NetBox: 9 páginas en español

2025-12-04 10:20:42 +01:00
parent 3a12ae4c77
commit eb64706990
9 changed files with 2028 additions and 1 deletions

289
Actualización.md Normal file

@@ -0,0 +1,289 @@
# Actualización
Mantén NetBox y sus componentes actualizados de forma segura.
## Antes de Actualizar
### 1. Backup Completo
```bash
# Ejecutar script de backup
/root/backup-netbox.sh
# O manualmente
docker exec netbox-db pg_dump -U netbox netbox | gzip > netbox-pre-update-$(date +%Y%m%d).sql.gz
```
### 2. Verificar Notas de Release
- [NetBox Releases](https://github.com/netbox-community/netbox/releases)
- [LinuxServer Announcements](https://github.com/linuxserver/docker-netbox/releases)
- Revisar breaking changes y migraciones de BD
### 3. Planificar Ventana de Mantenimiento
- Actualizar en horario de bajo uso
- Informar a usuarios
- Preparar rollback si es necesario
---
## Actualizar NetBox
### Método 1: Pull de Imagen
```bash
# 1. Backup
docker exec netbox-db pg_dump -U netbox netbox > netbox-pre-update.sql
# 2. Detener stack
docker stop netbox netbox-redis netbox-db
# 3. Actualizar imágenes
docker pull lscr.io/linuxserver/netbox:latest
# 4. Iniciar stack
docker start netbox-db
sleep 10
docker start netbox-redis
sleep 5
docker start netbox
# 5. Verificar logs
docker logs -f netbox
```
### Método 2: Recrear Contenedores (Portainer)
1. Ve al stack en Portainer
2. Click en **Pull and redeploy**
3. Verifica logs del contenedor
### Verificar Actualización
```bash
# Ver versión actual
docker exec netbox python /app/netbox/manage.py version
# Ver logs de migración
docker logs netbox | grep -i migration
# Verificar en UI
# Admin → System → About
```
---
## Actualizar PostgreSQL
### De PostgreSQL 16 a 18
Si vienes de una versión anterior con PostgreSQL 16:
```bash
# 1. BACKUP CRÍTICO
docker exec netbox-db pg_dump -U netbox netbox > netbox-pg-migration-$(date +%Y%m%d).sql
# 2. Detener NetBox y Redis
docker stop netbox netbox-redis
# 3. Detener y eliminar PostgreSQL 16
docker stop netbox-db
docker rm netbox-db
# 4. Eliminar volumen antiguo
docker volume rm netbox_db
# 5. Recrear volumen
docker volume create netbox_db
# 6. Actualizar compose a postgres:18-alpine
# Editar docker-compose.yml si es necesario
# 7. Iniciar PostgreSQL 18
docker compose up -d netbox-db
# 8. Esperar que esté listo
sleep 10
docker exec netbox-db pg_isready -U netbox
# 9. Restaurar datos
cat netbox-pg-migration-20250101.sql | docker exec -i netbox-db psql -U netbox netbox
# 10. Iniciar servicios
docker start netbox-redis
sleep 5
docker start netbox
# 11. Verificar
docker logs -f netbox
```
---
## Actualizar Redis
Redis 7 es muy estable, pero si necesitas actualizar:
```bash
# 1. Detener NetBox
docker stop netbox
# 2. Actualizar Redis
docker stop netbox-redis
docker pull redis:7-alpine
docker start netbox-redis
# 3. Reiniciar NetBox
docker start netbox
```
> Redis solo almacena caché, no es crítico hacer backup
---
## Actualizar Plugins
```bash
# Entrar al contenedor
docker exec -it netbox bash
# Ver plugins instalados
pip list | grep netbox
# Actualizar plugin específico
pip install --upgrade netbox-topology-views
# Actualizar todos los plugins
pip list --outdated | grep netbox- | cut -d' ' -f1 | xargs pip install --upgrade
# Salir
exit
# Reiniciar NetBox
docker restart netbox
```
---
## Rollback (Si Algo Falla)
### Rollback Rápido
```bash
# 1. Detener NetBox
docker stop netbox
# 2. Restaurar base de datos
gunzip < netbox-pre-update-20250101.sql.gz | docker exec -i netbox-db psql -U netbox netbox
# 3. Volver a imagen anterior (si guardaste el tag)
docker tag lscr.io/linuxserver/netbox:3.6.9 lscr.io/linuxserver/netbox:latest
# 4. Recrear contenedor
docker stop netbox
docker rm netbox
docker compose up -d netbox
# 5. Verificar
docker logs -f netbox
```
### Rollback Completo
```bash
# Restaurar desde backup completo
# Ver sección "Restauración Completa" en Backup y Restauración
```
---
## Automatizar Actualizaciones
### Watchtower (No Recomendado para Producción)
Si quieres auto-actualizar (úsalo solo en dev/test):
```yaml
services:
watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --interval 86400 --cleanup
```
### Script de Actualización Controlada
```bash
#!/bin/bash
# /root/update-netbox.sh
# Backup pre-actualización
docker exec netbox-db pg_dump -U netbox netbox | gzip > /backups/netbox/netbox-pre-update-$(date +%Y%m%d).sql.gz
# Detener
docker stop netbox netbox-redis
# Actualizar imágenes
docker pull lscr.io/linuxserver/netbox:latest
docker pull redis:7-alpine
# Iniciar
docker start netbox-redis
sleep 5
docker start netbox
# Verificar
sleep 10
if docker ps | grep -q netbox; then
echo "✓ NetBox actualizado correctamente"
else
echo "✗ Error en actualización - revisar logs"
exit 1
fi
```
Ejecuta manualmente o programa:
```bash
# Cron mensual (primer domingo a las 3 AM)
0 3 1-7 * 0 /root/update-netbox.sh >> /var/log/netbox-update.log 2>&1
```
---
## Verificación Post-Actualización
### Checklist
- [ ] NetBox accesible vía web
- [ ] Login funciona
- [ ] API responde: `curl -H "Authorization: Token TOKEN" https://netbox.example.com/api/`
- [ ] Plugins funcionan
- [ ] Datos intactos (verificar dispositivos/IPs)
- [ ] Webhooks operativos
- [ ] Scripts personalizados funcionan
### Comandos de Verificación
```bash
# Versión
docker exec netbox python /app/netbox/manage.py version
# Migraciones pendientes
docker exec netbox python /app/netbox/manage.py showmigrations | grep "\[ \]"
# Estado de servicios
docker ps -a | grep netbox
# Uso de recursos
docker stats netbox netbox-db netbox-redis --no-stream
```
---
## Próximos Pasos
1. **[Backup](Backup-y-Restauración)** - Automatiza backups post-actualización
2. **[Solución de Problemas](Solución-de-Problemas)** - Si encuentras problemas

292
Backup-y-Restauración.md Normal file

@@ -0,0 +1,292 @@
# Backup y Restauración
Protege tus datos de NetBox con backups automáticos.
## Qué Hacer Backup
NetBox tiene 3 componentes críticos:
1. **PostgreSQL** - Base de datos (lo más importante)
2. **Configuración** - `/config/` (configuration.py, plugins, scripts)
3. **Redis** - Solo caché temporal (opcional)
---
## Backup Manual
### PostgreSQL (Crítico)
```bash
# Backup completo
docker exec netbox-db pg_dump -U netbox netbox > netbox-backup-$(date +%Y%m%d).sql
# Backup comprimido (ahorra espacio)
docker exec netbox-db pg_dump -U netbox netbox | gzip > netbox-backup-$(date +%Y%m%d).sql.gz
# Verificar backup
gunzip -c netbox-backup-20250101.sql.gz | head -20
```
### Configuración
```bash
# Backup del volumen de configuración
docker run --rm -v netbox_config:/backup -v $(pwd):/target alpine tar czf /target/netbox-config-$(date +%Y%m%d).tar.gz -C /backup .
# Verificar
tar tzf netbox-config-20250101.tar.gz | head
```
### Redis (Opcional)
```bash
# Forzar guardado
docker exec netbox-redis redis-cli --pass "TU_REDIS_PASSWORD" SAVE
# Backup del dump
docker run --rm -v netbox_redis:/backup -v $(pwd):/target alpine tar czf /target/netbox-redis-$(date +%Y%m%d).tar.gz -C /backup .
```
---
## Backup Automático
### Script de Backup
Crea `/root/backup-netbox.sh`:
```bash
#!/bin/bash
# Configuración
BACKUP_DIR="/backups/netbox"
DATE=$(date +%Y%m%d-%H%M%S)
RETENTION_DAYS=7
# Crear directorio
mkdir -p $BACKUP_DIR
# PostgreSQL (comprimido)
echo "Backing up PostgreSQL..."
docker exec netbox-db pg_dump -U netbox netbox | gzip > $BACKUP_DIR/netbox-db-$DATE.sql.gz
# Configuración
echo "Backing up configuration..."
docker run --rm -v netbox_config:/backup -v $BACKUP_DIR:/target alpine tar czf /target/netbox-config-$DATE.tar.gz -C /backup .
# Redis (opcional)
# docker exec netbox-redis redis-cli --pass "PASSWORD" SAVE
# docker run --rm -v netbox_redis:/backup -v $BACKUP_DIR:/target alpine tar czf /target/netbox-redis-$DATE.tar.gz -C /backup .
# Limpiar backups antiguos
echo "Cleaning old backups (older than $RETENTION_DAYS days)..."
find $BACKUP_DIR -name "netbox-db-*.sql.gz" -mtime +$RETENTION_DAYS -delete
find $BACKUP_DIR -name "netbox-config-*.tar.gz" -mtime +$RETENTION_DAYS -delete
# Verificar espacio
BACKUP_SIZE=$(du -sh $BACKUP_DIR | cut -f1)
echo "Backup completed: $DATE"
echo "Backup size: $BACKUP_SIZE"
# Opcional: copiar a otro servidor
# rsync -avz $BACKUP_DIR/ backup@remote:/backups/netbox/
```
Hazlo ejecutable:
```bash
chmod +x /root/backup-netbox.sh
```
### Automatizar con Cron
```bash
# Editar crontab
crontab -e
# Añadir backup diario a las 2 AM
0 2 * * * /root/backup-netbox.sh >> /var/log/netbox-backup.log 2>&1
# Backup cada 6 horas
0 */6 * * * /root/backup-netbox.sh >> /var/log/netbox-backup.log 2>&1
```
### Verificar Cron
```bash
# Ver tareas programadas
crontab -l
# Ver logs de backup
tail -f /var/log/netbox-backup.log
```
---
## Restauración
### Restaurar PostgreSQL
```bash
# Detener NetBox
docker stop netbox
# Restaurar desde backup comprimido
gunzip < netbox-backup-20250101.sql.gz | docker exec -i netbox-db psql -U netbox netbox
# O desde backup sin comprimir
cat netbox-backup-20250101.sql | docker exec -i netbox-db psql -U netbox netbox
# Reiniciar NetBox
docker start netbox
# Verificar logs
docker logs -f netbox
```
### Restaurar Configuración
```bash
# Detener NetBox
docker stop netbox
# Limpiar volumen actual (opcional - crear backup primero)
# docker run --rm -v netbox_config:/config alpine rm -rf /config/*
# Restaurar desde backup
docker run --rm -v netbox_config:/restore -v $(pwd):/source alpine tar xzf /source/netbox-config-20250101.tar.gz -C /restore
# Verificar permisos
docker run --rm -v netbox_config:/config alpine chown -R 1000:1000 /config
# Reiniciar NetBox
docker start netbox
```
### Restauración Completa
```bash
# 1. Detener stack
docker stop netbox netbox-redis netbox-db
# 2. Eliminar volúmenes (CUIDADO - perderás datos actuales)
# docker volume rm netbox_db netbox_config
# 3. Recrear volúmenes
docker volume create netbox_db
docker volume create netbox_config
# 4. Restaurar PostgreSQL
docker start netbox-db
sleep 10
gunzip < netbox-backup-20250101.sql.gz | docker exec -i netbox-db psql -U netbox netbox
# 5. Restaurar configuración
docker run --rm -v netbox_config:/restore -v $(pwd):/source alpine tar xzf /source/netbox-config-20250101.tar.gz -C /restore
# 6. Iniciar todo
docker start netbox-redis netbox
# 7. Verificar
docker logs -f netbox
```
---
## Migración a Otro Servidor
### Exportar
En el servidor origen:
```bash
# Backup completo
/root/backup-netbox.sh
# Copiar a servidor destino
scp /backups/netbox/netbox-db-*.sql.gz user@destino:/tmp/
scp /backups/netbox/netbox-config-*.tar.gz user@destino:/tmp/
```
### Importar
En el servidor destino:
```bash
# Desplegar NetBox (sin iniciar)
docker compose up -d
# Detener NetBox
docker stop netbox
# Restaurar datos
gunzip < /tmp/netbox-db-20250101.sql.gz | docker exec -i netbox-db psql -U netbox netbox
docker run --rm -v netbox_config:/restore -v /tmp:/source alpine tar xzf /source/netbox-config-20250101.tar.gz -C /restore
# Iniciar
docker start netbox
```
---
## Backup Remoto
### Rsync a Servidor Remoto
Añade al script de backup:
```bash
# Al final de backup-netbox.sh
rsync -avz --delete $BACKUP_DIR/ backup@remote.server:/backups/netbox/
```
### Backup a S3
```bash
# Instalar AWS CLI
apt install awscli
# Configurar credenciales
aws configure
# Añadir al script de backup
aws s3 sync $BACKUP_DIR/ s3://mi-bucket/netbox-backups/ --delete
```
---
## Verificación de Backups
### Script de Verificación
```bash
#!/bin/bash
LATEST_BACKUP=$(ls -t /backups/netbox/netbox-db-*.sql.gz | head -1)
echo "Verificando backup: $LATEST_BACKUP"
# Verificar integridad
gunzip -t $LATEST_BACKUP
if [ $? -eq 0 ]; then
echo "✓ Backup íntegro"
else
echo "✗ Backup corrupto"
exit 1
fi
# Verificar tamaño mínimo (ej: 1MB)
SIZE=$(stat -f%z "$LATEST_BACKUP")
if [ $SIZE -gt 1048576 ]; then
echo "✓ Tamaño válido: $(numfmt --to=iec $SIZE)"
else
echo "✗ Backup muy pequeño"
exit 1
fi
```
---
## Próximos Pasos
1. **[Actualización](Actualización)** - Mantén NetBox actualizado
2. **[Solución de Problemas](Solución-de-Problemas)** - Si algo falla

182
Configuración-Inicial.md Normal file

@@ -0,0 +1,182 @@
# Configuración Inicial
Pasos para configurar NetBox tras el primer despliegue.
## Primer Acceso
1. Accede a NetBox mediante tu dominio configurado
2. Login con las credenciales del superusuario:
- **Email**: El valor de `SUPERUSER_EMAIL`
- **Password**: El valor de `SUPERUSER_PASSWORD`
> El primer inicio puede tardar 1-2 minutos mientras NetBox inicializa la base de datos.
---
## Panel de Administración
### Usuarios y Permisos
**Admin****Users**
1. **Crear usuario adicional**:
- Click en **Add**
- Username, email, password
- Asignar a grupos
- Marcar **Staff status** si necesita acceso admin
2. **Crear grupos**:
- **Admin** → **Groups****Add**
- Asignar permisos granulares por modelo
- Ejemplo: Grupo "Network Team" con permisos IPAM
3. **Tokens de API**:
- **Admin** → **Tokens****Add**
- Seleccionar usuario
- Definir permisos (read-only, write)
- Usar para automatización
---
## Configuración Básica
### Sites (Ubicaciones)
**Organization****Sites****Add**
Crea tus ubicaciones físicas:
- **Name**: Madrid DC1
- **Status**: Active
- **Region**: España
- **Facility**: Equinix
- **Physical Address**: Calle ejemplo 123
- **GPS**: 40.4168, -3.7038
### Racks
**DCIM****Racks****Add**
Define racks para inventario:
- **Name**: RACK-01
- **Site**: Madrid DC1
- **U Height**: 42
- **Type**: 4-post cabinet
- **Width**: 19 inches
### Device Types
**DCIM****Device Types****Add**
O importa desde [Device Type Library](https://github.com/netbox-community/devicetype-library):
```bash
# Desde el contenedor
docker exec -it netbox bash
cd /app/netbox
python manage.py import_device_types --url https://github.com/netbox-community/devicetype-library.git
```
### Prefijos de Red
**IPAM****Prefixes****Add**
Define tus redes:
- **Prefix**: 192.168.1.0/24
- **Site**: Madrid DC1
- **VLAN**: VLAN 10 - Servidores
- **Status**: Active
- **Role**: Servers
- **Description**: Red de servidores producción
### VLANs
**IPAM****VLANs****Add**
- **ID**: 10
- **Name**: Servidores
- **Site**: Madrid DC1
- **Status**: Active
---
## Configuración Avanzada
### Custom Fields
**Customization****Custom Fields****Add**
Añade campos personalizados a cualquier modelo:
**Ejemplo**: Número de contrato para dispositivos
- **Object Types**: DCIM > Device
- **Type**: Text
- **Name**: contract_number
- **Label**: Nº Contrato
- **Required**: No
### Tags
**Organization****Tags****Add**
Etiquetas para organizar objetos:
- **Name**: Producción
- **Slug**: produccion
- **Color**: Red
### Webhooks
**System****Webhooks****Add**
Integra con sistemas externos:
- **Name**: Notificar a Slack
- **Object Types**: DCIM > Device
- **Events**: Created, Updated, Deleted
- **URL**: `https://hooks.slack.com/services/...`
- **HTTP Method**: POST
---
## Importar Datos
### Desde CSV
**Import** (en cada sección)
Ejemplo para IPs:
```csv
address,status,dns_name,description
192.168.1.10,active,server01.local,Web Server
192.168.1.11,active,server02.local,DB Server
```
### Desde API
```python
import requests
headers = {
'Authorization': 'Token tu_token_aqui',
'Content-Type': 'application/json'
}
data = {
'address': '192.168.1.20/32',
'status': 'active',
'dns_name': 'router01.local'
}
response = requests.post(
'https://netbox.tudominio.com/api/ipam/ip-addresses/',
headers=headers,
json=data
)
```
---
## Próximos Pasos
1. **[Personalización](Personalización)** - LDAP, plugins, scripts
2. **[Backup](Backup-y-Restauración)** - Protege tus datos
3. **[API Docs](https://netbox.tudominio.com/api/docs/)** - Explora la API REST

161
Home.md

@@ -1 +1,160 @@
¡Bienvenidos a la Wiki! # NetBox Wiki
Documentación completa para el despliegue y gestión de NetBox con Docker.
## 📑 Índice
### Inicio Rápido
- **[Home](Home)** - Esta página
- **[Generar Contraseñas](#generar-contraseñas)** - Antes de desplegar
### Modos de Despliegue
- **[Traefik](Traefik)** - Proxy inverso con SSL automático
- **[NPM](NPM)** - Nginx Proxy Manager
### Configuración y Uso
- **[Configuración Inicial](Configuración-Inicial)** - Primer acceso y setup
- **[Personalización](Personalización)** - LDAP, plugins, configuración avanzada
- **[Backup y Restauración](Backup-y-Restauración)** - Protege tus datos
- **[Actualización](Actualización)** - Mantén NetBox actualizado
- **[Solución de Problemas](Solución-de-Problemas)** - Diagnóstico y fixes
---
## ¿Qué es NetBox?
NetBox es una **solución IPAM (IP Address Management) y DCIM (Data Center Infrastructure Management)** de código abierto diseñada específicamente para equipos de red y data centers.
### Características Principales
- 📊 **IPAM Completo**: Gestión de IPs, VLANs, VRFs, prefijos
- 🖥️ **DCIM**: Inventario de racks, dispositivos, cables, conexiones
- 🔌 **Gestión de Circuitos**: Proveedores, circuitos, conexiones WAN
- 📝 **Documentación Rica**: Custom fields, tags, journaling
- 🔗 **API REST Completa**: Integración con sistemas externos
- 🔐 **Multi-tenancy**: Soporte para múltiples organizaciones
- 📈 **Reportes**: Visualización y exportación de datos
- 🔄 **Webhooks**: Automatización y notificaciones en tiempo real
### Casos de Uso
- **Gestión de IPs**: Planificación y asignación de direcciones IPv4/IPv6
- **Inventario de Red**: Documentar switches, routers, firewalls
- **Gestión de Data Center**: Racks, PDUs, cables, patch panels
- **Documentación**: Single source of truth para infraestructura
- **Automatización**: Integración con Ansible, Terraform, scripts
---
## Inicio Rápido
### Requisitos
- Docker Engine
- Portainer (recomendado)
- Red `proxy` creada
- PostgreSQL 18 y Redis (incluidos en el compose)
### Generar Contraseñas
**ANTES de desplegar**, genera 3 contraseñas seguras:
```bash
# DB_PASSWORD (PostgreSQL)
openssl rand -base64 32
# REDIS_PASSWORD
openssl rand -base64 32
# SUPERUSER_PASSWORD (admin de NetBox)
openssl rand -base64 32
```
> ⚠️ **Importante**: Si las contraseñas contienen caracteres especiales (`$`, `!`, etc.), usa comillas simples en el `.env`:
> ```env
> DB_PASSWORD='tu_password_con_$_especiales'
> ```
### Despliegue Básico
1. **Crea el stack en Portainer** con Git Repository:
- URL: `https://git.ictiberia.com/groales/netbox`
- Compose path: `docker-compose.yml`
2. **Añade variables de entorno**:
```env
DB_PASSWORD=password_generado_1
REDIS_PASSWORD=password_generado_2
SUPERUSER_EMAIL=admin@example.com
SUPERUSER_PASSWORD=password_generado_3
ALLOWED_HOST=*
```
3. **Deploy** y espera 1-2 minutos (NetBox inicializa la BD)
4. **Accede** y configura según tu proxy inverso:
- **[Traefik](Traefik)**: `https://netbox.tudominio.com`
- **[NPM](NPM)**: Configura Proxy Host primero
---
## Arquitectura
```
┌─────────────────────────────────────────────────┐
│ Traefik / NPM (Proxy) │
│ HTTPS / SSL │
└────────────────┬────────────────────────────────┘
┌─────────▼──────────┐
│ NetBox │ Puerto 8000
│ (LinuxServer) │
└─┬────────────────┬─┘
│ │
┌────▼─────┐ ┌────▼──────┐
│PostgreSQL│ │ Redis │
│ 18 │ │ 7 │
└──────────┘ └───────────┘
(Base Datos) (Caché)
```
### Componentes
- **NetBox**: Aplicación Django (puerto 8000)
- **PostgreSQL 18**: Base de datos principal
- **Redis 7**: Caché y mensajería
- **Proxy**: Traefik o NPM para HTTPS
### Volúmenes
- `netbox_config`: Configuración, media, scripts
- `netbox_db`: Base de datos PostgreSQL
- `netbox_redis`: Datos de Redis (caché)
---
## Próximos Pasos
1. **Elige tu modo de despliegue**:
- [Traefik](Traefik) - Recomendado para múltiples servicios
- [NPM](NPM) - Más simple para configurar
2. **Configura NetBox**:
- [Configuración Inicial](Configuración-Inicial) - Primer acceso
- [Personalización](Personalización) - LDAP, plugins, etc.
3. **Protege tus datos**:
- [Backup y Restauración](Backup-y-Restauración) - Automatiza backups
4. **Mantén actualizado**:
- [Actualización](Actualización) - NetBox y PostgreSQL
---
## Recursos Oficiales
- [Documentación NetBox](https://docs.netbox.dev/)
- [LinuxServer NetBox](https://docs.linuxserver.io/images/docker-netbox)
- [Device Type Library](https://github.com/netbox-community/devicetype-library)
- [API Docs](https://demo.netbox.dev/api/docs/)
- [Plugins](https://github.com/netbox-community/netbox/wiki/Plugins)

147
NPM.md Normal file

@@ -0,0 +1,147 @@
# Despliegue con Nginx Proxy Manager (NPM)
NetBox detrás de NPM con certificado SSL de Let's Encrypt.
## Requisitos Previos
- ✅ NPM desplegado y accesible
- ✅ Red Docker `proxy` creada
- ✅ DNS apuntando al servidor
---
## Pasos de Configuración
### 1. Desplegar NetBox
En Portainer, crea el stack **sin archivo override** (solo `docker-compose.yml`):
**Variables de entorno**:
```env
DB_PASSWORD=password_generado_1
REDIS_PASSWORD=password_generado_2
SUPERUSER_EMAIL=admin@example.com
SUPERUSER_PASSWORD=password_generado_3
ALLOWED_HOST=*
DB_NAME=netbox
DB_USER=netbox
```
> ⚠️ **No añadas** `DOMAIN_HOST` - Solo se usa con Traefik
### 2. Configurar Proxy Host en NPM
1. Accede a NPM (ej: `https://npm.tudominio.com`)
2. Ve a **Hosts****Proxy Hosts****Add Proxy Host**
#### Pestaña Details
- **Domain Names**: `netbox.tudominio.com`
- **Scheme**: `http`
- **Forward Hostname / IP**: `netbox`
- **Forward Port**: `8000`
-**Cache Assets**: Activado
-**Block Common Exploits**: Activado
-**Websockets Support**: Activado
#### Pestaña SSL
- **SSL Certificate**: `Request a new SSL Certificate`
- **Email**: tu@email.com
-**Force SSL**: Activado
-**HTTP/2 Support**: Activado
-**HSTS Enabled**: Activado (opcional)
-**HSTS Subdomains**: Activado (opcional)
3. **Save**
### 3. Verificar
- Accede a `https://netbox.tudominio.com`
- Verifica el certificado SSL (candado verde)
- Login con `SUPERUSER_EMAIL` y `SUPERUSER_PASSWORD`
---
## Configuración Avanzada (Opcional)
### Custom Nginx Configuration
Si necesitas ajustes específicos, ve a **Advanced** en el Proxy Host:
```nginx
# Aumentar timeout para operaciones largas
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
# Headers adicionales
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;
proxy_set_header X-Forwarded-Host $host;
# Buffer size para uploads grandes
client_max_body_size 100M;
```
---
## Solución de Problemas
### 502 Bad Gateway
**Causa**: NetBox no está accesible
**Solución**:
```bash
# Verificar que NetBox está corriendo
docker ps | grep netbox
# Ver logs
docker logs netbox
# Verificar conexión desde NPM
docker exec -it npm ping netbox
```
### Certificado SSL no se genera
**Soluciones**:
- Verificar que DNS apunta correctamente: `nslookup netbox.tudominio.com`
- Verificar puertos 80/443 abiertos
- Revisar logs de NPM
- Intentar con **Use a DNS Challenge** si tienes firewall
### Error de permisos
Si ves errores de permisos en NetBox:
```bash
docker exec -it netbox chown -R abc:abc /config
docker restart netbox
```
---
## Comparación NPM vs Traefik
| Característica | NPM | Traefik |
|----------------|-----|---------|
| Configuración | GUI (más fácil) | Código (más flexible) |
| SSL Automático | Manual por host | Automático |
| Múltiples servicios | Requiere configurar cada uno | Auto-discovery |
| Wildcards | Requiere DNS Challenge | Soportado |
| Middlewares | Limitados | Extensos |
**Recomendación**:
- **NPM**: Si tienes pocos servicios y prefieres GUI
- **Traefik**: Si gestionas muchos servicios y quieres automatización
---
## Próximos Pasos
1. **[Configuración Inicial](Configuración-Inicial)** - Setup de NetBox
2. **[Personalización](Personalización)** - LDAP, plugins
3. **[Backup](Backup-y-Restauración)** - Protege tus datos

277
Personalización.md Normal file

@@ -0,0 +1,277 @@
# Personalización
Configuración avanzada de NetBox: LDAP, plugins, scripts y más.
## Configuración de Archivos
NetBox usa `/config/` para almacenar configuración personalizada.
### Acceder a Configuración
```bash
# Entrar al contenedor
docker exec -it netbox bash
# Navegar a config
cd /config
# Ver archivos
ls -la
```
**Archivos importantes**:
- `configuration.py` - Configuración principal
- `ldap_config.py` - Autenticación LDAP (si usas LDAP)
- `plugins/` - Directorio de plugins
- `reports/` - Scripts de reportes personalizados
- `scripts/` - Scripts ejecutables desde UI
---
## Autenticación LDAP
### Configurar LDAP
Edita `/config/ldap_config.py`:
```python
import ldap
from django_auth_ldap.config import LDAPSearch, GroupOfNamesType
# Servidor LDAP
AUTH_LDAP_SERVER_URI = "ldap://ldap.example.com"
# Credenciales para bind
AUTH_LDAP_BIND_DN = "CN=netbox,OU=Services,DC=example,DC=com"
AUTH_LDAP_BIND_PASSWORD = "password"
# Búsqueda de usuarios
AUTH_LDAP_USER_SEARCH = LDAPSearch(
"OU=Users,DC=example,DC=com",
ldap.SCOPE_SUBTREE,
"(sAMAccountName=%(user)s)"
)
# Mapeo de atributos
AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "givenName",
"last_name": "sn",
"email": "mail"
}
# Grupos
AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
"OU=Groups,DC=example,DC=com",
ldap.SCOPE_SUBTREE,
"(objectClass=group)"
)
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType()
# Permisos basados en grupos
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
"is_staff": "CN=NetBox Admins,OU=Groups,DC=example,DC=com",
"is_superuser": "CN=NetBox Superusers,OU=Groups,DC=example,DC=com"
}
# Sincronización automática
AUTH_LDAP_ALWAYS_UPDATE_USER = True
AUTH_LDAP_FIND_GROUP_PERMS = True
AUTH_LDAP_MIRROR_GROUPS = True
```
Reinicia NetBox: `docker restart netbox`
---
## Plugins
### Instalar Plugin
```bash
# Ejemplo: NetBox Topology Views
docker exec -it netbox bash
pip install netbox-topology-views
# Editar configuration.py
nano /config/configuration.py
# Añadir a PLUGINS
PLUGINS = ['netbox_topology_views']
# Configuración específica del plugin (opcional)
PLUGINS_CONFIG = {
'netbox_topology_views': {
'static_image_directory': '/opt/netbox/netbox/media/topology_views'
}
}
# Salir y reiniciar
exit
docker restart netbox
```
### Plugins Recomendados
| Plugin | Descripción |
|--------|-------------|
| [netbox-topology-views](https://github.com/mattieserver/netbox-topology-views) | Visualización de topología de red |
| [netbox-secrets](https://github.com/Onemind-Services-LLC/netbox-secrets) | Gestión segura de credenciales |
| [netbox-bgp](https://github.com/k01ek/netbox-bgp) | Gestión de sesiones BGP |
| [netbox-documents](https://github.com/jasonyy2022/netbox-documents) | Adjuntar documentos |
---
## Scripts Personalizados
### Crear Script
```bash
# Crear script en /config/scripts/
docker exec -it netbox bash
nano /config/scripts/example_script.py
```
**Ejemplo de script**:
```python
from dcim.models import Device
from extras.scripts import Script
class DeviceAudit(Script):
class Meta:
name = "Device Audit"
description = "Genera reporte de dispositivos sin IP asignada"
def run(self, data, commit):
devices_without_ip = Device.objects.filter(
primary_ip4__isnull=True,
primary_ip6__isnull=True
)
self.log_info(f"Dispositivos sin IP: {devices_without_ip.count()}")
for device in devices_without_ip:
self.log_warning(f" - {device.name} ({device.site.name})")
return f"Auditados {devices_without_ip.count()} dispositivos"
```
El script aparecerá en **Scripts** en la UI de NetBox.
---
## Configuración Avanzada
### configuration.py
Opciones comunes en `/config/configuration.py`:
```python
# Banner personalizado
BANNER_TOP = 'NetBox Producción - ICT Iberia'
BANNER_BOTTOM = ''
BANNER_LOGIN = 'Acceso Restringido - Solo Personal Autorizado'
# Paginación
PAGINATE_COUNT = 50
MAX_PAGE_SIZE = 1000
# Preferencias de sesión
LOGIN_REQUIRED = True
SESSION_COOKIE_AGE = 1209600 # 2 semanas
# Timeout de cambios
CHANGELOG_RETENTION = 90 # días
# Enforcement de nombres únicos
ENFORCE_GLOBAL_UNIQUE = True
# Webhooks y jobs
QUEUE_NAMES = ['default', 'high', 'low']
# Métricas
METRICS_ENABLED = True
# GraphQL
GRAPHQL_ENABLED = True
```
### Personalizar Plantillas
```bash
# Crear override de plantilla
docker exec -it netbox mkdir -p /config/templates/dcim/device
docker exec -it netbox cp /app/netbox/templates/dcim/device/base.html /config/templates/dcim/device/
```
Edita `/config/templates/dcim/device/base.html` para personalizar la UI.
---
## Integración con Herramientas
### Ansible
```yaml
- name: Get devices from NetBox
hosts: localhost
tasks:
- name: Query NetBox API
uri:
url: "https://netbox.example.com/api/dcim/devices/"
headers:
Authorization: "Token {{ netbox_token }}"
return_content: yes
register: devices
- name: Show devices
debug:
var: devices.json.results
```
### Terraform
```hcl
provider "netbox" {
server_url = "https://netbox.example.com"
api_token = var.netbox_token
}
resource "netbox_prefix" "example" {
prefix = "10.0.0.0/24"
status = "active"
description = "Example prefix"
}
```
### Python
```python
import pynetbox
nb = pynetbox.api(
'https://netbox.example.com',
token='tu_token_aqui'
)
# Obtener dispositivos
devices = nb.dcim.devices.all()
for device in devices:
print(f"{device.name} - {device.primary_ip}")
# Crear IP
new_ip = nb.ipam.ip_addresses.create(
address='192.168.1.100/24',
status='active',
dns_name='server.example.com'
)
```
---
## Próximos Pasos
1. **[Backup](Backup-y-Restauración)** - Protege tu configuración
2. **[API Docs](https://netbox.example.com/api/docs/)** - Explora la API
3. **[Plugins Wiki](https://github.com/netbox-community/netbox/wiki/Plugins)** - Más plugins

402
Solución-de-Problemas.md Normal file

@@ -0,0 +1,402 @@
# Solución de Problemas
Diagnóstico y resolución de problemas comunes en NetBox.
## Diagnóstico General
### Ver Logs
```bash
# Logs de NetBox
docker logs netbox --tail 100 -f
# Logs de PostgreSQL
docker logs netbox-db --tail 50
# Logs de Redis
docker logs netbox-redis --tail 50
# Logs del stack completo
docker compose logs -f
```
### Verificar Estado
```bash
# Estado de contenedores
docker ps -a | grep netbox
# Uso de recursos
docker stats netbox netbox-db netbox-redis --no-stream
# Redes
docker network inspect netbox-internal
docker network inspect proxy
```
---
## Problemas Comunes
### NetBox No Inicia
**Síntomas**: Contenedor se reinicia constantemente
**Diagnóstico**:
```bash
docker logs netbox | grep -i error
docker logs netbox | grep -i fatal
```
**Causas comunes**:
1. **PostgreSQL no está listo**
```bash
docker logs netbox-db
docker exec netbox-db pg_isready -U netbox
```
**Solución**: Esperar o reiniciar PostgreSQL
```bash
docker restart netbox-db
sleep 10
docker restart netbox
```
2. **Redis no accesible**
```bash
docker exec netbox-redis redis-cli --pass "PASSWORD" ping
```
**Solución**: Verificar REDIS_PASSWORD en .env
3. **Permisos incorrectos**
```bash
docker exec netbox ls -la /config
```
**Solución**:
```bash
docker run --rm -v netbox_config:/config alpine chown -R 1000:1000 /config
docker restart netbox
```
### Error de Conexión a Base de Datos
**Síntomas**:
```
could not connect to server: Connection refused
FATAL: password authentication failed
```
**Soluciones**:
```bash
# Verificar que PostgreSQL está corriendo
docker ps | grep netbox-db
# Verificar password en .env
cat .env | grep DB_PASSWORD
# Verificar conexión desde NetBox
docker exec netbox ping netbox-db
# Resetear conexión
docker restart netbox-db
sleep 10
docker restart netbox
```
### Error 502 Bad Gateway (NPM/Traefik)
**Síntomas**: Proxy no puede conectar con NetBox
**Diagnóstico**:
```bash
# Verificar que NetBox está corriendo
docker ps | grep netbox
# Verificar puerto 8000
docker exec netbox netstat -tlnp | grep 8000
# Verificar desde proxy
docker exec npm ping netbox
```
**Soluciones**:
- Verificar que NetBox está en red `proxy`
- Verificar que el contenedor se llama `netbox`
- Reiniciar NetBox: `docker restart netbox`
### Lentitud Extrema
**Diagnóstico**:
```bash
# Ver uso de CPU/RAM
docker stats netbox netbox-db netbox-redis
# Ver queries lentas en PostgreSQL
docker exec netbox-db psql -U netbox -c "SELECT query, calls, total_exec_time FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 10;"
```
**Soluciones**:
1. **Limpiar caché de Redis**
```bash
docker exec netbox-redis redis-cli --pass "PASSWORD" FLUSHALL
docker restart netbox
```
2. **Optimizar PostgreSQL**
```bash
docker exec netbox-db psql -U netbox -c "VACUUM ANALYZE;"
docker exec netbox-db psql -U netbox -c "REINDEX DATABASE netbox;"
```
3. **Incrementar recursos** (editar compose):
```yaml
services:
netbox:
deploy:
resources:
limits:
memory: 2G
reservations:
memory: 1G
```
### Error de Migración de Base de Datos
**Síntomas**:
```
django.db.migrations.exceptions.InconsistentMigrationHistory
```
**Solución**:
```bash
# Ver migraciones aplicadas
docker exec netbox python /app/netbox/manage.py showmigrations
# Aplicar migraciones faltantes
docker exec netbox python /app/netbox/manage.py migrate
# Si persiste, forzar
docker exec netbox python /app/netbox/manage.py migrate --fake
```
### Certificado SSL no Funciona
**Síntomas**: Certificado inválido o HTTPS no funciona
**Soluciones**:
**Con Traefik**:
```bash
# Ver logs de Traefik
docker logs traefik | grep -i acme
docker logs traefik | grep netbox
# Verificar DNS
nslookup netbox.tudominio.com
# Forzar renovación
docker exec traefik rm /letsencrypt/acme.json
docker restart traefik
```
**Con NPM**:
- Verificar que DNS apunta correctamente
- Intentar con DNS Challenge si 80/443 bloqueados
- Regenerar certificado en NPM UI
### Plugin No Funciona
**Diagnóstico**:
```bash
# Ver plugins instalados
docker exec netbox pip list | grep netbox
# Ver logs de plugin
docker logs netbox | grep -i plugin
```
**Soluciones**:
```bash
# Reinstalar plugin
docker exec netbox pip install --force-reinstall netbox-plugin-name
# Verificar configuration.py
docker exec netbox cat /config/configuration.py | grep PLUGINS
# Reiniciar
docker restart netbox
```
---
## Comandos de Emergencia
### Reiniciar Todo
```bash
docker restart netbox netbox-redis netbox-db
```
### Recrear NetBox (Mantiene Datos)
```bash
docker stop netbox
docker rm netbox
docker compose up -d netbox
```
### Limpiar y Reiniciar
```bash
# CUIDADO: Pierde caché y sesiones
docker stop netbox netbox-redis
docker rm netbox-redis
docker volume rm netbox_redis
docker compose up -d netbox-redis
sleep 5
docker start netbox
```
### Acceso de Emergencia a Django Shell
```bash
# Shell de Django
docker exec -it netbox python /app/netbox/manage.py shell
# Ejemplo: crear superusuario
>>> from django.contrib.auth import get_user_model
>>> User = get_user_model()
>>> User.objects.create_superuser('admin', 'admin@example.com', 'password')
```
### Resetear Password de Admin
```bash
docker exec -it netbox python /app/netbox/manage.py changepassword admin
```
### Reconstruir Índices de Búsqueda
```bash
docker exec netbox python /app/netbox/manage.py reindex --lazy
```
### Limpiar Sesiones Antiguas
```bash
docker exec netbox python /app/netbox/manage.py clearsessions
```
---
## Recuperación de Desastres
### NetBox Corrupto - Restaurar desde Backup
```bash
# 1. Detener todo
docker stop netbox netbox-redis netbox-db
# 2. Eliminar volúmenes corruptos
docker volume rm netbox_db netbox_config
# 3. Recrear volúmenes
docker volume create netbox_db
docker volume create netbox_config
# 4. Iniciar PostgreSQL
docker start netbox-db
sleep 10
# 5. Restaurar BD
gunzip < /backups/netbox/netbox-backup-FECHA.sql.gz | docker exec -i netbox-db psql -U netbox netbox
# 6. Restaurar config
docker run --rm -v netbox_config:/restore -v /backups/netbox:/source alpine tar xzf /source/netbox-config-FECHA.tar.gz -C /restore
# 7. Iniciar todo
docker start netbox-redis
sleep 5
docker start netbox
```
### PostgreSQL Corrupto
```bash
# Intentar reparar
docker exec netbox-db pg_resetwal /var/lib/postgresql/data
# Si falla, restaurar desde backup
docker stop netbox-db
docker volume rm netbox_db
docker volume create netbox_db
docker start netbox-db
sleep 10
cat netbox-backup.sql | docker exec -i netbox-db psql -U netbox netbox
```
---
## Obtener Ayuda
### Información del Sistema
```bash
# Versión de NetBox
docker exec netbox python /app/netbox/manage.py version
# Versión de Python
docker exec netbox python --version
# Versión de PostgreSQL
docker exec netbox-db psql --version
# Variables de entorno
docker exec netbox env | grep -E "DB_|REDIS_|SUPER"
# Compose usado
docker inspect netbox | grep -A 20 Labels
```
### Recursos Oficiales
- [NetBox Discussions](https://github.com/netbox-community/netbox/discussions)
- [NetBox Slack](https://netdev.chat/)
- [LinuxServer Support](https://discourse.linuxserver.io/)
- [Stack Overflow](https://stackoverflow.com/questions/tagged/netbox)
---
## Prevención
### Monitorización
```bash
# Script de health check
#!/bin/bash
if docker exec netbox curl -f http://localhost:8000/api/ > /dev/null 2>&1; then
echo "✓ NetBox OK"
else
echo "✗ NetBox DOWN"
docker logs netbox --tail 50
fi
```
### Alertas
Configura alertas en tu sistema de monitorización (Prometheus, Zabbix, etc.):
- CPU > 80%
- RAM > 90%
- Disco > 85%
- NetBox no responde
---
## Próximos Pasos
1. **[Backup](Backup-y-Restauración)** - Automatiza backups para prevenir desastres
2. **[Actualización](Actualización)** - Mantén NetBox actualizado
3. **[Comunidad](https://github.com/netbox-community/netbox/discussions)** - Pregunta si no encuentras solución

262
Traefik.md Normal file

@@ -0,0 +1,262 @@
# Despliegue con Traefik
NetBox detrás de Traefik con SSL automático vía Let's Encrypt.
## Requisitos Previos
- ✅ Stack de Traefik desplegado y funcionando
- ✅ Red Docker `proxy` creada
- ✅ DNS apuntando al servidor (registro A para tu dominio)
- ✅ Puertos 80 y 443 accesibles desde internet
---
## Configuración
### 1. Preparar Variables de Entorno
En Portainer, al crear el stack desde Git Repository, añade estas variables:
```env
# Contraseñas (generadas previamente)
DB_PASSWORD=tu_password_generado_1
REDIS_PASSWORD=tu_password_generado_2
SUPERUSER_PASSWORD=tu_password_generado_3
# Superusuario de NetBox
SUPERUSER_EMAIL=admin@tudominio.com
# Host permitido
ALLOWED_HOST=*
# Base de datos (valores por defecto)
DB_NAME=netbox
DB_USER=netbox
# ⚠️ IMPORTANTE para Traefik
DOMAIN_HOST=netbox.tudominio.com
```
### 2. Subir Archivo Override
En Portainer, en la sección **Additional files**:
1. Click en **Add file**
2. **Path**: `docker-compose.override.traefik.yml`
3. **Content**: Pega el contenido de `docker-compose.override.traefik.yml.example`
```yaml
services:
netbox:
labels:
# Habilitar Traefik
- traefik.enable=true
# Router HTTP (redirige a HTTPS)
- traefik.http.routers.netbox-http.rule=Host(`${DOMAIN_HOST}`)
- traefik.http.routers.netbox-http.entrypoints=web
- traefik.http.routers.netbox-http.middlewares=redirect-to-https
# Router HTTPS
- traefik.http.routers.netbox.rule=Host(`${DOMAIN_HOST}`)
- traefik.http.routers.netbox.entrypoints=websecure
- traefik.http.routers.netbox.tls=true
- traefik.http.routers.netbox.tls.certresolver=letsencrypt
- traefik.http.routers.netbox.service=netbox-svc
- traefik.http.services.netbox-svc.loadbalancer.server.port=8000
# Redirect middleware
- traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
- traefik.http.middlewares.redirect-to-https.redirectscheme.permanent=true
```
### 3. Deploy
1. Click en **Deploy the stack**
2. Espera 1-2 minutos mientras NetBox inicializa
3. Verifica logs: `docker logs netbox -f`
### 4. Verificar
```bash
# Ver logs de NetBox
docker logs netbox --tail 50
# Verificar que Traefik detectó NetBox
docker logs traefik | grep netbox
# Verificar certificado SSL
curl -I https://netbox.tudominio.com
```
---
## Compose Completo con Traefik
Ejemplo completo si despliegas desde **Web editor**:
```yaml
services:
netbox:
container_name: netbox
image: lscr.io/linuxserver/netbox:latest
restart: unless-stopped
environment:
PUID: 1000
PGID: 1000
TZ: Europe/Madrid
SUPERUSER_EMAIL: ${SUPERUSER_EMAIL}
SUPERUSER_PASSWORD: ${SUPERUSER_PASSWORD}
ALLOWED_HOST: ${ALLOWED_HOST}
DB_NAME: ${DB_NAME:-netbox}
DB_USER: ${DB_USER:-netbox}
DB_PASSWORD: ${DB_PASSWORD}
DB_HOST: netbox-db
DB_PORT: 5432
REDIS_HOST: netbox-redis
REDIS_PORT: 6379
REDIS_PASSWORD: ${REDIS_PASSWORD}
volumes:
- netbox_config:/config
networks:
- proxy
- netbox-internal
depends_on:
- netbox-db
- netbox-redis
labels:
- traefik.enable=true
- traefik.http.routers.netbox-http.rule=Host(`netbox.tudominio.com`)
- traefik.http.routers.netbox-http.entrypoints=web
- traefik.http.routers.netbox-http.middlewares=redirect-to-https
- traefik.http.routers.netbox.rule=Host(`netbox.tudominio.com`)
- traefik.http.routers.netbox.entrypoints=websecure
- traefik.http.routers.netbox.tls=true
- traefik.http.routers.netbox.tls.certresolver=letsencrypt
- traefik.http.routers.netbox.service=netbox-svc
- traefik.http.services.netbox-svc.loadbalancer.server.port=8000
- traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
- traefik.http.middlewares.redirect-to-https.redirectscheme.permanent=true
netbox-db:
container_name: netbox-db
image: postgres:18-alpine
restart: unless-stopped
environment:
POSTGRES_DB: ${DB_NAME:-netbox}
POSTGRES_USER: ${DB_USER:-netbox}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- netbox_db:/var/lib/postgresql
networks:
- netbox-internal
netbox-redis:
container_name: netbox-redis
image: redis:7-alpine
restart: unless-stopped
command: redis-server --requirepass ${REDIS_PASSWORD}
volumes:
- netbox_redis:/data
networks:
- netbox-internal
volumes:
netbox_config:
name: netbox_config
netbox_db:
name: netbox_db
netbox_redis:
name: netbox_redis
networks:
proxy:
external: true
netbox-internal:
name: netbox-internal
```
---
## Solución de Problemas
### Traefik no detecta NetBox
**Verificar**:
```bash
# Labels del contenedor
docker inspect netbox | grep -A 20 Labels
# Redes del contenedor
docker inspect netbox | grep -A 10 Networks
# Logs de Traefik
docker logs traefik | grep netbox
```
**Solución**:
- Verificar que NetBox está en la red `proxy`
- Verificar variable `DOMAIN_HOST` en env
- Reiniciar Traefik: `docker restart traefik`
### Error de certificado SSL
**Síntomas**: `NET::ERR_CERT_AUTHORITY_INVALID`
**Solución**:
```bash
# Verificar logs de Traefik
docker logs traefik | grep -i acme
# Verificar que el DNS apunta correctamente
nslookup netbox.tudominio.com
# Forzar renovación de certificado
docker exec traefik rm /letsencrypt/acme.json
docker restart traefik
```
### Redirect loop
**Síntomas**: La página recarga infinitamente
**Solución**:
- Verificar que `ALLOWED_HOST` incluye tu dominio o está en `*`
- Comprobar configuración de Traefik (entrypoints)
---
## Configuración Avanzada
### Headers de Seguridad
Añade a los labels de Traefik:
```yaml
- traefik.http.middlewares.netbox-headers.headers.sslredirect=true
- traefik.http.middlewares.netbox-headers.headers.stsincludesubdomains=true
- traefik.http.middlewares.netbox-headers.headers.stspreload=true
- traefik.http.middlewares.netbox-headers.headers.stsseconds=31536000
- traefik.http.routers.netbox.middlewares=netbox-headers
```
### Autenticación Básica (opcional)
Si quieres protección adicional antes de acceder a NetBox:
```bash
# Generar usuario:password
htpasswd -nb admin password
# Añadir middleware
- traefik.http.middlewares.netbox-auth.basicauth.users=admin:$$apr1$$...
- traefik.http.routers.netbox.middlewares=netbox-auth
```
---
## Próximos Pasos
1. **[Configuración Inicial](Configuración-Inicial)** - Primer acceso y setup
2. **[Personalización](Personalización)** - Configurar LDAP, plugins
3. **[Backup](Backup-y-Restauración)** - Automatiza backups

17
_Sidebar.md Normal file

@@ -0,0 +1,17 @@
## NetBox Wiki
### 🚀 Inicio
- [Home](Home)
### 📦 Despliegue
- [Traefik](Traefik)
- [NPM](NPM)
### ⚙️ Configuración
- [Configuración Inicial](Configuración-Inicial)
- [Personalización](Personalización)
### 💾 Mantenimiento
- [Backup y Restauración](Backup-y-Restauración)
- [Actualización](Actualización)
- [Solución de Problemas](Solución-de-Problemas)