Saltar al contenido principal

Auto-alojamiento con Docker

Ejecuta tu propia instancia privada de B1 Admin, el portal de miembros B1, la API, y una base de datos MySQL en cualquier máquina con Docker — un servidor casero, un VPS de $5, o una caja on-prem. Un docker compose up construye e inicia todo. Si prefieres no gestionar un servidor en absoluto, consulta Auto-alojamiento en Railway para la alternativa gestionada.

Inicio Rápido

Qué necesitas

  • Docker Engine con Compose v2 (incluido en Docker Desktop)
  • ~4 GB de RAM disponibles durante la compilación inicial (las aplicaciones web se construyen desde el código fuente)
  • Git, o simplemente el archivo docker-compose.yml crudo
git clone https://github.com/ChurchApps/B1Admin.git
cd B1Admin
docker compose up -d

La primera ejecución tarda 10–20 minutos: construye B1 Admin desde tu clon e construye la API y B1 App directamente desde sus repositorios de GitHub. Los inicios posteriores son segundos.

Cuando los cuatro servicios estén activados:

  1. Abre http://localhost:3101 (B1 Admin).
  2. Haz clic en Registrar y crea tu cuenta. La primera cuenta es automáticamente un administrador del servidor.
  3. Sigue las indicaciones en la aplicación para crear tu primera iglesia.

Los esquemas de la base de datos se crean automáticamente por la migración de inicio del contenedor de API — no se requiere SQL manual.

ServicioURL
B1 Admin (personal/admin)http://localhost:3101
B1 App (portal de miembros / sitio web)http://localhost:3000
APIhttp://localhost:8084
MySQLsolo interno (mysql:3306 en la red de composición)

Configuración

Todos los ajustes viven en un archivo .env junto a docker-compose.yml. Cada variable tiene un default funcional para localhost, así que el archivo es opcional hasta que personalices.

# .env — todo es opcional; mostrado con defaults
MYSQL_ROOT_PASSWORD=churchapps
JWT_SECRET=please-change-this-jwt-secret
ENCRYPTION_KEY=PleaseChangeThisDockerDefaultKey # exactamente 32 caracteres

# URLs públicas (cambiar cuando expongas más allá de localhost)
API_URL=http://localhost:8084
B1ADMIN_URL=http://localhost:3101
B1APP_URL=http://localhost:3000
SOCKET_URL=ws://localhost:8084

# Correo — consulta la sección Email de la guía Railway para walkthroughs de proveedores
MAIL_SYSTEM=
SMTP_HOST=
SMTP_USER=
SMTP_PASS=
SMTP_SECURE=false
SUPPORT_EMAIL=noreply@yourchurch.org

Antes de uso real, cambia MYSQL_ROOT_PASSWORD, JWT_SECRET, y ENCRYPTION_KEY (cualquier cadena de 32 caracteres).

aviso

Los valores *_URL están horneados en las aplicaciones web en tiempo de compilación (comportamiento estándar de Vite/Next.js). Cambiarlos en .env requiere una recompilación, no solo un reinicio:

docker compose up -d --build

Cambiar la contraseña de MySQL después del primer lanzamiento requiere actualizar la contraseña dentro de MySQL también — el volumen mantiene las credenciales antiguas.

Exponerlo a Internet

Pon cualquier proxy inverso delante y dale a cada servicio un nombre de host. Con Caddy es esto:

admin.yourchurch.org { reverse_proxy localhost:3101 }
app.yourchurch.org { reverse_proxy localhost:3000 }
api.yourchurch.org { reverse_proxy localhost:8084 }

Luego establece las URLs en .env y recompila:

API_URL=https://api.yourchurch.org
B1ADMIN_URL=https://admin.yourchurch.org
B1APP_URL=https://app.yourchurch.org
SOCKET_URL=wss://api.yourchurch.org
docker compose up -d --build

El WebSocket usado para chat y notificaciones en vivo comparte el puerto de la API, así que SOCKET_URL es simplemente la URL de la API con wss://.

Correo, Donaciones, Multi-Sitio, e Integraciones

Estos funcionan idénticamente a la implementación de Railway — las mismas variables de entorno, establecidas en tu archivo .env en lugar del panel de Railway (el archivo de composición las pasa a través de la API):

  • Correo / SMTP — altamente recomendado; sin él los miembros no pueden restablecer contraseñas
  • Multi-sitio — iglesias ilimitadas por instancia, gestionadas en la interfaz de admin
  • Donaciones en línea — configuradas por iglesia en la interfaz de admin, no vía variables de entorno
  • Integraciones opcionalesOPENAI_API_KEY, YOUTUBE_API_KEY, PEXELS_KEY, VIMEO_TOKEN, API_BIBLE_KEY, WEB_PUSH_PUBLIC_KEY/WEB_PUSH_PRIVATE_KEY, GOOGLE_RECAPTCHA_SECRET_KEY

Datos, Copias de seguridad, y Almacenamiento de archivos

Dos volúmenes de Docker nombrados mantienen todo el estado:

VolumenContenidos
mysql-dataTodos los esquemas de base de datos
api-contentArchivos subidos — fotos, documentos, imágenes del sitio web (montados en /app/content)

Haz una copia de seguridad de la base de datos con una línea (prográmalo con cron):

docker compose exec mysql mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" --all-databases > backup-$(date +%F).sql

Haz una copia de seguridad de los archivos subidos copiando el volumen:

docker run --rm -v b1admin_api-content:/data -v "$PWD":/backup alpine tar czf /backup/content-$(date +%F).tgz -C /data .

Para bibliotecas de medios grandes puedes cambiar el almacenamiento de archivos a S3 en lugar del volumen local — establece FILE_STORE=S3 más las variables AWS_* descritas en la sección File Storage de la guía Railway.

Actualización

La API y B1 App se construyen desde la rama main de sus repositorios de GitHub; B1 Admin se construye desde tu clon local.

git pull                              # actualizar B1 Admin
docker compose build --pull # recompilar todas las imágenes contra main más reciente
docker compose up -d

Las migraciones de la base de datos se ejecutan automáticamente cuando el contenedor de API se inicia.

Para fijar versiones en lugar de rastrear main, apunta los contextos de compilación a una etiqueta en .env:

API_CONTEXT=https://github.com/ChurchApps/Api.git#v1.2.3
B1APP_CONTEXT=https://github.com/ChurchApps/B1App.git#v1.2.3

Los desarrolladores pueden apuntar las mismas variables a checkouts locales (p. ej. API_CONTEXT=../Api).

Solución de problemas

SíntomaCausa probableSolución
El contenedor api se reinicia en un bucleMySQL no listo o fallo de migracióndocker compose logs api — la migración imprime qué módulo falló
El inicio de sesión redirige a api.churchapps.orgAplicación web construida sin los argumentos de etapa customRecompila: docker compose build --no-cache b1admin b1app
Cambié una URL en .env pero nada sucedióLas URLs están horneadas en tiempo de compilacióndocker compose up -d --build
"Revisa tu correo" pero no llega ningún correoMAIL_SYSTEM=SMTP con credenciales malasArregla las credenciales, o desactiva MAIL_SYSTEM para desactivar el correo
Chat / características en vivo silenciosasSOCKET_URL inalcanzable desde el navegadorDebe ser wss:// detrás de HTTPS y proxied al puerto 8084
La compilación muere en un VPS pequeñoSin memoria durante next buildAgrega swap, o compila en otra máquina y docker save/load

¿Aún atascado? Abre un issue en github.com/ChurchApps/ChurchAppsSupport/issues con la salida de docker compose logs.

Artículos relacionados