Composer, el manual oficial

6.7. Creando tu propio repositorio

Normalmente publicarás tus paquetes en Packagist, pero en algún caso puede ser conveniente crear tu propio repositorio:

  • Paquetes privados: si utilizas Composer en una empresa, es muy probable que desarrolles paquetes privados que no se pueden publicar libremente.
  • Ecosistema muy específico: si dispones de un proyecto con un ecosistema muy específico y esos paquetes realmente no van a ser útiles para el resto de la comunidad PHP, no tiene sentido que los publiques en Packagist. Un ejemplo de estos paquetes serían los plugins de WordPress.

Si utilizas un repositorio propio, es recomendable que sea de tipo composer, ya que es el único tipo nativo en Composer y es con diferencia el que ofrece mejor rendimiento.

Existen varias herramientas para crear tu propio repositorio de tipo composer.

6.7.1. Creando un repositorio propio a partir de Packagist

La aplicación que utiliza el sitio web packagist.org es de software libre, por lo que puedes instalar en tus servidores una copia exacta de Packagist, pero que sirva solamente tus paquetes.

El problema es que instalar y configurar un sitio tan grande y complejo como Packagist es una tarea que no merece la pena para la mayoría de pequeñas y medianas empresas. En estos casos, es mejor utilizar la herramienta Satis que se explica en la siguiente sección.

Packagist es una aplicación Symfony2 y está disponible en el repositorio github.com/composer/packagist. Internamente utiliza Composer y actúa como proxy entre los repositorios de código y los usuarios de Composer. Además de mantener una lista actualizada con todos los paquetes, procesa sus contenidos periódicamente y los pone a disposición del público mediante un repositorio de tipo composer.

Para crear tu clon de Packagist, sigue las instrucciones que encontrarás en github.com/composer/packagist.

6.7.2. Creando un repositorio propio con Satis

Satis es un generador estático de repositorios de tipo composer. En otras palabras, es una versión ultra-ligera y ultra-simplificada de Packagist que funciona mediante archivos estáticos.

Su funcionamiento es muy sencillo. Primero le indicas el archivo composer.json que contiene todos los repositorios. Después, la herramienta descarga todos los paquetes indicados en la opción require y crea un archivo llamado packages.json que es realmente tu repositorio de paquetes.

Puedes descargar Satis desde el repositorio github.com/composer/satis y puedes obtener más información en el artículo Cómo crear tu propio repositorio de Composer.

6.7.3. Creando un repositorio propio con artefactos

En ocasiones no es posible disponer de ninguno de los tipos de repositorios explicados anteriormente. El caso típico es de las librerías utilizadas por muchos departamentos de una empresa grande y que se distribuyen mediante archivos ya creados llamados artefactos. Obviamente estos archivos casi siempre son privados. Para facilitar el uso de este tipo de paquetes, utiliza el tipo de repositorio artifact e indica la carpeta donde se encuentran los archivos ZIP con esos artefactos privados:

{
    "repositories": [
        {
            "type": "artifact",
            "url": "path/to/directory/with/zips/"
        }
    ],
    "require": {
        "private-vendor-one/core": "15.6.2",
        "private-vendor-two/connectivity": "*",
        "acme-corp/parser": "10.3.5"
    }
}

Los artefactos son en realidad archivos ZIP con al menos un archivo composer.json en el directorio raíz del ZIP:

$ tar -tf acme-corp-parser-10.3.5.zip
composer.json
...

Si existen dos archivos con diferentes versiones de un mismo paquete, se importan los dos. Si añades un artefacto con una versión más moderna y ejecutas el comando update, Composer actualiza el paquete a esa nueva versión.