Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Propuesta para deployment #101

Open
manubellido opened this issue Sep 27, 2020 · 3 comments
Open

Propuesta para deployment #101

manubellido opened this issue Sep 27, 2020 · 3 comments

Comments

@manubellido
Copy link
Contributor

Arquitectura

Para correr manolo y los spiders en conjunto necesitamos:

  • nginx
  • manolo django con gunicorn
  • redis (broker)
  • manolo django con celery
  • postgres

Servicios extras

  • Alerta de errores y medición performance: Sentry, la versión gratuita es más que suficiente y ahora tiene APM.
  • Email? Creo que con mailgun es más que suficiente.

Hosting y Deployment

Podemos hostear toda la app + spiders en droplets de DigitalOcean y tener la base de datos hosteada en DigitalOcean también. Las ventajas son el costo y la familiaridad de uso de VPS.

Una de las principales dificultades de trabajar con VPS es el deployment del código y configuración de servicios para que interactúen entre sí.

Dokku al rescate.

link: Dokku
La forma más fácil de hostear un app de Django es Heroku, que se caracteriza por hacer deployment con un simple git push heroku master, pero es realmente caro comparado con DigitalOcean. Sin embargo, podemos alcanzar la misma facilidad de deployment con Dokku: git push dokku main:master.

Dokku puede manejar el deployment del código de Django, configurar Redis, Postgres y las instancias de Celery. Se puede instalar en un droplet de DigitalOcean y ahí se pueden correr la web app de Manolo ( tipo web) y los spiders como (tipo worker), con un simple archivo de configuración:

web: gunicorn config.wsgi:application
worker: celery worker --app=config.celery_app --loglevel=info # worker que ejecuta las tareas
beat: celery beat --app=config.celery_app --loglevel=info  # scheduler para tareas periódicas

y se puede escalar de acuerdo a la necesidad, por ejemplo:

web=1
worker=2

Lo anterior significa: 1 instancia de Django y 2 para celery.

Un ejemplo de cómo se hace todo esto en la práctica: https://www.stavros.io/posts/deploy-django-dokku/

Recursos Estimados

Opción 1 ($$$):

  • Un droplet de 2vCPUs & 2 GB de RAM correr 1 web + 1 worker + redis.
  • Una instancia de Postgres de 1GB RAM & 1vCPU & 10GB SSD.

Opción 2 ($$):

  • Un droplet de 2vCPUs & 4GB de RAM para correr 1 web + 1 worker + redis + postgres. Dokku también ayuda a instalar y configurar Postgres de manera sencilla.

Límite

Lo único malo de Dokku, es que se está limitado a los recursos que tenga el servidor donde está instalado. Pero esto es manejable al contratar un servidor más potente.

@aniversarioperu
Copy link
Member

creo que docker es otra opcion? en que se diferenciaria o tendria mas ventajas usar dokku en lugar de docker? hay una propuesta de usar docker ver #80

@manubellido
Copy link
Contributor Author

Para usar dokku, necesitamos docker. Dokku simplemente agarra tus containers y te ayuda a administrarlos desde la línea de comandos (remotamente)

@manubellido
Copy link
Contributor Author

@josemvaldivia no sé si viste esto. Tienes algún comentario?

Veo que vas a añadir docker y docker-compose. Dokku funciona con docker y se encarga de la configuración y manejo de los containers donde se vaya a hacer deployment. Si Dokku resultar ser buena opción dere ya no necesitamos docker-compose.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants