Variables de Entorno
Para cambiar las variables de entorno, debe recrear los contenedores de Remnawave.
¡Simplemente reiniciar los contenedores no reemplaza el entorno dentro del contenedor!
Para recrear el contenedor usando docker compose, ejecute docker compose down && docker compose up -d.
Cambiar variables de entorno
Puede cambiar las variables de entorno editando el archivo .env. Probablemente se encuentra en /opt/remnawave.
cd /opt/remnawave && nano .env
Puertos
| Variable | Descripción | Predeterminado |
|---|---|---|
APP_PORT | El puerto donde se ejecuta Remnawave Panel | 3000 |
METRICS_PORT | El puerto para los endpoints de Métricas | 3001 |
Ejemplo
APP_PORT=3000
METRICS_PORT=3001
Escalado de API
Número de instancias de API a ejecutar.
Valores posibles:
max(iniciar instancias en todos los núcleos)<number>(iniciar instancias en un número específico de núcleos)-1(iniciar instancias en todos los núcleos - 1)
Déjelo en el valor predeterminado para iniciar solo 1 instancia.
La mayoría de los usuarios no necesitarán cambiar este valor, pero puede ayudar a lograr mejor rendimiento con más de 40,000 usuarios.
No configure este valor en un número mayor que la cantidad de núcleos de CPU en su máquina.
| Variable | Descripción | Predeterminado |
|---|---|---|
API_INSTANCES | El número de instancias de API a ejecutar | 1 |
Ejemplo
API_INSTANCES=1
Redis
| Variable | Descripción | Predeterminado | Requerido |
|---|---|---|---|
REDIS_HOST | El host del servidor Redis | remnawave-redis | Sí |
REDIS_PORT | El puerto del servidor Redis | 6379 | Sí |
REDIS_DB | La base de datos del servidor Redis | 0 | No |
REDIS_PASSWORD | La contraseña del servidor Redis | No | |
REDIS_SOCKET | El socket del servidor Redis | No |
Ejemplo
REDIS_HOST=remnawave-redis
REDIS_PORT=6379
Base de datos
Las variables a continuación no son utilizadas por Remnawave, sino por el contenedor de base de datos.
| Variable | Descripción | Predeterminado | Requerido |
|---|---|---|---|
POSTGRES_USER | El nombre de usuario del servidor Postgres | postgres | No |
POSTGRES_PASSWORD | La contraseña del servidor Postgres | postgres | No |
POSTGRES_DB | La base de datos del servidor Postgres | postgres | No |
Remnawave usa una URL de PostgreSQL para conectarse a la base de datos.
postgresql://{user}:{password}@{host}:{port}/{database}
DATABASE_URL="postgresql://postgres:postgres@remnawave-db:5432/postgres"
Ejemplo
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=postgres
DATABASE_URL="postgresql://postgres:postgres@remnawave-db:5432/postgres"
Claves secretas
Se recomienda usar un generador de cadenas aleatorias para crear secretos con una longitud mínima de 64 caracteres.
No use las credenciales predeterminadas en producción. ¡Asegúrese de generar secretos fuertes!
openssl rand -hex 64
| Variable | Descripción | Predeterminado | Requerido |
|---|---|---|---|
JWT_AUTH_SECRET | La clave secreta para el JWT de autenticación | change_me | Sí |
JWT_API_TOKENS_SECRET | La clave secreta para el JWT de tokens de API | change_me | Sí |
Ejemplo
JWT_AUTH_SECRET=strong_secret_key
JWT_API_TOKENS_SECRET=strong_secret_key
Notificaciones de Telegram
Cada variable de notificación usa el formato unificado: chat_id:thread_id, donde thread_id es opcional.
| Variable | Descripción | Predeterminado | Valores posibles |
|---|---|---|---|
IS_TELEGRAM_NOTIFICATIONS_ENABLED | Deshabilitar/Habilitar notificaciones de Telegram | false | true, false |
TELEGRAM_BOT_TOKEN | El token para el bot de Telegram | ||
TELEGRAM_BOT_API_ROOT | URL raíz personalizada de la API del bot de Telegram (opcional) | https://api.telegram.org | |
TELEGRAM_BOT_PROXY | Proxy para el bot de Telegram (opcional) | protocol://user:password@host:port | |
TELEGRAM_NOTIFY_USERS | Notificaciones sobre eventos de usuarios | chat_id o chat_id:thread_id | |
TELEGRAM_NOTIFY_NODES | Notificaciones sobre eventos de nodos | chat_id o chat_id:thread_id | |
TELEGRAM_NOTIFY_CRM | Notificaciones sobre eventos de CRM | chat_id o chat_id:thread_id | |
TELEGRAM_NOTIFY_SERVICE | Notificaciones sobre eventos de servicio | chat_id o chat_id:thread_id | |
TELEGRAM_NOTIFY_TBLOCKER | Notificaciones sobre eventos de Torrent Blocker | chat_id o chat_id:thread_id |
El ID de chat de grupo de Telegram siempre comienza con -100.
Ejemplo
# Deshabilitar/Habilitar notificaciones de Telegram
IS_TELEGRAM_NOTIFICATIONS_ENABLED=false
# Token del bot de Telegram
TELEGRAM_BOT_TOKEN=change_me
# Opcional: proxy para el bot de Telegram
# TELEGRAM_BOT_PROXY=socks5://user:password@host:port
# Notificaciones (formato: chat_id o chat_id:thread_id)
TELEGRAM_NOTIFY_USERS=change_me
TELEGRAM_NOTIFY_NODES=change_me
TELEGRAM_NOTIFY_CRM=change_me
TELEGRAM_NOTIFY_SERVICE=change_me
TELEGRAM_NOTIFY_TBLOCKER=change_me
Dominios
| Variable | Descripción | Predeterminado | Requerido |
|---|---|---|---|
FRONT_END_DOMAIN | El dominio del Panel Remnawave. Usado para configurar cabeceras CORS. | * | Sí |
| Variable | Descripción | Predeterminado | Requerido |
|---|---|---|---|
SUB_PUBLIC_DOMAIN | El dominio y ruta de la URL de suscripción pública | example.com/api/sub | Sí |
| Variable | Descripción | Predeterminado | Requerido |
|---|---|---|---|
PANEL_DOMAIN | Dominio del panel para generar enlaces directos (p. ej. en notificaciones de Telegram con botones inline) | No |
SUB_PUBLIC_DOMAIN se usa para establecer la URL de suscripción pública en las respuestas RestAPI/UI en el panel de control.
Si lo usa con el panel, simplemente configúrelo como yourpanel.com/api/sub
Ejemplo
FRONT_END_DOMAIN=yourpanel.com
SUB_PUBLIC_DOMAIN=yourpanel.com/api/sub
PANEL_DOMAIN=yourpanel.com
Documentación
| Variable | Descripción | Predeterminado | Valores posibles |
|---|---|---|---|
IS_DOCS_ENABLED | Deshabilitar/Habilitar documentación | false | true, false |
IS_DOCS_ENABLED se usa para deshabilitar/habilitar la documentación.
Puede usar la página API Keys en el panel de administración (cuando IS_DOCS_ENABLED está configurado en true) para un enlace rápido a la documentación.
| Variable | Descripción | Predeterminado |
|---|---|---|
SWAGGER_PATH | La ruta a la interfaz de Swagger | /docs |
SCALAR_PATH | La ruta a la interfaz de Scalar | /scalar |
Ejemplo
IS_DOCS_ENABLED=true
SWAGGER_PATH=/docs
SCALAR_PATH=/scalar
Métricas de Prometheus
Puede generar una contraseña aleatoria para las métricas usando el siguiente comando:
openssl rand -hex 64
| Variable | Descripción | Predeterminado |
|---|---|---|
METRICS_USER | El usuario para las métricas | admin |
METRICS_PASS | La contraseña para las métricas | change_me |
Ejemplo
METRICS_USER=admin
METRICS_PASS=change_me
Configuración de Prometheus de muestra:
global:
# scrape_interval: 15s
scrape_timeout: 10s
evaluation_interval: 15s
scrape_configs:
- job_name: 'remnawave'
scheme: http
metrics_path: /metrics
static_configs:
- targets: ['remnawave:3001']
scrape_interval: 30s
basic_auth:
username: admin
password: change_me
Puede usar el panel de Grafana prediseñado para visualizar las métricas recopiladas: Remnawave Panel Dashboard
Muestra de métricas de Prometheus
# HELP remnawave_node_online_users Number of online users on a node
# TYPE remnawave_node_online_users gauge
remnawave_node_online_users{node_uuid="d86d8c63-944c-4398-9cf4-c3882a54a5d5",app="remnawave"} 0
Webhook
| Variable | Descripción | Predeterminado | Valores posibles |
|---|---|---|---|
WEBHOOK_ENABLED | Habilitar/Deshabilitar notificaciones webhook | false | true, false |
WEBHOOK_URL | La URL del webhook, puede ser http:// o https:// | ||
WEBHOOK_SECRET_HEADER | Clave para la firma, al menos 32 caracteres. Solo se permiten a-z, 0-9, A-Z. |
Puede generar una contraseña aleatoria para el secreto del webhook usando el siguiente comando:
openssl rand -hex 64
Ejemplo
WEBHOOK_ENABLED=true
WEBHOOK_URL=https://your-server.com/webhook-path
WEBHOOK_SECRET_HEADER=strong_secret_key
Notificaciones de uso de ancho de banda
| Variable | Descripción | Predeterminado | Valores posibles |
|---|---|---|---|
BANDWIDTH_USAGE_NOTIFICATIONS_ENABLED | Habilitar/Deshabilitar notificaciones de uso de ancho de banda | false | true, false |
BANDWIDTH_USAGE_NOTIFICATIONS_THRESHOLD | El umbral para notificaciones de uso de ancho de banda. Solo en orden ASC (ejemplo: [60, 80]), debe ser un array válido de enteros (min: 25, max: 95). No más de 5 valores. |
Ejemplo
BANDWIDTH_USAGE_NOTIFICATIONS_ENABLED=true
BANDWIDTH_USAGE_NOTIFICATIONS_THRESHOLD=[60, 80]
Notificaciones de usuarios no conectados
| Variable | Descripción | Predeterminado | Valores posibles |
|---|---|---|---|
NOT_CONNECTED_USERS_NOTIFICATIONS_ENABLED | Habilitar/Deshabilitar notificaciones de usuarios no conectados | false | true, false |
NOT_CONNECTED_USERS_NOTIFICATIONS_AFTER_HOURS | Las horas después de las cuales se envían notificaciones para usuarios que no se han conectado. Solo en orden ASC (ejemplo: [6, 12, 24]), debe ser un array válido de enteros (min: 1, max: 168). No más de 3 valores. |
Ejemplo
### Notificación de usuarios no conectados (webhook, telegram)
NOT_CONNECTED_USERS_NOTIFICATIONS_ENABLED=false
# Solo en orden ASC (ejemplo: [6, 12, 24]), debe ser un array válido de enteros (min: 1, max: 168). No más de 3 valores.
# Cada valor representa HORAS transcurridas desde la creación del usuario (user.createdAt)
NOT_CONNECTED_USERS_NOTIFICATIONS_AFTER_HOURS=[6, 24, 48]
Miscelánea
| Variable | Descripción | Predeterminado | Valores posibles |
|---|---|---|---|
SHORT_UUID_LENGTH | La longitud del UUID corto generado (suscripción). Longitud mín. 16 y máx. 64 | 16 | |
IS_HTTP_LOGGING_ENABLED | Habilitar/Deshabilitar registro HTTP | false | true, false |
ENABLE_DEBUG_LOGS | Habilitar/Deshabilitar registros de depuración | false | true, false |
JWT_AUTH_LIFETIME | La duración del JWT de autenticación en horas. Valores posibles de 12 a 168. | 12 | |
SERVICE_CLEAN_USAGE_HISTORY | Habilitar/Deshabilitar limpieza del historial de uso | false | true, false |
SERVICE_DISABLE_USER_USAGE_RECORDS | Deshabilitar el registro de datos de uso del usuario | false | true, false |
USER_USAGE_IGNORE_BELOW_BYTES | Ignorar el uso del usuario por debajo de este umbral (en bytes, máx 1048576) | 0 |
Ejemplo
SHORT_UUID_LENGTH=16
IS_HTTP_LOGGING_ENABLED=true
ENABLE_DEBUG_LOGS=false
JWT_AUTH_LIFETIME=12
SERVICE_CLEAN_USAGE_HISTORY=false
SERVICE_DISABLE_USER_USAGE_RECORDS=false
USER_USAGE_IGNORE_BELOW_BYTES=0