.. _deploy: 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: .. code-block:: 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: .. sourcecode:: yaml 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 :ref:`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: .. sourcecode:: yaml 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: .. sourcecode:: yaml 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: .. sourcecode:: yaml celerybeat: <<: *backend command: /start-celerybeat healthcheck: test: /entrypoint celery -A nftaas.taskapp inspect ping interval: 30s retries: 5 timeout: 5s