Fino ad ora abbiamo visto come creare un pacchetto per Composer e renderlo installabile sottoponendolo a Packagist, il suo repository predefinito. Il procedimento è lineare e perfettamente logico per progetti Open Source in cui il codice può essere distribuito senza restrizioni.
Solitamente però gli sviluppatori gestiscono anche progetti Closed che non possono seguire lo stesso schema di distribuzione. Sarebbe un peccato se Composer fosse limitato ai soli progetti pubblici impedendo l'utilizzo di librerie private, ma fortunatamente i suoi creatori hanno fornito strumenti per gestire questo genere di situazioni. Le soluzioni possibili sono:
- installare un pacchetto come archivio compresso online;
- installare un pacchetto da server di versioning privato (es. Git);
- installare un pacchetto da server Packagist privato.
In ognuno di questi casi i repository (archivi compressi o server packagist) non sono noti a Composer che è configurato per cercare pacchetti su Packagist, quindi devono essere indicati manualmente nel composer.json
del progetto che li vuole includere tramite l'opzione repositories
.
repositories
è un array di oggetti strutturati in base al tipo indicato in modo da gestire le differenza tra l'utilizzo di un file Zip o di un server Git privato:
{
"repositories": [
{
...
}
]
}
Archivi online
Questa è la soluzione più semplice per la distribuzione di un pacchetto, dal punto di vista sistemistico non è necessario creare un repository su server Git o svn né bisogna configurare il server, basta avere accesso ad uno spazio web, crearvi un file Zip e indicare l'url nel composer.json
.
La struttura da aggiungere a repositories
è simile a:
{
"type": "package",
"package": {
"name": "vendor/packageName",
"version": "1.2.5",
"dist": {
"url": "http://mywebsite.it/files/package-1.2.5.zip",
"type": "zip"
}
}
}
Come si può notare viene indicato il tipo di pacchetto come "package", il vendor, la versione e l'url da cui scaricare il pacchetto (compreso il formato dell'archivio); all'interno dell'archivio è possibile inserire il composer.json
. In alternativa, all'interno della definizione di un package presentata è possibile inserire la configurazione dell'autoloading.
Per rendere questo pacchetto privato è possibile configurare il web server per rendere l'accesso disponibile solo dietro presentazione di credenziali o solo da determinati IP. Ovviamente questo genere di configurazione è indicata per un numero limitato di pacchetti data la prolissità della configurazione per il composer.json
.
Repository Git privato
Composer gestisce repository di tipo "vcs", cioè server di versioning come Git o svn, con una struttura da aggiungere a repositories
:
{
"type": "vcs",
"package": {
"name": "vendor/packageName",
"url": "myservergit.it:vendor/package-name.git"
}
}
Il gestore di pacchetti comprende dall'url il tipo di server vcs da utilizzare, ma è anche possibile indicarlo esplicitamente inserendo una voce tra "git", "svn", "fossil" o "hg" al posto di vcs
nel type
del listato.
Per utilizzare pacchetti privati è possibile configurare il server vcs per accettare credenziali di accesso o API key. Nel caso di Git con repository GitHub, Composer può utilizzare le API di GitHub per scaricare l'intero codice tramite archivio Zip invece che con l'eseguibile del client Git.
Server packagist privati
I sistemi precedenti sono semplici da configurare ma hanno degli svantaggi tra cui la necessità di indicare un repository per ogni pacchetto da installare. Nel caso dei file Zip è addirittura necessario indicare un repository per versione e la gestione delle metaversioni dev e master è difficoltosa, ciò a differenza di un server vcs in cui le release possono essere indicate sul server come tag e la gestione dei branch è resa semplice.
Esiste un'altra possibilità, cioè utilizzare un server che si comporti come Packagist, seguendo lo stesso schema di risposte, ma totalmente privato. Per fare questo è possibile utilizzare un servizio managed a pagamento come quello messo a disposizione dai creatori del sistema di pacchettizzazione o un servizio on-premise da installare su un proprio server.
Nel caso si scelga un servizio da installare su server esistono versioni gratuite come "Satis" e altre a pagamento con funzionalità più avanzate. In ogni caso la configurazione di Composer per il server packagist privato è simile alla seguente:
{
"type": "composer",
"url": "http://packages.example.org/"
}
Anche in questo caso è possibile gestire l'autenticazione a seconda delle modalità supportate dal proprio server: ssh, ssl, autenticazione HTTP, autenticazione tramite API key. L'utilizzo di un server packagist privato è la soluzione più completa anche se più complessa, vedremo presto come installarne uno.