Composer na serwerach CloudHosting

Czym jest Composer?

Com­pos­er jest narzędziem służą­cym do zarządza­nia paki­eta­mi i zależnoś­ci­a­mi aplikacji, które są pisane w języku PHP. Dostęp­ny jest on w formie komendy wier­sza pole­ceń (poprzez SSH). Jego dzi­ałanie moż­na w pewnym stop­niu porów­nać z aplikacją Npm, uży­waną w środowisku Node.js, czy też z aplikacją Bundler, uży­waną w języku Ruby.

Najważniejsze kom­po­nen­ty aplikacji, takie jak np. frame­wor­ki czy bib­liote­ki, pogrupowane są w tzw. pacz­ki. Infor­ma­c­je o paczkach są wyko­rzysty­wane przez Composer’a, którego uru­chomie­nie pozwala na pobranie wszys­t­kich niezbęd­nych paki­etów. Nierzad­ko Com­pos­er pozwala na zain­stalowanie określonej aplikacji (wów­czas pacz­ka, oprócz frame­worków i/lub bib­liotek zaw­iera także samą aplikację).

WAŻNE! Ponieważ na ser­w­erze moż­na korzys­tać z różnych wer­sji PHP, ma to wpływ także na sys­tem zarządza­nia paki­eta­mi dla języ­ka PHP. Com­pos­er uruchami­any jest zawsze w wer­sji, która zosta­je automaty­cznie dobrana do wyko­rzysty­wanej na ser­w­erze wer­sji PHP (np. jezeli korzys­tamy z PHP 7.4, to Com­pos­er jest uruchami­any w wer­sji odpowied­niej dla PHP 7.4 itd.).

Plik composer.json

Przyjrzyjmy się przykład­owi uży­cia narzędzia Com­pos­er z aplikacją Word­Press, dla której zdefini­u­je­my paki­et wty­czek lub szablonów, jakie automaty­cznie zostaną umieszc­zone w kat­a­logu /wp-con­tent/­plu­g­ins lub /wp-con­tent/themes, bez koniecznoś­ci ręcznego ich pobiera­nia.

Aby móc korzys­tać z Com­posera, należy utworzyć etyki­etę w postaci pliku JSON o nazwie composer.json, która pobierze paczkę z najnowszą wer­sją aplikacji Word­Press. W naszym przykładzie insta­lac­ja aplikacji zna­j­du­je się w kat­a­logu /wordpress.

Przykład­owy plik composer.json:

{
     „require”: {
          „johnpbloch/wordpress”: „>=5.5”
     },
     „extra”: {
          „installer-paths”: {
               „wp-con­tent/­plu­g­in­s/{$name}/”: [
                    „type:word­press-plu­g­in”
               ],
               „wp-con­tent/themes/{$name}/”: [
                    „type:word­press-theme”
               ]
          },
          „word­press-install-dir”: „word­press”
     },
     „repos­i­to­ries”: [
          {
               „type”: „com­pos­er”,
               „url”: „https://wpackagist.org”
          }
     ]
}

Przed­staw­iony, przykład­owy plik, zaw­iera ele­men­ty:

  • require – poda­je się tu nazwy paki­etów, które mają zostać pobrane; wartość należy podać w for­ma­cie „autor/nazwa”: „wer­s­ja”; dopuszczalne jest również stosowanie tzw. wild­cardów, czyli pobranie wer­sji, np. „>=5.5”;
  • extra – w tym miejs­cu moż­na skon­fig­urować nie­s­tandar­d­owe ścież­ki inta­lacji pobranych zasobów jak, np.: ustaw­ić odręb­ną ścieżkę dla szablonów Word­Pres­sa czy wty­czek oraz nazwę kat­a­logu insta­lacji;
  • repos­i­to­ries – wskazu­je na typ repozy­to­ri­um oraz adres URL, z którego mogą być pobrane pacz­ki, jak np. sko­rzys­tanie z repozy­toriów GIT czy pry­wat­nych; w przy­pad­ku uży­cia Com­posera przy pra­cy z Word­Pressem należy pamię­tać, że sys­tem nie tworzy ofic­jal­nego repozy­to­ri­um, dlat­ego też, w podanym przykładzie wyko­rzys­tano John Bloch Com­pos­er Repo; zale­cane jest zachowanie szczegól­nej ostrożnoś­ci pod­czas korzys­ta­nia z nie­ofic­jal­nych repozy­toriów danych, które nie są pow­iązane z wydaw­cą opro­gramowa­nia.

