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
- Abre la consola de Firebase, crea un proyecto y ponle un nombre que reconozcas, por ejemplo
proset-ce. - En Compilación → Authentication → Método de acceso, habilita Correo electrónico/contraseña.
- En Compilación → Firestore Database, crea la base de datos y elige modo de producción.
- 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.jsondentro del directorio de la CE que clonarás en la siguiente sección. - 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).
- 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 deopenssl rand -hex 32(debe tener al menos 32 caracteres y no ser un valor de ejemplo).PUBLIC_APP_URL— tu URL pública, por ejemplohttps://voice.example.com.- Al menos una clave de proveedor de IA:
OPENAI_API_KEY,GROQ_API_KEY,DEEPSEEK_API_KEY,MISTRAL_API_KEYoAI_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.jsony los seis valores de clienteAIFORMS_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.
- Crea un
Caddyfilecon tu dominio:
voice.example.com {
reverse_proxy localhost:5000
}
- 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
- En
.env, ponPUBLIC_APP_URL=https://voice.example.comyAIFORMS_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 ejecutadocker compose up -dde nuevo, o encuentra el proceso que lo ocupa conss -ltnp | grep 5000y 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.rulesdel repositorio confirebase 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=productionesté en.env, queFIREBASE_PROJECT_IDcoincida con tu proyecto y queGOOGLE_APPLICATION_CREDENTIALSapunte 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 unBETTER_AUTH_SECRETfaltante o de ejemplo (regenera conopenssl rand -hex 32) y un valor mal escrito en.env. - La transcripción nunca termina. Ejecuta
./scripts/validate-env.shy 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.
- 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.
- Crea una cuenta en proset.ai y vuelve a importar o recrear el contenido que exportaste.
- Conserva tus respaldos de la CE hasta que verifiques que todo lo que necesitas existe en tu cuenta de Proset.ai.
- 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.comcarga 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 pullydocker compose up -d --build) y lo has hecho al menos una vez.