Despliegue de la API¶
La imagen¶
tai-api init deja en la raíz del proyecto un dockerfile y un entrypoint.sh. Son tuyos: se
crean una vez.
docker build -t mi-api \
--build-arg MAIN_DATABASE_URL=... \
--build-arg SECRET_KEY=... \
--build-arg API_DOCS_PWD=... .
docker run -p 8000:80 mi-api
- Python 3.11 y Poetry, con las dependencias del
pyproject.tomldel proyecto. uvicorn <paquete>.__main__:appen el puertoPORT(80), un solo proceso —apicon el namespace por defecto;initescribe el que tenga el proyecto, también con--app-dir—. Detrás de un orquestador que escala por réplicas es lo adecuado; para varios procesos en una máquina, añade--workersen elentrypoint.sh.HEALTHCHECKcontra/health.- SSH en el 2222 para la consola de Azure App Service:
sshdsolo arranca siWEBSITES_ENABLE_APP_SERVICE_STORAGE(lo pone Azure) oAZURE_ENVvalentrue.
Los secretos como --build-arg quedan en la imagen
El dockerfile los declara como ARG y los copia a ENV para que la misma receta sirva en
local. En un despliegue real, mejor como variables del contenedor —la configuración de la
Web App, los secretos del orquestador— y no en el build: cualquiera con la imagen los lee con
docker inspect.
Las variables¶
Las imprescindibles, según la autenticación:
| Sin autenticación | Database | Keycloak | |
|---|---|---|---|
MAIN_DATABASE_URL |
✔ | ✔ | ✔ |
SECRET_KEY |
si hay columnas cifradas | ✔ | si hay columnas cifradas |
MAIN_KEYCLOAK_URL, KEYCLOAK_API_CLIENT_SECRET |
✔ | ||
PUBLIC_URL |
con la sesión con cookie | ||
API_DOCS_PWD |
✔ | ✔ | ✔ |
La lista completa, en Variables de entorno.
Detrás del frontend¶
Con el cliente TypeScript, el frontend sirve la API por un proxy /api:
el navegador ve un solo origen y la cookie de sesión funciona igual en Azure que on-premise. Ver
Despliegue del frontend.
La API no necesita saber nada del proxy salvo dos cosas: ROOT_PATH = "/api", el prefijo que el
proxy le quita, y ALLOWED_ORIGINS sin * si la sesión va en cookie. Ver
Configuración.
Antes de publicar¶
- [ ]
API_DOCS_PWDdefinida: sin ella,/docsse protege conadmin/admin. - [ ]
SECRET_KEYlarga y aleatoria, distinta en cada entorno. - [ ] Con Database, la contraseña del usuario
admincambiada (ADMIN_PWDal hacer el feed, oPOST /auth/me/password). - [ ] Con la sesión con cookie, la API servida por HTTPS: la cookie es
Securefuera delocalhost. - [ ]
tai-api rbac pushaplicado contra el backend de ese entorno.