2014-10-02

Instalacja Symfony2 w chmurze RedHat'a

Jeśli jeszcze nie kojarzysz nazwy OpenShift to najwyższa pora nadrobić zaległości. RedHat udostępnia kompletnie za darmo możliwość instalacji 3 aplikacji (dla każdej dostajesz konto na serwerze wirtualnym dostępne przez ssh). Wspierane są wszystkie mainstreamowe technologie, od Javy, Rubiego, Pythona, Node.js aż po poczciwego Perla. 

Mnie oczywiście interesuje PHP, obecnie dostępne na openshift w ver. 5.4 ... Na początek wystarczy ;) Po rejestracji na stronie openshift.redhat.com system zachęca do instalacji pierwszej aplikacji. Tworząc nową aplikację w technologii PHP mamy do wyboru dwie możliwości. Skorzystanie z gotowej preinstalowanej aplikacji/frameworka lub wybór wersji PHP i "ręczną" konfigurację środowiska. Pierwsza opcja umożliwia expresowe postawienie szkieletu aplikacji i będzie atrakcyjna dla mniej doświadczonych developerów, lub w przypadku krótkoterminowych projektów, gdzie istotny jest czas. Możemy mieć gotowego WordPressa czy Drupala po jednym kliknięciu. Początkowo ucieszyłem się, że obok takich frameworków jak CakePHP dostępny jest też "od ręki" gear w Symfony2. Niestety okazało się, że jest on skonfigurowany z cardrige'm PHP 5.3 ... cóż trochę słabo...

Jak postawić najnowszą wersję Symfony2 z PHP 5.4 na platformie OpenShift ?

1. Zakładamy nową aplikację "Based on PHP 5.4 Cardridge", niech się śmiesznie nazywa np "polanto" ;)

2. Jeśli jeszcze nie masz skonfigurowanego klucza SSH, koniecznie użyj rhc do konfiguracji ssh na swoim komputerze.

3. OpenShift używa GIT do deploymentu aplikacji, bardzo spodobała mi się opcja autodeploymentu po push'u do repo, ale o tym za chwilę. Najpierw sklonujmy nasze repo do katalogu w, którym będziemy rozwijać aplikację lokalnie: 

$ git clone ssh://541a83925004460525001038@polanto-motyl.rhcloud.com/~/git/polanto.git/ 

4. Pora stworzyć nowy projekt Symfony2 w podkatalogu php aplikacji:

$ cd polanto
$ composer create-project symfony/framework-standard-edition php
$ git add -A
$ git commit -am "Blank Symfony Project"

5. Zanim wypchnę projekt do chmury warto skonfigurować deploy. OpenShift ma bardzo fajną cechę, polegającą na automatycznym deploymencie aplikacji po tym jak wykonasz git push. W przypadku Symfony2 warto jeszcze zadbać o zautomatyzowanie instalacji nowych, lub zupgradowanych pakietów Composera. W tym celu tworzę w podkatalogu ./openshift/action_hooks plik deploy:

---------------------------------------------------------------
#!/bin/bash
# .openshift/action_hooks/deploy

 export COMPOSER_HOME="$OPENSHIFT_DATA_DIR/.composer"

   if [ ! -f "$OPENSHIFT_DATA_DIR/composer.phar" ]; then
       curl -s https://getcomposer.org/installer | php -- --install-dir=$OPENSHIFT_DATA_DIR
   else
       php $OPENSHIFT_DATA_DIR/composer.phar self-update
   fi

 unset GIT_DIR
 cd $OPENSHIFT_REPO_DIR/php
 php $OPENSHIFT_DATA_DIR/composer.phar install

  chmod -R 0777 $OPENSHIFT_REPO_DIR/php/app/cache

  chmod -R 0777 $OPENSHIFT_REPO_DIR/php/app/logs
---------------------------------------------------------------
$ git add -A
$ git commit -am "deploy hook"

Ten skrypt zadba o instalację composera (jeśli go brakuje) a następnie instalację wymaganych pakietów.

6. Push jest tuż za zakrętem jeszcze tylko jeden szczegół. Ten krok nie jest konieczny, ale przyśpieszy deployment w początkowej fazie projektu, kiedy tych push'y może być najwięcej. OpenShift robi nam "niedzwiedzią przysługę" restartując PHP, MySQL i inne serwisy dodane do projektu, przy każdym deploy. Jeśli nie chcemy tego feature'a wystarczy dotknąć marker hot_deploy

$ touch ./openshift/markers/hot_deploy
$ git add -A
$ git commit -am "enable hot deploy"

7. PUSH push push push push push :)

$ git push

Zauważ, że w tle, po stronie serwera instalowane są pakiety composera, aż miło popatrzeć... :)

Kilka rad wójka dobra-rada:
Korzystaj z RHC - życie będzie prostsze!
po ssh najłatwiej połączyć się komendą
$ rhc ssh mojaaplikacja

W przypadku problemów z composerem, zalogować się na konsoli i uruchomić
$ $OPENSHIFT_DATA_DIR/composer.phar self-update 

W przypadku błędów, zapraszam do lektury w tym katalogu:
$ cd $OPENSHIFT_LOG_DIR

404 po pierwszym deploymencie? Zrestartuj php - wykonaj:
$ ctl_app restart

Service Temporarily Unavailable ? Restart PHP!