Tengo una aplicación (Python Flask) que quiero implementar usando GitLab CI y Docker en mi VPS.
En mi servidor, quiero tener una versión de producción y una versión provisional de mi aplicación. Ambos requieren una conexión MongoDB.
Mi plan es compilar automáticamente la aplicación en GitLab y enviarla al Docker Registry de GitLab. Si quiero implementar la aplicación para la puesta en escena o la producción, hago un docker pull , docker rm y docker run .
El plan es almacenar la configuración (por ejemplo secret_key ) en .production.env (y .staging.env ) y pasarla a la aplicación usando docker run --env-file ./env.list
Ya tengo MongoDB instalado en mi servidor y ambos entornos de las aplicaciones utilizarán la misma instancia de MongoDB, pero con un nombre de base de datos diferente (configurado en .env ).
¿Es esa la mejor práctica para implementar mi aplicación? Tiene alguna recomendación? ¡Gracias!
Aquí está mi configuración que funcionó razonablemente bien en diferentes organizaciones y tamaños de proyectos:
Para construir:
Desplegar:
.env . El archivo docker-compose puede hacer referencia a las variables de entorno individuales.docker-compose up (para aplicaciones más pequeñas) o vuelve a implementar una pila de ventana acoplable en un enjambre (para aplicaciones más grandes).Si te gusta, puedes hacer el paso 3 a través de Docker Machine. Siento, sin embargo, que sus beneficios no justifican su uso en mis casos.
Una cosa que puedo recomendar, ya que lo he hecho en producción varias veces, es implementar Docker Swarm con extremos cifrados con TLS. Este enlace habla sobre cómo asegurar el enjambre a través de un certificado. Es un poco de trabajo, pero lo que le permitirá hacer es definir servicios para sus aplicaciones.
Los servicios, una vez en línea, pueden tener múltiples réplicas y cada vez que actualice un servicio (es decir, implemente una nueva imagen), el enjambre se encargará de asegurarse de que uno esté en línea en todo momento.
docker service update <service name> --image <new image name>
Algunos servidores VPS en realidad tienen Kubernetes como servicio (como Digital Ocean). Si lo tienen, es más preferible. Gitlab en realidad tiene una función de desarrollo automático y puede administrar de forma remota su clúster de Kubernetes, pero también puede implementarlo manualmente con kubectl.