Saltar al contenido principal

Cómo autoalojar Proset Community Edition

Proset Community Edition (CE) es la versión de código abierto de Proset. Se ejecuta en tu propio servidor: tu proyecto de Firebase, tu clave de proveedor de IA y tus grabaciones. Proset.ai alojado es la alternativa administrada si prefieres no instalar nada.

Esta guía te lleva desde un servidor Linux vacío hasta una instancia de CE funcionando detrás de HTTPS automático, con respaldos y una ruta de actualización repetible. Se asume que te sientes cómodo con la terminal y la administración básica de servidores.

La CE es "trae todo lo tuyo": tu proyecto de Firebase, tu clave de proveedor de IA y tu proveedor de correo. La CE no tiene telemetría ni código que llame a casa — tus datos permanecen en tu servidor.

Antes de empezar

  • Un servidor Linux (VPS) donde tengas acceso root o sudo. Con unos 1 GB de RAM y unos cuantos GB de disco libre es suficiente para empezar.
  • Un dominio cuyo registro DNS tipo A apunte a la dirección IP pública de tu servidor.
  • Docker con el plugin de Compose instalado (Docker Engine 24+ y Compose v2).
  • Git instalado.
  • Un proyecto de Firebase en el plan gratuito (Spark).
  • Una clave de API de un proveedor de IA: OpenAI, Groq, DeepSeek, Mistral o Fireworks.

Crea un proyecto de Firebase

  1. Abre la consola de Firebase, crea un proyecto y ponle un nombre que reconozcas, por ejemplo proset-ce.
  2. En Compilación → Authentication → Método de acceso, habilita Correo electrónico/contraseña.
  3. En Compilación → Firestore Database, crea la base de datos y elige modo de producción.
  4. Descarga la cuenta de servicio: abre Configuración del proyecto → Cuentas de servicio, selecciona Generar nueva clave privada y guarda el archivo JSON como firebase-service-account.json dentro del directorio de la CE que clonarás en la siguiente sección.
  5. Registra una app web: abre Configuración del proyecto → Tus apps → Agregar app → Web y copia los seis valores de cliente que muestra (clave de API, dominio de autenticación, ID del proyecto, bucket de almacenamiento, ID del remitente de mensajería e ID de la app).
  6. Despliega las reglas de Firestore que vienen con el repositorio de la CE. Estas reglas niegan todo acceso directo de clientes — en Proset CE, solo el servidor habla con Firestore mediante el SDK de Admin, que omite las reglas:
npm install -g firebase-tools
firebase login
# ejecútalo desde el directorio de la CE (clonado en la siguiente sección)
firebase deploy --only firestore:rules --project <tu-id-de-proyecto>

Configura el archivo .env

Clona el repositorio de la CE y crea tu archivo .env:

git clone https://github.com/Schoedel-Design-AI/proset-community.git
cd proset-community
cp .env.example .env
openssl rand -hex 32

El último comando genera un secreto aleatorio. Edita .env y completa:

  • BETTER_AUTH_SECRET — pega el valor aleatorio de openssl rand -hex 32 (debe tener al menos 32 caracteres y no ser un valor de ejemplo).
  • PUBLIC_APP_URL — tu URL pública, por ejemplo https://voice.example.com.
  • Al menos una clave de proveedor de IA: OPENAI_API_KEY, GROQ_API_KEY, DEEPSEEK_API_KEY, MISTRAL_API_KEY o AI_FIREWORKS_API_KEY. La app envía la transcripción al proveedor que tenga credenciales.
  • Firebase — FIREBASE_PROJECT_ID, GOOGLE_APPLICATION_CREDENTIALS=./firebase-service-account.json y los seis valores de cliente AIFORMS_PUBLIC_FIREBASE_* de la sección anterior.
  • ADMIN_EMAILS — opcional, correos separados por comas que se convierten en administradores al iniciar sesión. Déjalo vacío para una instancia de un solo usuario.
  • SENDGRID_API_KEY — opcional, habilita la verificación de correo y el restablecimiento de contraseña. Sin ella, las funciones de correo quedan deshabilitadas.

Comprueba tu configuración antes de arrancar:

./scripts/validate-env.sh

Nunca subas .env ni firebase-service-account.json al control de versiones — el .gitignore del repositorio ya los excluye.

Arranca con Docker

Desde el directorio de la CE:

docker compose up -d --build
docker compose ps

Cuando el contenedor aparezca en ejecución, abre http://localhost:5000 en el servidor, o http://<la-ip-de-tu-servidor>:5000 desde tu propia computadora, y crea tu cuenta con tu correo y una contraseña. Si configuraste ADMIN_EMAILS, esa cuenta se convierte en administradora automáticamente.

Agrega HTTPS con Caddy

Caddy obtiene y renueva los certificados TLS automáticamente, así no tienes que administrar certificados.

  1. Crea un Caddyfile con tu dominio:
voice.example.com {
reverse_proxy localhost:5000
}
  1. Ejecuta Caddy en Docker, abriendo los puertos 80 y 443:
docker run -d --name caddy \
-p 80:80 -p 443:443 \
-v "$PWD/Caddyfile:/etc/caddy/Caddyfile:ro" \
-v caddy_data:/data -v caddy_config:/config \
caddy:2
  1. En .env, pon PUBLIC_APP_URL=https://voice.example.com y AIFORMS_PUBLIC_DOMAIN=voice.example.com, y vuelve a compilar:
docker compose up -d --build

Abre https://voice.example.com y confirma que el sitio carga por HTTPS. Si necesitas dominios adicionales o un subdominio para la API, apúntalos al mismo localhost:5000.

Respalda tu instancia

Respalda tres cosas: la base de datos, las grabaciones y los secretos. Haz las tres con la misma frecuencia.

Base de datos (Firestore). Exporta la base de datos de Firestore a un bucket de Cloud Storage que sea tuyo:

gcloud firestore export gs://<tu-bucket>/proset-backups/$(date +%F)

Si prefieres la consola, Firestore → Respaldos ofrece respaldos administrados donde tu plan los permita.

Grabaciones y archivos subidos. Las grabaciones se guardan en el volumen de Docker proset-data (montado en /app/.local/object-storage). Archívalo en un archivo que puedas mover fuera del servidor:

docker run --rm -v proset-data:/data -v "$PWD":/backup alpine \
tar czf /backup/proset-data-$(date +%F).tar.gz -C /data .

Secretos. Guarda una copia de .env y de firebase-service-account.json en un lugar cifrado, como un administrador de contraseñas o una bóveda de secretos aparte. Sin ellos no puedes restaurar la instancia.

Haz respaldos al menos cada semana, y a diario si grabas con frecuencia. Restaura periódicamente una copia en una máquina de prueba para asegurarte de que el respaldo funciona. El archivo .env y la cuenta de servicio son necesarios para restaurar; la exportación de Firestore y el archivo de grabaciones contienen los datos.

Actualiza la edición comunitaria

Revisa el registro de cambios del repositorio por si hay cambios que rompan algo, y luego:

git pull
docker compose up -d --build

Haz un respaldo primero y, después de actualizar, verifica la versión que esperabas y que el inicio de sesión y la transcripción sigan funcionando.

Solución de problemas

  • El puerto 5000 ya está en uso. Pon otro puerto en .env (PORT=5001) y ejecuta docker compose up -d de nuevo, o encuentra el proceso que lo ocupa con ss -ltnp | grep 5000 y detenlo.
  • Errores de permisos de Firestore. La CE incluye reglas de Firestore que niegan todo; solo el servidor debe acceder a Firestore. Si los clientes reportan errores de permisos, despliega el firestore.rules del repositorio con firebase deploy --only firestore:rules --project <tu-id-de-proyecto>.
  • El servidor imprime "Firebase credentials are not set. Running in DEVELOPMENT mode". Verifica que NODE_ENV=production esté en .env, que FIREBASE_PROJECT_ID coincida con tu proyecto y que GOOGLE_APPLICATION_CREDENTIALS apunte a un archivo JSON de cuenta de servicio existente. En producción, el servidor se niega a arrancar sin Firebase configurado.
  • El contenedor no arranca o se reinicia. Revisa los registros: docker compose logs proset. Las dos causas más comunes son un BETTER_AUTH_SECRET faltante o de ejemplo (regenera con openssl rand -hex 32) y un valor mal escrito en .env.
  • La transcripción nunca termina. Ejecuta ./scripts/validate-env.sh y confirma que hay al menos una clave de proveedor de IA configurada y válida.

Migra a Proset.ai alojado

Proset.ai alojado y la CE son cuentas separadas — migrar es una exportación e importación manual, no una sincronización.

  1. En la CE, exporta las grabaciones y los resultados que quieras conservar. Usa la función Exporta un resultado de la app (PDF, DOCX, CSV o Markdown) o copia las transcripciones que necesites.
  2. Crea una cuenta en proset.ai y vuelve a importar o recrear el contenido que exportaste.
  3. Conserva tus respaldos de la CE hasta que verifiques que todo lo que necesitas existe en tu cuenta de Proset.ai.
  4. Cuando estés conforme, detén el contenedor de la CE con docker compose down (tus datos permanecen en el servidor) o elimina el servidor una vez que los respaldos estén guardados en un lugar seguro.

Comprueba tu instalación

Tu instalación está completa cuando todo lo siguiente se cumple:

  • https://voice.example.com carga por HTTPS sin advertencia de certificado.
  • Puedes iniciar sesión con la cuenta que creaste.
  • Una grabación de prueba produce una transcripción y puedes convertirla en un correo, una tarea o un resumen.
  • Has hecho un respaldo completo (exportación de Firestore, archivo de grabaciones y secretos) y lo has restaurado en una máquina de prueba al menos una vez.
  • Sabes cómo actualizar la CE (git pull y docker compose up -d --build) y lo has hecho al menos una vez.