🔧 TeraSync Setup

Configuración inicial — genera config.php, crea la DB, tablas y SuperAdmin.
Los campos opcionales se pueden dejar vacíos y configurar después.

PHP 8.2.31 · Extensiones ✓ · Redis ✓

Aplicación

Dominio público donde va a correr TeraSync. Se usa para generar URLs de callbacks OAuth, webhooks y emails.

FQDN sin protocolo. Ej: sync.miempresa.com — Se usa para TS_BASE_URL, OAuth redirect URIs y links en emails.
Identificador PHP (date_default_timezone_set). Lista completa: php.net/manual/en/timezones.php. Afecta cron scheduling y timestamps en el ledger.

Base de Datos (MySQL/MariaDB)

Conexión MySQL. El setup crea la DB automáticamente si no existe (el usuario necesita permisos CREATE DATABASE). En cPanel: Bases de datos MySQL → crear DB y usuario.

Hostname del servidor MySQL. En hosting compartido suele ser localhost. En Docker/remoto usar IP o hostname.
Se crea automáticamente con CREATE DATABASE IF NOT EXISTS. En cPanel el prefijo del user se agrega solo (ej: user_terasync).
Necesita permisos: CREATE, ALTER, DROP, SELECT, INSERT, UPDATE, DELETE, INDEX. En producción NO usar root.
Contraseña del usuario MySQL. En cPanel se genera desde Bases de datos MySQL → usuario.

Redis (Opcional)

Cache de sesiones y config + rate limiting. Si Redis no está disponible, TeraSync funciona igual usando sesiones PHP nativas y sin rate limiting. Verificar: redis-cli ping → PONG.

IP o hostname del servidor Redis. 127.0.0.1 si está en el mismo server. En Docker usar el nombre del container.
Puerto estándar: 6379. Verificar con: redis-cli -h HOST -p PORT ping

SuperAdmin

Cuenta del administrador global (role=superadmin). Tiene acceso a todos los tenants, panel admin y gestión de usuarios. Se crea una sola vez.

Nombre visible en el panel. Se puede cambiar después desde Perfil.
Email para login. También recibe notificaciones del sistema. Debe ser un email válido y accesible.
Mínimo 8 caracteres. Se hashea con PASSWORD_BCRYPT. No se almacena en texto plano.

Email

Configuración de emails transaccionales. Usa la función mail() de PHP (requiere sendmail/postfix configurado en el server o un relay SMTP).

Si está ON: nuevos usuarios reciben un email con link de verificación, la cuenta queda en status pending_verification hasta confirmar. Si está OFF: las cuentas se activan inmediatamente.

Cloudflare Turnstile (Captcha)

Protección anti-bot en login y registro. Obtener keys en: dash.cloudflare.com → Turnstile → Add Site. Elegir tipo "Managed". Si no se configura, los forms funcionan sin captcha.

Activa el widget de Turnstile en los formularios de login, registro y forgot-password. Requiere Site Key + Secret Key.
Key pública (se expone en el frontend). Obtener en dash.cloudflare.com → Turnstile → tu sitio → Site Key.
Key privada (solo backend). Se usa para verificar el token server-side contra la API de Cloudflare.

MercadoLibre

Credenciales globales de la app ML (compartidas por todos los tenants). Cada tenant autoriza su propia cuenta ML vía OAuth. Crear app en: developers.mercadolibre.com.ar → Mis Aplicaciones.

Número de aplicación (ej: 1234567890). Se encuentra en developers.mercadolibre.com.ar → tu app → Datos básicos.
Secret de la aplicación. Mismo panel que el App ID. Se usa para el flujo OAuth PKCE (code exchange).

OAuth — Social Login (Opcional)

Login con Google/Facebook. Si no se habilita, los botones de social login no aparecen. Los usuarios pueden registrarse normalmente con email.

Activa la opción de login/registro con Google y/o Facebook. Requiere configurar al menos una plataforma.

Cron (Scheduling)

TeraSync usa un cron entry point único: * * * * * php /path/to/cron.php — El script evalúa internamente qué tareas ejecutar según los intervalos configurados acá.

Cada cuántos minutos procesar la cola de sincronización de stock. Más bajo = sincronización más rápida pero más carga. Recomendado: 1-5 min.
Catch-up de órdenes. Las órdenes llegan por webhook, esto es un fallback para las que se pierden. Solo se ejecuta si se encola manualmente.
Hora local (HH:MM) para la reconciliación diaria. Compara el ledger interno contra cada canal y encola correcciones. Elegir horario de baja actividad.

Debug

Modo debug para desarrollo. En producción debe estar desactivado para no exponer errores al usuario.

ON: display_errors=1, error_reporting=E_ALL. OFF: errores solo en error.log. ⚠️ Desactivar en producción.