Por qué autoalojar un creador de CV
Los servicios SaaS de CV monetizan su historial profesional, limitan las plantillas o cobran la descarga del PDF. Autoalojar Reactive Resume invierte el modelo: sus CV, sus fotos y sus exportaciones permanecen en un volumen Docker de su VPS, exportables en cualquier momento desde la interfaz o la REST API, y compartibles bajo su propio dominio. Sin límite de plantillas, sin marca de agua, sin dependencia de una suscripción.
El autoalojamiento también le da control total sobre los datos sensibles que contiene un CV — datos de contacto personales, historial laboral, competencias. Estos datos nunca transitan ni se almacenan en un servicio de terceros.
Lo que obtiene con un Reactive Resume autoalojado
- Editor visual de arrastrar y soltar en el navegador — sin aplicación que instalar, funciona en cualquier dispositivo.
- Biblioteca de plantillas profesionales compatibles con ATS — varios diseños para distintos sectores y niveles de experiencia.
- Exportación PDF íntegramente en el navegador desde la v5.1.0 — se acabaron Chrome, Puppeteer o Browserless del lado del servidor.
- URL pública del CV — comparta su perfil en un enlace legible que se actualiza en tiempo real.
- Varios CV por cuenta — decline versiones por puesto o por idioma sin duplicar el trabajo.
- REST API — cree y exporte CV mediante programación para integrarlos con herramientas de recursos humanos.
- Almacenamiento local — las subidas (fotos, imágenes de portafolio) se escriben en un volumen Docker, sin necesidad de S3.
- Autenticación OAuth opcional — conecte una cuenta de GitHub o Google añadiendo las claves de API correspondientes a la configuración.
Requisitos
Un VPS ServOrbit con Ubuntu 24.04 y al menos 1 GB de RAM. La aplicación Node.js consume unos 300 MB en reposo y PostgreSQL 16 usa entre 100 y 200 MB adicionales — un VPS de 1 GB basta para un uso personal o un equipo pequeño.
Docker y Docker Compose se aprovisionan automáticamente mediante AWX durante el despliegue. Se requiere un nombre de dominio: Reactive Resume fija su URL de autenticación (APP_URL) desde el primer arranque y no puede funcionar detrás de una simple dirección IP.
Si tiene previsto activar la verificación de cuenta por correo electrónico, se recomienda un servidor SMTP saliente. Sin SMTP, el enlace de verificación aparece en los registros de Docker — práctico para uso en solitario, menos adecuado si abre el acceso a otros usuarios.
Desplegar Reactive Resume en su VPS
Elegir el dominio definitivo antes de desplegar
Reactive Resume inscribe
APP_URLen los tokens de autenticación y en los callbacks OAuth desde el primer arranque: cambiar el dominio después rompe todas las sesiones y obliga a eliminar el volumen PostgreSQL. Cree el registro DNS de tipo A — por ejemplocv.su-dominio.com— y espere a la propagación antes de lanzar el despliegue.Despliegue en un clic desde el marketplace de ServOrbit
Abra su panel de control ServOrbit, vaya a Marketplace → Colaboración y productividad → Reactive Resume, introduzca su dominio y haga clic en Desplegar. AWX instala Docker, genera un secreto de autenticación aleatorio, configura nginx con TLS de Let's Encrypt y arranca los dos contenedores (app + PostgreSQL) en menos de dos minutos.
Crear su cuenta y verificar su dirección
Navegue hasta
https://cv.su-dominio.comy haga clic en Sign Up para crear su cuenta con correo electrónico y contraseña. Si no ha configurado un servidor SMTP, el enlace de verificación aparece en los registros de Docker:docker compose logs reactive-resume | grep verify. Haga clic en ese enlace para activar su cuenta.Crear su primer CV
Haga clic en el botón + para crear un CV nuevo. Elija una plantilla de la biblioteca, rellene sus secciones (Resumen, Experiencia, Formación, Competencias) en el panel de la izquierda y visualice el resultado en tiempo real a la derecha. Haga clic en Descargar para exportar un PDF: la generación es íntegramente en el navegador, sin esperas.
Compartir su CV públicamente
En los ajustes del CV, active CV público. Reactive Resume genera una URL compartible —
https://cv.su-dominio.com/r/su-nombre— que sirve siempre la última versión de su documento. Comparta ese enlace en sus candidaturas en lugar de adjuntar un PDF estático que tendrá que reenviar en cada actualización.Configurar la autenticación OAuth (opcional)
Para permitir el inicio de sesión mediante GitHub o Google, añada las variables de entorno correspondientes a la configuración de su despliegue:
GITHUB_CLIENT_ID,GITHUB_CLIENT_SECRET,GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET. Reinicie luego los contenedores condocker compose restart. Los botones de inicio de sesión social aparecen automáticamente en la página de inicio de sesión en cuanto están presentes las variables.
El gran cambio de la v5.1.0: PDF sin servidor de impresión
Hasta la versión 5.0, Reactive Resume dependía de Browserless o de un Chromium headless para generar los PDF del lado del servidor. Eso suponía entre 700 MB y 1 GB de RAM adicionales y una dependencia que mantener. Desde la v5.1.0, la generación de PDF corre a cargo de @react-pdf/renderer, una biblioteca JavaScript que se ejecuta directamente en el navegador del usuario. El servidor solo ve una petición de guardado del documento: no se requiere ningún Chrome, ningún Puppeteer ni ningún servicio de impresión del lado de la infraestructura. Eso es lo que reduce la pila mínima a dos contenedores ligeros.
Mantenga segura su clave de autenticación
El despliegue de ServOrbit genera automáticamente un valor aleatorio para SECRET_KEY. No reutilice nunca un valor predecible ni lo comparta entre varias instancias. Si sospecha una vulneración, regenere esta clave y reinicie los contenedores: todas las sesiones activas quedarán invalidadas y los usuarios deberán volver a iniciar sesión — este es el comportamiento esperado.
Usar la REST API para automatizar sus exportaciones
Reactive Resume expone una REST API completa, accesible en /api/v3. Puede crear CV, actualizarlos y disparar exportaciones PDF mediante programación — útil para integrar la generación de CV en un flujo de trabajo de RRHH o en un pipeline de candidaturas automatizado.
Para autenticarse, obtenga un token JWT mediante POST /api/v3/auth/login con sus credenciales. Luego pase ese token en la cabecera Authorization: Bearer <token> de cada petición.
Ejemplo — listar sus CV:
curl -s -H "Authorization: Bearer <su-token>" \
https://cv.su-dominio.com/api/v3/resume | jq '.[].title'La documentación completa de la API está disponible en el repositorio oficial.
Copia de seguridad y portabilidad de los datos
Dos volúmenes Docker contienen la totalidad de la instancia: reactive_resume_db para la base de datos PostgreSQL (cuentas, CV, ajustes) y reactive_resume_data para los archivos subidos (fotos de perfil, imágenes de portafolio). Copia de seguridad mínima:
docker run --rm \
-v reactive_resume_db:/data \
-v $(pwd):/backup \
alpine tar czf /backup/db.tar.gz /dataPara una exportación SQL directa: docker exec db pg_dump -U postgres postgres > backup.sql
Restaure montando el volumen en un contenedor PostgreSQL virgen configurado con la misma URL pública. Programe estas copias de seguridad con un cron diario o utilice el servicio de instantáneas de volumen de su VPS para una cobertura automática.
Solución de errores frecuentes
APP_URL incorrecto tras un cambio de dominio. Síntoma: los callbacks OAuth fallan o el enlace de verificación apunta al dominio antiguo. Solución: actualice APP_URL en la configuración, elimine el volumen PostgreSQL (docker volume rm reactive_resume_db) y reinicie. Se perderán todos los datos — planifique este paso antes de crear cuentas en producción.
El contenedor de la app reinicia en bucle. Compruebe los registros con docker compose logs reactive-resume. El error más frecuente es una conexión PostgreSQL rechazada (Connection refused to db:5432): el contenedor de la app arranca antes de que PostgreSQL esté listo. Espere 30 segundos y ejecute docker compose up -d de nuevo.
PDF generado con maquetación incorrecta. El renderizado PDF se realiza en el navegador mediante @react-pdf/renderer y depende del motor de renderizado de su navegador. Si el resultado parece desajustado, pruebe con un navegador diferente (Chrome o Firefox reciente). Los navegadores antiguos o las extensiones que alteran las fuentes pueden afectar al renderizado.
Error secretOrPrivateKey must have a value al arrancar. La variable SECRET_KEY falta en la configuración. Añádala con un valor aleatorio de al menos 32 caracteres: openssl rand -hex 32 genera un valor adecuado.
La URL pública del CV devuelve 404. Compruebe que el CV esté marcado como público en sus ajustes. Si lo está, revise la configuración de nginx: el bloque location /r/ debe hacer proxy al frontend Next.js, no a la API.