Przed­staw­iony przykład zaw­iera jedynie kil­ka pod­sta­wowych ele­men­tów. Com­pos­er pozwala na wyko­nanie dużo więk­szej ich iloś­ci.

Sposób użycia Composera

Com­pos­er, na hostin­gu nazwa.pl, dostęp­ny jest jako narzędzie sys­te­mowe, a więc nie ma koniecznoś­ci dodatkowego wyszuki­wa­nia jego ścież­ki dostępu na SSH. Wystar­czy przy­go­tować plik composer.json i rozpocząć insta­lację paki­etów w tym kat­a­logu, w którym plik composer.json został umieszc­zony.

Wdroże­nie composer.json

Gdy plik composer.json został praw­idłowo przy­go­towany, należy uru­chomić go poprzez polece­nie:

composer.phar install

Wywołanie tego polece­nia spowodu­je utworze­nie pliku composer.lock (jeśli nie został wcześniej utwor­zony) oraz wyświ­etle­nie poniższego komu­nikatu:

     No lock file found. Updat­ing depen­den­cies instead of installing from lock file. Use com­pos­er update over com­pos­er install if you do not have a lock file.
Load­ing com­pos­er repos­i­to­ries with pack­age infor­ma­tion
Updat­ing depen­den­cies
Lock file oper­a­tions: 3 installs, 0 updates, 0 removals
     – Lock­ing johnpbloch/wordpress (5.5.3)
     – Lock­ing johnpbloch/­word­press-core (5.5.3)
     – Lock­ing johnpbloch/­word­press-core-installer (2.0.0)
Writ­ing lock file
Installing depen­den­cies from lock file (includ­ing require-dev)
Pack­age oper­a­tions: 3 installs, 0 updates, 0 removals
     – Installing johnpbloch/­word­press-core-installer (2.0.0): Extract­ing archive
     – Installing johnpbloch/­word­press-core (5.5.3): Extract­ing archive
     – Installing johnpbloch/wordpress (5.5.3): Extract­ing archive
Gen­er­at­ing autoload files

Przy pier­wszym uży­ciu, Com­pos­er pobiera wybraną paczkę z zewnętrznego zasobu zdefin­iowanego w require. Dla kole­jnej insta­lacji zostanie wczy­tana jej wer­s­ja z cache (jeżeli wer­sje będą zgodne). Pobrane pacz­ki zostaną sko­pi­owane do kat­a­logu ven­dor. Po insta­lacji, zostanie utwor­zony plik composer.lock, w którym zna­jdą się infor­ma­c­je o aktu­al­nie zain­stalowanych paczkach i ich wer­s­jach. Należy pamię­tać, że pliku composer.lock nie moż­na edy­tować.

Aktu­al­iza­c­ja composer.json

Aktu­al­iza­cję zdefin­iowanej wcześniej pacz­ki wykon­ać moż­na poprzez polece­nie:

composer.phar update

W wyniku tej komendy wyświ­et­lony zostanie komu­nikat, który w tym wypad­ku oznacza, że wszys­tkie pli­ki są aktu­alne.

Load­ing com­pos­er repos­i­to­ries with pack­age infor­ma­tion
Updat­ing depen­den­cies

Noth­ing to mod­i­fy in lock file
Installing depen­den­cies from lock file (includ­ing require-dev)
Noth­ing to install, update or remove
Gen­er­at­ing autoload files
Table of Contents