¿Cómo se utiliza PIP, virtualenv y Tela para manejar el despliegue?
-
19-09-2019 - |
Pregunta
¿Cuáles son sus ajustes, sus trucos, y sobre todo, su flujo de trabajo?
Estas herramientas son grandes, pero todavía no hay mejores prácticas ligadas a su uso, por lo que no saben lo que es la forma más eficiente de utilizar.
- ¿Utiliza pip paquetes o siempre ¿descargar?
- ¿Establece Apache / Cherokee / MySQL con la mano o haces usted tiene un guión para que?
- ¿Usted pone todo en virtualenv y utilizar
--no-site-packages
? - ¿Utiliza un virtualenv para varios proyectos?
- ¿Qué utilizas Tela para (que parte de su implementación que hacer la escritura)?
- ¿Usted pone las secuencias de comandos de la tela en el cliente o el servidor?
- ¿Cómo se maneja la base de datos y archivo de medios migración?
- ¿Alguna vez se necesita una herramienta de construcción tales como SCons ?
- ¿Cuáles son los pasos de la implementación? ¿Con qué frecuencia se realiza cada uno de ellos?
- etc.
Solución
"mejores prácticas" son muy dependientes del contexto, por lo que no voy a reclamar mis prácticas son las mejores, sólo que ellos trabajan para mí. Yo trabajo en los sitios en su mayoría pequeños, por lo que no hay implementaciones de varios servidores, etc. CDN que necesito para apoyar Webfaction alojamiento compartido de implementación, ya que algunos clientes necesitan la más barata de alojamiento que puedan encontrar. Yo a menudo tienen que desplegar sitios múltiples veces en diferentes ambientes, se despliega un guión de modo repetibles son críticos.
- no uso haces de pepita, se instala desde un requirements.txt. Hago correr mi propia href="http://github.com/ask/chishop" rel="noreferrer"> chishop servidor con sdists de todo lo que necesito, así que no hay múltiples puntos individuales de fracaso en el proceso de construcción. También uso PIP_DOWNLOAD_CACHE en mis máquinas de desarrollo para acelerar ambientes del proyecto de programa previo, ya que la mayoría de las necesidades de mis proyectos se solapan un poco.
- tela secuencias de comandos que puede configurar automáticamente y configurar Nginx + Apache / mod_wsgi en una Ubuntu VPS, o configurar el equivalente en Webfaction alojamiento compartido, y luego implementar el proyecto.
- no uso --no-site-packages con virtualenv, porque prefiero tener movimiento lento paquetes compilados (Python Imaging Library, psycopg2) instalados a nivel del sistema; demasiado lento y problemático que hacer dentro de cada virtualenv. No he tenido problemas con el sistema contaminado site-packages, porque por lo general no contaminarlo. Y, en cualquier caso, se puede instalar una versión diferente de algo en el virtualenv y va a tener prioridad.
- Cada proyecto tiene su propia virtualenv. Tengo algunos scripts bash (no virtualenvwrapper , aunque mucha gente utiliza y que la ama) que automatizan el despliegue de la virtualenv para un proyecto determinado en una ubicación conocida y la instalación de los requisitos de ese proyecto en él.
- Todo el proceso de implementación, a partir de un servidor VPS desnuda Ubuntu o Webfaction alojamiento compartido cuenta a un sitio web funcionando, es un guión utilizando Tela.
- scripts de tela son parte de la estructura de directorios del proyecto, y los corren de un check out desarrollo local.
- No tengo ninguna necesidad de SCons (que yo sepa).
Despliegue
En el momento en que un despliegue fresca se divide en los siguientes pasos:
-
fab staging bootstrap
(configuración del servidor y desplegar código inicial) -
fab staging enable
(habilitar la configuración de Apache / nginx para este sitio) -
fab staging reload_server
(recargar Apache / config nginx).
Los puede por supuesto combinarse en una sola fab staging bootstrap enable reload_server
línea de comandos.
Una vez que estos pasos se realizan, la actualización de la instalación con el nuevo código es simplemente fab staging deploy
.
Si tengo que retrotraer una actualización, fab staging rollback
. Nada particularmente mágico en la reversión; sólo se deshace el código a este último desplegado versión y migra la base de datos al estado anterior (esto requiere la grabación de algunos metadatos sobre el estado de la migración del puesto de implementar DB, acabo de hacer que en un archivo de texto).
Ejemplos
No he utilizado los scripts de tela que se describen en esta respuesta durante unos años, por lo que no se mantengan en todo y me exima de responsabilidad por su calidad :-) pero se puede ver que la dirección https://bitbucket.org/carljm/django-project-template - en fabfile.py
en la raíz de recompra, y en el subdirectorio deploy/
.
Otros consejos
Yo uso la tela para crear e implementar mi código y asumir un sistema ya establecido para ello. Creo que una herramienta como títere es más apropiado para automatizar la instalación de cosas como Apache y MySQL, aunque todavía tienen que incluir realmente en mi flujo de trabajo.
Además, por lo general tienen un virtualenv diferentes por proyecto. Se crean a partir de una 'base' de instalar Python donde - como Carl señaló -. Puede dejar algunas bibliotecas mundial pitón
Así que en términos de flujo de trabajo que sería la siguiente:
- títere para instalar los servicios requeridos (servidor web, base de datos, servidor de SSH, ...)
- marioneta para configurar los usuarios necesarios y las carpetas de base
- tela para crear virtualenv para la aplicación
- Tejido a PIP instalar desde requirements.txt
- Tejido para desplegar su aplicación
- Tejido para implementar archivos de configuración (servidor web, ...)