Implementación de Rebase en Microsoft Azure
Microsoft Azure ofrece integraciones estrechas y cumplimiento empresarial. La arquitectura óptima para ejecutar Rebase en Azure implica el uso de Azure Database for PostgreSQL - Flexible Server para la capa de datos y Azure Container Apps para alojar el contenedor de backend.
Para cumplir con la normativa europea de datos y obtener tiempos de respuesta locales rápidos, aprovisione sus recursos en regiones como Europa Occidental (Ámsterdam), Europa del Norte (Irlanda) o Francia Central (París).
1. Aprovisionar Servidor Flexible de PostgreSQL
Sección titulada «1. Aprovisionar Servidor Flexible de PostgreSQL»- Desde el Portal de Azure, busque y seleccione Servidores de Azure Database for PostgreSQL.
- Haga clic en Crear y seleccione Servidor Flexible.
- Elija su Grupo de Recursos y establezca su Región de la UE preferida.
- Seleccione su tamaño de cómputo (por ejemplo, Propósito General o de Ráfaga
B2spara implementaciones más pequeñas). - Configure la pestaña de Autenticación con un nombre de usuario de Administrador y una contraseña segura.
- En Redes, asegúrese de que la opción “Permitir acceso público desde cualquier servicio de Azure dentro de Azure a este servidor” esté marcada para que su Container App pueda conectarse, o configure una VNet segura.
- Anote el nombre de su servidor y ensamble la URI de conexión:
postgresql://your_admin:YOUR_PASSWORD@your-server-name.postgres.database.azure.com:5432/postgres
2. Compilar y Enviar a Azure Container Registry (ACR)
Sección titulada «2. Compilar y Enviar a Azure Container Registry (ACR)»Azure Container Apps extraerá su imagen de Docker desde ACR.
- Cree un nuevo Registro de Contenedores en la región de la UE que haya elegido.
- Inicie sesión desde su CLI:
az acr login --name YourRegistryName
- Compile y envíe la imagen de Rebase desde su repositorio local:
Compile desde la raíz del proyecto — el Dockerfile del backend necesita todo el workspace como contexto de compilación (copiadocker build -t yourregistryname.azurecr.io/rebase-backend:latest -f backend/Dockerfile .docker push yourregistryname.azurecr.io/rebase-backend:latest
pnpm-workspace.yaml,backend/yconfig/), por lo que usar./backendcomo contexto falla.
3. Implementar Azure Container App
Sección titulada «3. Implementar Azure Container App»Azure Container Apps proporciona un entorno de contenedores sin servidor con entrada HTTPS integrada.
- Busque en el portal Container Apps y haga clic en Crear.
- Cree un nuevo Entorno de Container Apps en su región de la UE.
- En la pestaña Contenedor, apunte a su registro ACR y seleccione la imagen
rebase-backend:latest. - Configure las Variables de entorno:
| Nombre | Valor |
|---|---|
DATABASE_URL |
Su cadena de conexión de Azure Postgres |
JWT_SECRET |
Una cadena segura aleatoria de 32+ caracteres |
NODE_ENV |
production |
- En la pestaña Ingreso, habilite explícitamente el Ingreso.
- Establezca el Puerto de Destino en 3001.
- Complete la creación. ¡Azure aprovisionará automáticamente el contenedor y le proporcionará una URL de Aplicación asegurada con TLS!
4. Crear el Esquema de la Base de Datos
Sección titulada «4. Crear el Esquema de la Base de Datos»Al arrancar, Rebase crea automáticamente solo las tablas de autenticación. Las tablas de sus propias colecciones no se crean automáticamente. Debe aplicar el esquema una vez contra la base de datos de producción:
pnpm run db:pushSi omite este paso, la aplicación arranca con normalidad y el inicio de sesión funciona —esa es la trampa—, pero cada colección devuelve un error de «tabla inexistente» (missing table) en su primera consulta.
Ejecútelo desde un checkout del proyecto o desde CI con DATABASE_URL apuntando a la base de datos de producción, no dentro del contenedor: la imagen de producción se distribuye sin la CLI. Añada temporalmente una regla de firewall en su Servidor Flexible de PostgreSQL que permita su IP (o el acceso desde servicios de Azure) mientras ejecuta el comando.
Para migraciones versionadas, use pnpm run db:generate + pnpm run db:migrate en lugar de pnpm run db:push.
