# Guia de Configuracion Configuracion detallada de todos los componentes del sistema ADAN. ## Variables de Entorno El archivo `/opt/adan/.env` contiene todas las configuraciones del sistema. ### Base de Datos ```bash # PostgreSQL DATABASE_URL=postgresql://adan:PASSWORD@localhost:5432/adan_db # Conexiones maximas al pool DB_POOL_SIZE=10 DB_MAX_OVERFLOW=20 ``` ### Redis ```bash # URL de conexion REDIS_URL=redis://localhost:6379 # Base de datos (0-15) REDIS_DB=0 ``` ### Seguridad ```bash # Clave secreta para JWT (generar con: openssl rand -base64 64) JWT_SECRET=tu_clave_muy_larga_y_segura # Expiracion de tokens ACCESS_TOKEN_EXPIRE_MINUTES=1440 # 24 horas REFRESH_TOKEN_EXPIRE_DAYS=7 # Clave para encriptar datos sensibles ENCRYPTION_KEY=otra_clave_segura ``` ### Traccar ```bash # Conexion a Traccar TRACCAR_HOST=localhost TRACCAR_PORT=5055 TRACCAR_FORWARD_URL=http://localhost:8000/api/v1/traccar/position ``` ### Video Streaming ```bash # MediaMTX MEDIAMTX_API=http://localhost:9997 MEDIAMTX_RTSP=rtsp://localhost:8554 MEDIAMTX_WEBRTC=http://localhost:8889 MEDIAMTX_HLS=http://localhost:8888 # Directorio de grabaciones VIDEO_STORAGE_PATH=/opt/adan/videos VIDEO_RETENTION_DAYS=30 ``` ### MQTT (Meshtastic) ```bash MQTT_HOST=localhost MQTT_PORT=1883 MQTT_USER=mesh_gateway MQTT_PASSWORD=password_seguro MQTT_TOPIC=adan/mesh/# ``` ### Notificaciones ```bash # Email (SMTP) SMTP_HOST=smtp.tudominio.com SMTP_PORT=587 SMTP_USER=notificaciones@tudominio.com SMTP_PASSWORD=password SMTP_FROM=ADAN # Push Notifications (Firebase) FIREBASE_CREDENTIALS_FILE=/opt/adan/firebase-credentials.json ``` ### Dominio ```bash DOMAIN=adan.tudominio.com API_URL=https://adan.tudominio.com/api FRONTEND_URL=https://adan.tudominio.com ``` --- ## Configuracion de Traccar Archivo: `/opt/traccar/conf/traccar.xml` ```xml org.postgresql.Driver jdbc:postgresql://localhost:5432/adan_db adan TU_PASSWORD false false true http://localhost:8000/api/v1/traccar/position true 5023 5002 5001 5055 true info ``` ### Protocolos GPS Comunes | Protocolo | Puerto | Dispositivos | |-----------|--------|--------------| | osmand | 5055 | Apps moviles, GPS genericos | | gt06 | 5023 | Concox, Wetrack, JM01 | | tk103 | 5002 | TK103, GPS103 | | h02 | 5013 | Sinotrack ST-901 | | watch | 5093 | Smartwatches GPS | | teltonika | 5027 | Teltonika FM | Para habilitar un protocolo adicional, agregar la linea: ```xml PUERTO ``` Y abrir el puerto en el firewall: ```bash ufw allow PUERTO/tcp ``` --- ## Configuracion de MediaMTX Archivo: `/etc/mediamtx/mediamtx.yml` ```yaml # Logging logLevel: info logDestinations: [stdout] # API para control api: yes apiAddress: 127.0.0.1:9997 # RTSP Server (para recibir streams de camaras) rtsp: yes rtspAddress: :8554 protocols: [tcp, udp] rtspAuthMethods: [] # WebRTC Server (para dashboard) webrtc: yes webrtcAddress: :8889 webrtcAllowOrigin: '*' webrtcICEServers2: - urls: [stun:stun.l.google.com:19302] # HLS Server (para app movil) hls: yes hlsAddress: :8888 hlsAllowOrigin: '*' hlsAlwaysRemux: yes hlsSegmentCount: 3 hlsSegmentDuration: 1s # Grabacion record: no # Manejamos grabacion desde nuestra API recordPath: /opt/adan/videos/%path/%Y%m%d_%H%M%S.mp4 # Paths (camaras) paths: # Patron para camaras: cam_{vehiculo_id}_{posicion} cam~: source: publisher # Autenticacion para publicar publishUser: camuser publishPass: campass # Autenticacion para ver (vacio = sin auth, lo manejamos con JWT) readUser: '' readPass: '' ``` ### Agregar Camara Manualmente ```bash # Crear path para una camara curl -X POST http://localhost:9997/v2/config/paths/add/cam_1_frontal \ -H "Content-Type: application/json" \ -d '{ "source": "rtsp://usuario:password@192.168.1.100/stream1", "sourceOnDemand": true }' ``` --- ## Configuracion de Cloudflare Tunnel Archivo: `/etc/cloudflared/config.yml` ```yaml tunnel: TU_TUNNEL_ID credentials-file: /root/.cloudflared/TU_TUNNEL_ID.json ingress: # API Backend - hostname: adan.tudominio.com path: /api/* service: http://localhost:8000 # WebSocket - hostname: adan.tudominio.com path: /ws/* service: http://localhost:8000 # Frontend (default) - hostname: adan.tudominio.com service: http://localhost:3000 # Catch-all - service: http_status:404 ``` ### Comandos Utiles ```bash # Ver estado del tunnel cloudflared tunnel info TU_TUNNEL_ID # Listar tunnels cloudflared tunnel list # Ver conexiones activas cloudflared tunnel run --url http://localhost:3000 # Reiniciar systemctl restart cloudflared ``` --- ## Configuracion de PostgreSQL ### Ajustes de Rendimiento Archivo: `/etc/postgresql/15/main/postgresql.conf` ```ini # Memoria (ajustar segun RAM disponible) shared_buffers = 2GB # 25% de RAM effective_cache_size = 6GB # 75% de RAM work_mem = 256MB maintenance_work_mem = 512MB # Conexiones max_connections = 100 # WAL wal_buffers = 64MB checkpoint_completion_target = 0.9 # Logging log_min_duration_statement = 1000 # Log queries > 1 segundo ``` ### TimescaleDB ```sql -- Ver chunks de la hypertable SELECT show_chunks('ubicaciones'); -- Comprimir chunks antiguos SELECT compress_chunk(c, if_not_compressed => true) FROM show_chunks('ubicaciones', older_than => INTERVAL '7 days') c; -- Configurar compresion automatica SELECT add_compression_policy('ubicaciones', INTERVAL '7 days'); -- Configurar retencion automatica SELECT add_retention_policy('ubicaciones', INTERVAL '90 days'); ``` --- ## Configuracion de Redis Archivo: `/etc/redis/redis.conf` ```ini # Memoria maxmemory 512mb maxmemory-policy allkeys-lru # Persistencia save 900 1 save 300 10 save 60 10000 # Solo conexiones locales bind 127.0.0.1 ``` --- ## Configuracion de Firewall (UFW) ```bash # Ver estado actual ufw status verbose # Reglas recomendadas ufw default deny incoming ufw default allow outgoing ufw allow ssh ufw allow 5055/tcp # GPS Traccar # Si necesitas mas puertos GPS ufw allow 5001:5099/tcp # Rango de puertos Traccar # Habilitar ufw enable ``` --- ## Configuracion de Systemd Services ### adan-api.service ```ini [Unit] Description=ADAN API Backend After=network.target postgresql.service redis.service [Service] Type=simple User=www-data Group=www-data WorkingDirectory=/opt/adan/backend Environment="PATH=/opt/adan/venv/bin" EnvironmentFile=/opt/adan/.env ExecStart=/opt/adan/venv/bin/uvicorn app.main:app \ --host 127.0.0.1 \ --port 8000 \ --workers 4 \ --loop uvloop \ --http httptools Restart=always RestartSec=5 [Install] WantedBy=multi-user.target ``` ### adan-web.service ```ini [Unit] Description=ADAN Web Frontend After=network.target [Service] Type=simple User=www-data Group=www-data WorkingDirectory=/opt/adan/frontend ExecStart=/usr/bin/npx serve -s dist -l 3000 Restart=always RestartSec=5 [Install] WantedBy=multi-user.target ``` --- ## Configuracion desde el Dashboard Muchas configuraciones se pueden cambiar desde **Configuracion** en el dashboard: ### General - Zona horaria - Unidades (km/millas, litros/galones) - Moneda - Idioma ### Alertas - Velocidad maxima global - Tiempo de parada para alerta (minutos) - Tiempo offline para alerta (minutos) - Notificaciones por email ### Mapa - Proveedor de mapas - Estilo (claro/oscuro) - Capas por defecto ### Retencion de Datos - Dias de ubicaciones detalladas - Dias de ubicaciones agregadas - Dias de grabaciones de video - Dias de alertas --- ## Aplicar Cambios Despues de modificar archivos de configuracion: ```bash # Recargar configuracion de systemd systemctl daemon-reload # Reiniciar servicio especifico systemctl restart adan-api # Reiniciar todos los servicios systemctl restart adan-api adan-web traccar mediamtx # Verificar estado systemctl status adan-api adan-web traccar mediamtx ```