wtorek, 13 stycznia 2009

Symfony - dzień pierwszy

Przygotowanie środowiska testowego: Debian 4.0r6 + XAMPP 1.7

wget http://heanet.dl.sourceforge.net/sourceforge/xampp/xampp-linux-1.7.tar.gz
tar xvfz xampp-linux-1.7.tar.gz -C /opt

Uruchamianie serwerów poprzez: /opt/lampp/lampp start
Ewentualne podstawowe zabezpieczanie: /opt/lampp/lampp security

W pliku .bashrc użytkownika na którym pracujemy dodajemy linię:
export PATH=$PATH:/opt/lampp/bin/

Następnie przechodzimy do instalacji Symfony:

mkdir -p /home/sfprojects/jobeet
cd /home/sfprojects/jobeet
mkdir -p lib/vendor
cd lib/vendor
wget http://www.symfony-project.org/get/symfony-1.2.2.tgz
tar zxpf symfony-1.2.2.tgz
mv symfony-1.2.2 symfony
rm symfony-1.2.2.tgz
cd ../..
php lib/vendor/symfony/data/bin/check_configuration.php

No i na pierwszy ogień należy w /opt/lampp/etc/php.ini ustawić:
short_open_tag = Off
magic_quotes_gpc = Off
register_globals = Off

I restart serwerów:
/opt/lampp/lampp stop
/opt/lampp/lampp start

Ponowne sprawdzenie:
php lib/vendor/symfony/data/bin/check_configuration.php

Nieźle, ale do pełni szczęścia doinstalujemy Alternative PHP Cache (APC)
Przede wszystkim potrzebujemy paczki developerskiej dla XAMMP'a:
wget http://garr.dl.sourceforge.net/sourceforge/xampp/xampp-linux-devel-1.7.tar.gz
tar xvfz xampp-linux-1.7.tar.gz -C /opt
apt-get install autoconf

Np. w katalogu domowym użytkownika:

wget http://pecl.php.net/get/APC-3.0.19.tgz
tar xvf APC-3.0.19.tgz
cd APC-3.0.19/
/opt/lampp/bin/phpize
./configure
make
make install

W pliku /opt/lampp/etc/php.ini dodajemy poniższe linie:

extension="apc.so"
apc.enabled="1"
apc.shm_size="30"

Ponowny restart serwerów (stop/start) i oby ostatecznie sprawdzamy po stronie konsoli:

cd /home/sfprojects/jobeet/
php lib/vendor/symfony/data/bin/check_configuration.php

Powinno już być bez błędów / ostrzeżeń. Ewentualnie upewniamy się poprzez wywołanie: "php -m" czy moduł APC został załadowany.

Następnie sprawdzamy check_configuration.php poprzez wywołanie z poziomu przeglądarki. Wystarczy skopiować plik i wywołać poprzez wpisanie odpowiedniego URL'a. Jeśli wszystko jest OK zobaczymy coś na kształt:

********************************
* *
* symfony requirements check *
* *
********************************

php.ini used by PHP: /opt/lampp/etc/php.ini


** Mandatory requirements **

OK requires PHP >= 5.2.4
OK php.ini: requires zend.ze1_compatibility_mode set to off

** Optional checks **

OK PDO is installed
OK PDO has some drivers installed: sqlite, pgsql, mysql, sqlite2
OK PHP-XML module installed
OK XSL module installed
OK can use token_get_all()
OK can use mb_strlen()
OK can use iconv()
OK can use utf8_decode()
OK has a PHP accelerator
OK php.ini: short_open_tag set to off
OK php.ini: magic_quotes_gpc set to off
OK php.ini: register_globals set to off
OK php.ini: session.auto_start set to off

Sprawdzamy wersję Symfony:
php lib/vendor/symfony/data/bin/symfony -V

Generujemy szkielet naszego projektu:
php lib/vendor/symfony/data/bin/symfony generate:project jobeet

