Cómo implementar con Deployer

El flujo de trabajo automatizado para la implementación es una gran herramienta que todo equipo de desarrollo de software debe tener. El proceso de lanzamiento, cuando es rápido, seguro y tolerante a fallos, puede ahorrar tiempo para desarrollar más cosas geniales. Y la buena noticia es que hay muchas herramientas excelentes para crear un ciclo de lanzamiento automatizado..

En este artículo, voy a presentarles una herramienta de implementación llamada Deployer. Me gusta usarlo porque está escrito en PHP, es fácil de configurar y tiene muchas funciones útiles para integrar el proceso de implementación en el flujo de trabajo de su equipo.

El proceso de implementación con Deployer

En primer lugar, veamos la estructura del proceso de implementación con Deployer. Consta de tres partes principales: una desplegar servidor para iniciar la implementación, un servidor de producción o de ensayo para alojar su aplicación, y un repositorio de git para almacenar el código de su aplicación.

Cuando inicia un proceso de implementación, ejecuta un script de implementación en el servidor de implementación. Después de esto, el servidor de implementación se conecta al servidor de producción con SSH y realiza las tareas de mantenimiento desde el servidor de producción, como la clonación del código de un repositorio git, la actualización de las dependencias de Composer y otras cosas que necesita para tener una versión exitosa. 

Para que todos confíen en esta cadena, crearemos e instalaremos certificados SSH en los servidores y el repositorio..

Instalar certificados SSH

Necesitamos crear una clave de autenticación SSH en un servidor de producción y compartirla en un repositorio git. Si no tiene ninguna clave de autenticación SSH en su servidor de implementación, ejecute ssh-keygen y siga las instrucciones. Keygen creará una clave pública en un archivo ~ / .ssh / id_rsa.pub.

Ahora puedes instalarlo en la cuenta de tu repositorio. Si no sabe cómo hacerlo, mire el ejemplo de GitHub en los enlaces relacionados al final del artículo, o solicite ayuda a su servicio de alojamiento de repositorios..

Además, es mejor crear una clave SSH en su servidor de implementación para obtener confianza en la máquina de producción. Utilice estos comandos para realizar una conexión SSH sin contraseña entre los servidores de implementación y producción.

vagrant @ localserver: ~ $ ssh-keygen vagrant @ localserver: ~ $ ssh-copy-id -i ~ / .ssh / id_rsa.pub www-data@my_project.com

Con todos los certificados instalados, estamos listos para instalar Deployer.

Instalar Deployer

La instalación de Deployer es tan fácil como la instalación de Composer. Necesitas descargar el archivo PHP y convertirlo en un comando global:

curl -LO https://deployer.org/deployer.phar mv deployer.phar / usr / local / bin / dep chmod + x / usr / local / bin / dep

Revisemos la versión de Deployer para ver si todo está instalado correctamente:

vagrant @ localserver: ~ $ dep --version Deployer 6.0.3

Todo se ve muy bien, y estamos listos para crear nuestro primer script de implementación.

Hacer la primera secuencia de comandos de implementación

Para inicializar Deployer para su proyecto, ejecute dep init. Esto ejecutará una utilidad para generar un script de implementación, que le pedirá un tipo de proyecto y un enlace de repositorio y creará la deploy.php archivo en el directorio actual. Echemos un vistazo a este archivo y las funciones principales que se utilizan en una receta.. 

Las funciones conjunto y obtener trabajar con los valores de configuración, y un acceso directo de un captador se puede utilizar con un correr mando:

set ('current_path', '~ / my_application'); run ('rm current_path / runtime / *');

Cada valor de configuración se puede anular para cada host. Podemos configurar una ruta de implementación y un usuario SSH para nuestra aplicación en nuestro script de implementación:

host ('my_project.com') -> usuario ('www-data') -> set ('deploy_path', '~ / application');

Para definir tus propias tareas, usa la tarea función y correr para ejecutar un comando en el servidor de producción:

tarea ('disk_free', function () $ df = run ('df -h /'); writeln ($ df););

Y luego ejecutarlo con dep y el nombre de la función como param:

vagrant @ localserver: / vagrant / deployer $ dep disk_free ➤ Ejecutando la tarea disk_free Tamaño del sistema de archivos utilizado Uso del%% Montado en / dev / md0 7.4G 4.7G 2.4G 67G /% Sí 

Ahora puede mirar a través del archivo de implementación y cambiar todos los parámetros necesarios a la configuración de su aplicación.

Implementar en producción

Ya hemos instalado Deployer, instalado certificados SSL en los servidores de implementación y producción, y hemos creado la secuencia de comandos de implementación, por lo que finalmente es hora de unirlo todo y hacer la primera implementación en producción..

Para implementar su aplicación, simplemente llame dep despliegue:

Si algo sale mal, puede volver a la versión implementada anteriormente en un solo paso:

vagrant @ localserver: ~ $ dep rollback ✔ Ejecución de rollback de tareas

Parece fácil, ¿no es así??

Ahora vamos a ver qué fue creado en nuestro servidor de producción. Gracias a Deployer, podemos hacerlo fácilmente con comandos de acceso directo. Tratar dep ssh para conectarse a un servidor directamente mediante la configuración del script de implementación, o ejecutar un comando de forma remota a través del túnel SSH con dep correr. Además, este comando admite variables que hemos establecido en el script..

Así que echemos un vistazo a la ruta de despliegue:

vagrant @ localserver: ~ $ dep ejecuta "tree deploy_path". ├── actual -> / home / user / my_project / releases / 3 ├── releases │ 1 │ │ composer.json │ ├── config.php -> / home / user / my_project / Tiempo de ejecución compartido / config.php │ │ ├── README.md │ │ ├── -> / home / user / data / my_project / shared / runtime │ │ vendedor │ │ └──… │ │ └── web └── │ └── index.php │ ├── 2 │ │… │ └── 3 │… └── compartido ├── config.php └── tiempo de ejecución 

Lo principal es el lanzamientos Directorio, donde Deployer almacena las últimas versiones de nuestra aplicación. Después de cada implementación exitosa o reversión, se vincula corriente a la versión habilitada. Finalmente, tenemos un compartido directorio, que almacena archivos y carpetas de la compartir_dirs y archivos compartidos que hemos establecido en el archivo de script.

En el primer despliegue, Deployer copiará esos archivos a un directorio compartido y creará un enlace desde el lanzamientos dirígete a la compartido dir. La próxima vez, solo agregará un enlace desde los archivos de lanzamiento a los archivos y carpetas en el directorio compartido. Además, puede cambiar cualquier archivo en un directorio compartido y Deployer lo mantendrá sin cambios en cada implementación; por ejemplo, esto es útil para los archivos de configuración.

Además, si tienes un compositor.json En la raíz de su repositorio, Deployer llamará a Composer para crear un directorio de proveedores y actualizar todas las dependencias necesarias. Si no almacena el archivo Composer en el directorio raíz, puede crear una tarea personalizada para actualizarlo.

Y ahora es el momento de integrar la aplicación desplegada a nuestros procesos..

Agregar una tarea personalizada

Cada equipo tiene sus propias configuraciones de implementación y proceso para automatizar, por lo que Deployer tiene herramientas fáciles para extender la configuración estándar y agregar tareas personalizadas. Por ejemplo, su hosting puede tener la regla de almacenar aplicaciones y webroot en diferentes lugares, sin derechos para cambiar la configuración de Apache o Nginx. 

Pero hay una manera de superar esta regla: usar enlaces simbólicos. Así que vamos a añadir una tarea para esto:

tarea ('deploy: public_html', function () run ('ln -sf deploy_path / current / web /var/www/my_application.com');); 

Y luego agréguelo a la tarea de implementación principal como parte de un ciclo de lanzamiento:

tarea ('deploy', [// ... 'deploy: public_html', //…]);

Ahora ejecute nuevamente el script de implementación y verifique si todo está correcto con dep ssh.

Recetas de terceros

El implementador tiene muchas recetas para integrar con terceros que pueden extender la funcionalidad básica. Podemos usar Composer para instalarlos:

compositor requiere desplegador / recetas --dev 

Me gusta usar la receta de notificación de Slack. Para habilitarlo, deberíamos ir a la página de recetas de Slack, hacer clic en Añadir a Slack y seleccione el canal para enviar notificaciones. Luego obtendremos el webhook de Slack y agregaremos este código a la implementación.

// requiere receta floja requiere 'receta / slack.php'; // establecer el conjunto de slack webhook ('slack_webhook', / * tu slack webhook * /); // notificar holgura después de una implementación exitosa después de ('éxito', 'holgura: notificar: éxito');

Después de estos cambios, Deployer enviará un mensaje como este al canal de implementación:


Ahora puede agregar su equipo al canal para que todos los involucrados puedan ser notificados.

Conclusión

En este tutorial, hemos instalado Deployer y creado un script de implementación que se puede utilizar para implementar nuestra aplicación desde un repositorio git a un servidor de producción o de almacenamiento en un solo clic..

Además, se puede integrar en los procesos del equipo; por ejemplo, una aplicación se puede implementar automáticamente después de los cambios en la rama maestra y se puede hacer una notificación en un canal Slack sobre la implementación exitosa.

Si tiene alguna pregunta, no dude en hacer preguntas en los comentarios del artículo.. 

Lecturas adicionales y enlaces relacionados

  • Sitio web del desarrollador
  • Receta floja para Deployer
  • Ejemplo de instalación de una clave SSH en una cuenta de GitHub