Toran Proxy: Eigenes Composer Packagist für öffentliche und private Repositories aufbauen

Warning message

Warning: This post is slightly older.

It may be that the content is out of date, links are outdated or that no one responds to new comments.

In der PHP-Welt ist Composer eine großartige Sache und in vielen Projekten nicht mehr wegzudenken. Es ist damit möglich, eine Vielzahl an Paketen und Libraries in seinen Projekten zu verwalten: Von der Installation bis zu Updates. Viele PHP-Projekte werden selber über Composer organisiert.

Die Informationen zu den Paketen (welche Pakete gibt es, in welchen Versionen liegen sie vor etc.) werden über das Packagist verwaltet. Dieses ist auch das Standard-Repository woher Composer seine Informationen bezieht. Alle Pakete in Packagist sind öffentlich und können somit von allen genutzt werden. Die Arbeit mit privaten Repositories wird von Composer prinzipiell unterstützt, ist jedoch etwas umständlicher. Wer viel mit privaten Repositories in seinen Projekten arbeitet, wird sich daher über Toran Proxy sicherlich freuen.

Toran Proxy ist, wie ein Teil des Namens schon verrät, ein Proxy für Composer: sitzt also zwischen Composer (dem eigenen PHP Projekt) und Packagist. Toran ist eine »Weiterentwicklung« von Satis, mit dem bisher private Repositories in Composer-basierten Projekten eingebunden werden konnten. Mit Satis wurde ein eigenes, privates Packagist erstellt und in die eigene composer.json eingebunden.

Toran Proxy

Im Gegensatz zu Satis unterstützt Toran sowohl öffentliche Repositories (z.B. von Packagist) wie auch Private. Nach der Einrichtung von Toran reicht es aus, in der eigenen composer.json zwei Repositories einzutragen:


{
    "repositories": [
        {"type": "composer", "url": "https://toran.example.com/repo/private/"},
        {"type": "composer", "url": "https://toran.example.com/repo/packagist/"},
        {"packagist": false}
    ]
}

Damit wird auch das Standard-Composer-Repository Packagist nicht mehr benutzt, sondern alle Pakete werden über die eigene Toran-Instanz abgerufen. Toran selber ruft natürlich die Daten weiter von Packagist ab, aber speichert diese bei sich zwischen. So das der Abruf der Pakete über »composer update« teilweise erheblich beschleunigt werden kann. Insbesondere dann, wenn mehrere Projekte (die über die Toran-Instanz laufen) oft die gleichen Pakete benötigen.

Toran bietet zudem die Möglichkeit, mehrere öffentliche Repositories einzubinden. Neben Packagist brauchst Du eventuell auch noch Pakete aus dem WordPress Packagist oder Pakete für Drupal. Gerade wenn in einem Projekt mehrere Repositories (egal ob öffentlich oder privat) eingebunden werden müssen, spielt Toran seine Stärken aus. Denn, egal wie viele Repositories in einem Projekt genutzt werden müssen, in der composer.json müssen nur noch die beiden Quellen von Toran angegeben werden.

Vorteile von Toran

  • Reduzierung der einzutragenden Repositories in der eigenen composer.json Datei. Diese wird dadurch übersichtlicher und einfacher zu warten.
  • Verwaltung von privaten Repositories mittels Composer.
  • Zentrale Einbindung von alternativen Repository Quellen (z.B. für Drupal, Wordpress oder Magento) möglich.
  • Speichert die Dateien der Pakete zwischen und kann damit auch Pakete bereitstellen, wenn GitHub oder andere Paket-Quellen down sind.
  • Reduziert die Download-Zeit und Latenzen beim Paket-Abrufen, da die eigene Toran-Instanz meist »näher« ist, also die Server von Packagist oder GitHub und Co.

Installation von Toran

Auf der Website des Projektes steht ein .tar.gz-Archiv zum Download bereit. Dies muss nur entpackt werden und der Docroot eines Apache VirtualHost auf das /web Verzeichnis zeigen. Auf der Download-Seite des Projektes ist dies auch ausführlich beschrieben. Anschließend kann die Web-Oberfläche von Toran aufgerufen und alles weitere hier eingestellt werden. Eine Datenbank wird nicht benötigt.

Über die Konfigurationsdatei in »/app/config/security.yml« kann die Installation geschützt werden (z.B. mittels HTTP Auth). Sofern man nicht das »/web/repo« Verzeichnis von diesem Schutz ausklammert, müssen auch beim Aufruf von composer update die Zugangsdaten eingegeben werden. Da Toran auf dem PHP-Framework Symfony2 basiert, bieten die Einstellungen in der security.yml die selben Möglichkeiten wie bei jedem anderen Symfony2-Projekt auch. Für die Absicherung empfiehlt sich daher ein Blick in die Dokumentation von Symfony: http://symfony.com/doc/current/security.html

Verwaltung von privaten Repositories

In der Web-Oberfläche von Toran können neue Private Repositories angelegt werden. Dazu muss einfach nur die Adresse angegeben werden, worunter das Repository (z.B. Git) erreichbar ist. Das kann z.B. bei github oder Bitbucket liegen. In den meisten Fällen wird dieses Git-Repository selber geschützt sein. In diesem Fall ist zu beachten, dass der Benutzer (worunter Toran, bzw. der PHP-Prozess ausgeführt wird) selber mindestens lesenden Zugriff auf das Repository benötigt (z.B. per Hinterlegung des SSH-Keys).

Worum sich Toran allerdings nicht kümmert, ist die Steuerung der Zugriffe von composer auf die privates Repositories. Es ist zum Beispiel nicht möglich in Toran einzustellen, welches Projekt (composer.json) auf ein privates Repository Zugriff hat. Dies wird einzig und allein über die normale Zugriffssteuerung des Git-Repositories (also z.B. bei Github) vorgenommen. Das bedeutet, dass alle Clients die über composer Pakete abrufen (also »composer update/install«) ausführen, müssen auch auf das Repository bei Github zugreifen können. Toran kümmert sich ausschließlich um die Bereitstellung der Repository-Informationen, die Composer benötigt.

Lizenzierung von Toran

Toran ist nur für den persönlichen Gebrauch kostenlos. Wenn Toran z.B. bei einem kommerziellen Projekt oder in der Firma eingesetzt werden soll, muss eine Lizenz erworben werden. Die Kosten richten sich nach der Anzahl der Entwickler und fangen bei 9 Schweizer Franken (ungefähr 10 Euro) im Monat an.

» Toran Proxy

German | 16. November 2016
Stored in

Add new comment