---
title: Despliegue de aplicaciones PHP con Deployer (I)
description: Desplegar aplicaciones implica llevar cambios desde el entorno de desarrollo a producción, pasando por pruebas y preparación.
---

[Descubre los contenidos más relevantes sobre tecnología ](https://conasa.grupocibernos.com/blog)

# [Despliegue de aplicaciones PHP con Deployer (I)](https://conasa.grupocibernos.com/blog/despliegue-de-aplicaciones-php-con-deployer-i)

 Escrito por [Conasa](https://conasa.grupocibernos.com/blog/author/conasa) | 15-mar-2017 10:41:25

El despliegue de aplicaciones es una de las tareas más habituales durante el ciclo de vida de las mismas, lo que significa llevar dicha aplicación o los cambios realizados en ella a lo largo del tiempo desde el entorno de desarrollo (local) hasta el entorno de producción, pasando habitualmente por otros entornos como pruebas, preparación (staging) o pre-producción etc.

## Despliegue de aplicaciones PHP con Deployer (I)

El despliegue de aplicaciones consiste generalmente en recuperar el código del sistema de control de versiones, copiarlo a la máquina o máquinas de destino y realizar ciertas tareas como la instalación/actualización de dependencias mediante [Composer](https://getcomposer.org/), la preparación de recursos *CSS* y *Javascript*, ejecución de migraciones de la base de datos etc. En un proyecto pequeño o que no requiera despliegues de forma habitual, estas tareas pueden ser realizadas de forma manual o semi-manual, por ejemplo con el uso de algunos *scripts* que automaticen parte de las mismas.

Por contra, en proyectos en los que los despliegues sean habituales, complejos (por tener que realizar muchas tareas o ser muy laboriosas) o que sigan la técnica de [entrega continua](https://martinfowler.com/bliki/ContinuousDelivery.html), es necesario automatizar todo el proceso, de manera que se reduzca el tiempo necesario para hacer llegar las nuevas funcionalidades o correcciones a los usuarios finales y se minimicen los errores humanos. Para ello podemos utilizar [Deployer](https://deployer.org/), una herramienta escrita en *PHP* e inspirada en otras ya existentes como [Capistrano](http://capistranorb.com/) (Ruby) o [Magallanes](http://magephp.com/) (también en PHP). En este post vamos a ver cómo instalar y configurar esta herramienta para el despliegue de aplicaciones PHP de una manera bastante sencilla.

## Instalación

AVISO: *Personalmente no he conseguido hacer funcionar correctamente Deployer en Windows 10 (no he probado otras versiones) debido principalmente al soporte de SSH. Recomiendo utilizar GNU/Linux.*

La forma más sencilla de instalar *Deployer* para el despliegue de aplicaciones PHP es a través de *Composer*:

```
$ composer require global deployer/deployer 
```

Si todo ha ido bien ahora tendremos disponible el comando *dep*, que podemos utilizar para interactuar con *Deployer*:

```
$ dep Deployer master 
```

```
Usage: command [options] [arguments] 
```

…

## ¿Cómo funciona Deployer a la hora de realizar el despliegue de aplicaciones?

*Deployer* es una herramienta de despliegue de aplicaciones en línea de comandos (comando dep). Para utilizar esta herramienta, en la máquina de despliegue (la que ejecuta *Deployer*) se debe crear un fichero llamado *deploy.php* (en el siguiente post veremos cómo), donde indicaremos de qué repositorio se debe obtener el código de nuestro proyecto, a qué servidor o servidores (máquina/s destino) se debe desplegar y en general las tareas a realizar en cada despliegue.

Una vez definido este fichero *deploy.php* se puede iniciar el despliegue de aplicaciones con el comando dep deploy (ejecutado en el mismo directorio que el fichero *deploy.php*). Por defecto *Deployer*, al realizar un despliegue, se conectará a la máquina destino mediante *SSH* y desde ahí ejecutará los comandos necesarios para llevarlo a cabo. Esto incluye descargar el código actualizado del repositorio *git* y guardarlo en la ruta especificada, instalar dependencias, actualizar enlaces simbólicos etc.

Por tanto se debe cumplir que:

- La máquina destino tenga todo el software necesario instalado; *git* para conectar al repositorio de código, *Composer* para instalar dependencias en caso de usar librerías de terceros etc.
- La máquina de despliegue de aplicaciones tenga acceso mediante *SSH* a la máquina destino y la máquina destino tenga acceso al repositorio de código.

La instalación y configuración de las herramientas del primer punto quedan fuera del alcance de este *post*, sin embargo en la siguiente sección revisaremos rápidamente los pasos necesarios para realizar las conexiones *SSH* entre máquinas de forma eficaz.

## Configuración de SSH

Aunque *Deployer* soporta la autenticación *SSH* mediante usuario y contraseña (definidos en el fichero *deploy.php*), mi recomendación es utilizar los ficheros de claves *SSH* de la máquina. Para ello, es necesario primero generar dichas claves (si ya se tienen no es necesario volver a hacerlo) ejecutando, en la máquina de despliegue, el comando:

```
$ ssh-keygen -t rsa 
```

El comando preguntará la ruta y nombre de las claves y si queremos establecer una contraseña para las mismas. Lo más sencillo en este caso es utilizar las rutas y nombres por defecto y no establecer ninguna contraseña, ya que sino nos la pedirá cada vez que hagamos un despliegue. Por defecto el comando genera los ficheros de claves:

- Clave privada (no se debe compartir).
- Clave pública.

El siguiente paso es copiar la clave pública de nuestra máquina de despliegue en la máquina de destino, de manera que *Deployer* pueda establecer una conexión con dicha máquina destino sin necesidad de usuario y contraseña (usando las claves que hemos generado en el paso anterior). Para ello basta con ejecutar:

```
$ ssh-copy-id usuario@maquina-destino 
```

Tras esto, podemos probar a conectar desde la máquina de despliegue a la máquina destino mediante *SSH*:

```
$ ssh -T usuario@maquina-destino 
```

Si hemos congfigurado las claves correctamente debería dejarnos conectar sin problema . En caso de que el sistema pregunte por la autenticidad del *host* remoto basta con aceptar.

Por otra parte, en la máquina de destino es necesario tener acceso al repositorio de código *git* donde tenemos alojado el proyecto. Los pasos para configurar esto depende del servicio de alojamiento utilizado, si el repositorio es público o privado etc. Como en el caso de la conexión *SSH* entre máquinas, se debe lograr que la máquina se conecte al repositorio y descargue el código sin necesidad de introducir usuario y contraseña. Por ejemplo, podemos consultar la [documentación sobre claves SSH](https://help.github.com/articles/connecting-to-github-with-ssh/) en caso de usar Github o su [equivalente para Bitbucket](https://confluence.atlassian.com/bitbucket/set-up-ssh-for-git-728138079.html).

Con esto ya tenemos todo instalado y configurado para el despliegue de aplicaciones PHP con *Deployer.* ¡En el siguiente post veremos cómo hacerlo!

 

[Ver post completo](https://conasa.grupocibernos.com/blog/despliegue-de-aplicaciones-php-con-deployer-i)

```json
{
  "@context" : "http://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "Conasa"
  },
  "dateModified" : "2023-05-04T11:13:43.548Z",
  "datePublished" : "2017-03-15T10:41:25Z",
  "headline" : "Despliegue de aplicaciones PHP con Deployer (I)",
  "image" : {
    "@type" : "ImageObject",
    "height" : 2531,
    "url" : "https://www.cibernos.com/hubfs/1414.jpg",
    "width" : 4500
  },
  "mainEntityOfPage" : "https://conasa.grupocibernos.com/blog/despliegue-de-aplicaciones-php-con-deployer-i",
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "height" : 60.0,
      "url" : "https://www.cibernos.com/hubfs/logo-conasa%20(1).png",
      "width" : 142.85715
    },
    "name" : "Conasa Blog"
  }
}
```