Powyższe tworzy skrót 'symfony' dzięki czemu mniej wklepujemy w linii komend.
Projekt = zbiór aplikacji korzystających z tego samego modelu danych.

Generujemy szkielet aplikacji 'frontend'
php symfony generate:app --escaping-strategy=on --csrf-secret=UniqueSecret frontend

W pliku konfiguracyjnym dla projektu config/ProjectConfiguration.class.php zmieniamy linię z require_once na:
require_once dirname(__FILE__).'/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php';
co zapewni nam lepszą przenośność projektu na inne serwery.

Aby nasz projekt był widoczny z przeglądarki, na warsztat bierzemy plik /opt/lampp/etc/httpd.conf i na samym końcu dodajemy:

# Ta linia może wystąpić tylko raz
NameVirtualHost 10.0.0.14:8080

Listen 10.0.0.14:8080


DocumentRoot "/home/sfprojects/jobeet/web"
DirectoryIndex index.php

AllowOverride All
Allow from All


Alias /sf /home/sfprojects/jobeet/lib/vendor/symfony/data/web/sf

AllowOverride All
Allow from All



Adres 10.0.0.14 wynika tylko stąd, że środowisko Debian+Symfony jest uruchamiane jako maszyna wirtualna, natomiast sprawdzanie aplikacji odbywać się będzie w ramach fizycznego systemu operacyjnego.

Restartujemy serwery i sprawdzamy jak chula: http://10.0.0.14:8080/index.php/
Następnie sprawdzamy jak działa nasze środowisko developerskie: http://10.0.0.14:8080/frontend_dev.php/ - nie działa.
Komunikat "You are not allowed to access this file. Check frontend_dev.php for more information." otrzymaliśmy z powodu łączenia się z innej maszyny. Edytujemy ten plik, wpisując zamiast 127.0.0.1 adres IP maszyny z której sprawdzać będziemy działanie naszego projektu.

Teoretycznie całe środowisko jest już gotowe. Warto jednak (zgodnie z tutorialem) poświęcić jeszcze 10 min na zapoznanie się z atakami XSS oraz CSRF, a także poznać zagadnienie wersjonowania aplikacji, co też teraz uczynię.

Przede wszystkim należy znaleźć hosting. Z braku doświadczenia wybrałem http://xp-dev.com/. Zakładamy konto np. 'repo'. Logujemy się. W menu Subversion wybieramy Create a new repository. Nadajemy nazwe np. 'jobeet'
Nasze repozytorium znajduje się pod adresem: https://svn.xp-dev.com/svn/repo_jobeet

Przydałby się jakiś klient: apt-get install subversion

I pobierzmy testowo (check out?) nasze puste repozytorium do katalogu jsr:
svn co https://svn.xp-dev.com/svn/repo_jobeet jsr
Jeśli wszystko jest OK, możemy skasować katalog jsr.

Następnie tworzymy standardową strukturę katalogów repozytorium:

svn mkdir -m "utworzona domyslna struktura katalogow" https://svn.xp-dev.com/svn/repo_jobeet/trunk https://svn.xp-dev.com/svn/repo_jobeet/tags https://svn.xp-dev.com/svn/repo_jobeet/branches

Checkout'ujemy pusty katalog trunk/:
cd /home/sfprojects/jobeet
svn co https://svn.xp-dev.com/svn/repo_jobeet/trunk/ .

Czyścimi cache i log:
rm -rf cache/* log/*

Ustawiamy na wszelki wypadek uprawnienia:
chmod 777 cache/ log/

Importujemy katalogi i pliki:
svn add *

Ustawiamy ignorowanie cache:
svn propedit svn:ignore cache
Otworzy się edytor. Wpisujemy * by ignorowana była cała zawartość i zapisujemy.
Podobnie dla katalogu log:
svn propedit svn:ignore log

I ostatecznie importujemy do repozytorium nasz projekt:
svn import -m "import poczatkowy" . https://svn.xp-dev.com/svn/repo_jobeet/trunk

Brak komentarzy:

Prześlij komentarz

Archiwum bloga