Despliegue
Docker
El proyecto está diseñado para distribuirse como una imagen de Docker, de tal forma que se pueda desplegar en cualquier sistema preparado para la ejecución de contenedores.
La imagen de Docker estará disponible en:
registry.dekaside.com/nftaas/nftaas-backend
Backend
Para ejecutar la imagen de tal forma que sea corresponda con el servidor HTTP para
el API RESTful se tendría que especificar el comando /start. Por defecto, el servicio
se expone en el puerto 5000.
Un ejemplo de servicio sería:
services:
backend: &backend
image: registry.dekaside.com/nftaas/nftaas-backend:latest
command: /start
depends_on:
- redis
networks:
- nftaas
env_file:
- ./.env
deploy:
update_config:
order: start-first
failure_action: rollback
delay: 10s
rollback_config:
parallelism: 0
order: stop-first
restart_policy:
condition: any
delay: 5s
max_attempts: 3
window: 120s
healthcheck:
test: curl --fail http://localhost:5000/proxy-health || exit 1
interval: 60s
retries: 5
timeout: 10s
Las variables de entorno en este caso se definen en un fichero .env, siguiendo
la lista de variables disponibles que se detallan en la sección de configuración.
Es recomendable que por encima de este servicio se establezca un proxy, por ejemplo
nginx. Para simplificar este caso, se recomienda usar la imagen de Docker pública
dekalabs/nginx:latest
Un ejemplo de servicio podría ser:
backend-proxy:
image: dekalabs/nginx:latest
environment:
- NGINX_UPSTREAM_APP=app
- NGINX_UPSTREAM_SERVER=backend
- NGINX_UPSTREAM_PORT=5000
- NGINX_PORT=80
- NGINX_HOST=backend.nftaas.staging.dekaside.com
- NGINX_MAX_BODY_SIZE=20M
depends_on:
- backend
networks:
- traefik-public
- nftaas
deploy:
update_config:
order: start-first
failure_action: rollback
delay: 10s
rollback_config:
parallelism: 0
order: stop-first
restart_policy:
condition: any
delay: 5s
max_attempts: 3
window: 120s
labels:
- traefik.enable=true
- traefik.docker.network=traefik-public
- traefik.constraint-label=traefik-public
- traefik.http.routers.nftaas-backend-http.rule=Host(`backend.nftaas.staging.dekaside.com`)
- traefik.http.routers.nftaas-backend-http.entrypoints=http
- traefik.http.routers.nftaas-backend-http.middlewares=https-redirect
- traefik.http.routers.nftaas-backend-https.rule=Host(`backend.nftaas.staging.dekaside.com`)
- traefik.http.routers.nftaas-backend-https.entrypoints=https
- traefik.http.routers.nftaas-backend-https.tls=true
- traefik.http.routers.nftaas-backend-https.tls.certresolver=le
- traefik.http.services.nftaas-backend-https.loadbalancer.server.port=80
healthcheck:
test: curl --fail http://localhost/proxy-health || exit 1
interval: 60s
retries: 5
timeout: 10s
Note
Este ejemplo está extraído de una integración con Traefik, pero es completamente opcional y puede ser ignorada.
Worker asíncrono
El worker asíncrono basado en Celery puede ser ejecutado a partir de la misma imagen de
Docker que el backend. El comando para arrancar el worker es /start-celeryworker.
Un ejemplo de servicio, partiendo de la definición de backend hecha anteriormente,
sería:
celeryworker:
<<: *backend
command: /start-celeryworker
healthcheck:
test: /entrypoint celery -A nftaas.taskapp inspect ping
interval: 30s
retries: 5
timeout: 5s
Tareas programadas
Para ejecutar tareas programadas se necesita de un servicio que se basa en
Celery Beat. El comando para arrancar el worker es /start-celeryworker, de
nuevo, partiendo de la misma imagen de backend.
Un ejemplo de servicio, partiendo de la definición de backend hecha anteriormente, sería:
celerybeat:
<<: *backend
command: /start-celerybeat
healthcheck:
test: /entrypoint celery -A nftaas.taskapp inspect ping
interval: 30s
retries: 5
timeout: 5s