Rechercher dans ce blog

Chargement...

vendredi 13 novembre 2009

Install Symfony sur Serveur Privé 1and1 : complet !

Point de départ : aucun !!
J'avais tenté - sans succès - d'uploader mon application Symfony qui tournait en local (Mac OSX, Apache 2, MAMP Pro) sur un Serveur Privé. Outre le fait que je n'y suis pas arrivé, le transfert de TOUS les petits fichiers de Symfony était extrèmement long ...

Aujourd'hui, je me suis dit : installons une appli Symfony DIRECTEMENT sur le serveur distant par SSH !

Configuration côté Plesk
Mon Serveur privé a une interface Plesk 9, CentOs, php 5.1.6.
Je crée un compte client, dans lequel je crée mon domaine toto.net.
Si je vais à l'URL : http://www.toto.net, je vois la "Default Plesk Page". Normal.

Configuration côté SSH : php à jour
J'ouvre ma console SSH et me connecte en administrateur à mon Serveur Privé 1and1.
Si YUM était installé, ce serait cool, je pourrais upgrader mon php ! Je tente :
[root@ip-vds ~] yum upgrade
= listing !! Yum est installé !!
Hmm... après avoir testé "php -v", la version est toujours à 5.1.6... je crois que j'ai upgradé ce qui était déjà sur le Serveur. il faut donc que j'importe la dernière version de php.

[root@ip-vds ~]# wget -q -O - http://www.atomicorp.com/installers/atomic.sh | sh

j'obtiens :
Atomic Archive installer, version 1.1
Configuring the [atomic] yum archive for this system

Installing the Atomic GPG key: OK
Downloading atomic-release-1.0-10.el5.art.noarch.rpm: OK

Would you like to add the Plesk yum repository to the system?

Enable Plesk repository? (y/n) [Default: n]: n

 Nota : j'ai répondu "non" à la question du Plesk Repository.
De nouveau : yum upgrade
= un long listing puis "Complete!"
php -v
= 5.2.11
Parfait, j'ai la dernière version de php :-)

Installation côté SSH : télécharge et installe Symfony
je me place dans le repertoire httpdocs :
[root@ip-vds /]# cd var/www/vhosts/toto.net/httpdocs/

je crée une suite de répertoires :
[root@ip-vds httpdocs]# mkdir -p app_symfony/lib/vendor

je me place dans le rep. vendor pour télécharger puis décompresser l'archive Symfony :
[root@ip-vds vendor]# wget http://www.symfony-project.org/get/symfony-1.2.9.tgz
= super rapide !!

je décompresse :
[root@ip-vds vendor]# tar zxpf symfony-1.2.9.tgz
 
Je vérifie que j'ai bien DEUX fichiers (le fichier et son archive)
[root@ip-vds vendor]# ls
= symfony-1.2.9  symfony-1.2.9.tgz

je renomme le fichier décompressé :
[root@ip-vds vendor]# mv symfony-1.2.9 symfony
je vire l'archive :
[root@
ip-vds vendor]# rm symfony-1.2.9.tgz
= rm: remove regular file `symfony-1.2.9.tgz'? y

il ne reste plus qu'UN DOSSIER symfony qui servira à générer une application
[root@
ip-vds vendor]# ls
= symfony

Installation côté SSH : Crée un projet Symfony puis une application Symfony
Le dossier Symfony est en bonne place pour créer un projet Symfony.
Après avoir vérifié que mon fichier /etc/php.ini a bien le safe_mode=Off, je génère mon projet :
[root@
ip-vds app_symfony]# php lib/vendor/symfony/data/bin/symfony generate:project toto

Nota : Un raccourci "symfony" a été créé à la racine de mon projet pour les commandes futures !! Comme par exemple :
[root@
ip-vds app_symfony]# php symfony -V
= symfony version 1.2.9 (/var/www/vhosts/toto.net/httpdocs/app_symfony/lib/vendor/symfony/lib)

puis je génère la structure de mon application Symfony:
[root@
ip-vds app_symfony]# php symfony generate:app --escaping-strategy=on --csrf-secret="Unique$ecret" frontend

A ce stade, tous les fichiers de mon application Symfony sont créés. Si je veux transférer mon application qui tourne en local, je n'aurais qu'à transférer seulement :
- les dossiers de /apps
- les fichiers de config
- /web
- éventuellement des plugins ajoutés
MAIS : je n'aurai pas à transférer tous les fichiers /dossiers du dossier /lib :-)

Apache : pointe vers mon site !
Mon application est créée mais Apache ne le sait toujours pas !! Il pointe désespérement vers httpdocs ... Il faut maintenant modifier le DocumentRoot :

Dans le dossier /var/www/vhosts/toto.net/conf, je crée - à côté de "httpd.include" - le fichier  "vhost.conf".
Contenu de ce fichier :
DocumentRoot /var/www/vhosts/toto.net/httpdocs/app_symfony/web
ServerName toto.net
<Directory /var/www/vhosts/toto.net/httpdocs/app_symfony/web>
  AllowOverride All
  Allow from All
  <ifModule sapi_apache2.c>
    php_admin_value open_basedir none
  </IfModule>
  <IfModule mod_php5.c>
    php_admin_value open_basedir none
  </IfModule>
</Directory>

Alias /sf /var/www/vhosts/toto.net/httpdocs/app_symfony/lib/vendor/symfony/data/web/sf
<Directory /var/www/vhosts/toto.net/httpdocs/app_symfony/lib/vendor/symfony/data/web/sf>
  AllowOverride All
  Allow from All
</Directory>
La première partie va faire pointer Apache vers le dossier "web" de mon application "app_symfony".
La seconde crée un alias pour que Symfony aille chercher images et Css pour afficher les éléments de son interface de développement.
Nota : je n'ai pas encadré ce code avec car ce fichier va être inclus dans httpd.include à l'intérieur de ces balises.

Il ne faut rien rajouter "à la main" dans le fichier "httpd.include" car Plesk le regénère à chaque nouveau domaine, alias rajouté ... Il faut donc lui demander de rajouter un Include lui-même :
/usr/local/psa/admin/sbin/websrvmng --reconfigure-vhost --vhost-name=toto.net

puis on redémarre le serveur :
/etc/init.d/httpd restart

On tape alors http://www.toto.net et la page par défaut de Symfony s'affiche : Symfony Project created !!

Ne pas oublier les autorisations !
Dès que l'on va vouloir modifier les CSS, le dossier /apps, ... on va s'apercevoir que l'on ne peut rien transférer par ftp !!

Pourquoi ?
....
Parce que l'on a installé Symfony par SSH, donc en mode root, donc : tous les fichiers/dossiers de "app_symfony" ont les droits de root et appartiennent au groupe root !
Par conséquent, on ne va pas pouvoir transférer en ftp avec les droits de du groupe psaserv (=groupe de Plesk).

Vérifions cela en demandant les droits du répertoire "app_symfony" :
[root@ip-vds httpdocs]# ls -l app_symfony/
=
drwxr-xr-x 3 root root 4096 nov 13 02:31 apps
drwxrwxrwx 3 root root 4096 nov 13 03:01 cache
drwxr-xr-x 2 root root 4096 nov 13 02:29 config
drwxr-xr-x 3 root root 4096 nov 13 03:01 data
drwxr-xr-x 2 root root 4096 nov 13 02:29 doc
drwxr-xr-x 3 root root 4096 nov 13 02:24 lib
drwxrwxrwx 2 root root 4096 nov 13 02:29 log
drwxr-xr-x 2 root root 4096 nov 13 02:29 plugins
-rwxrwxrwx 1 root root  446 nov 13 02:29 symfony
drwxr-xr-x 5 root root 4096 nov 13 02:29 test
drwxr-xr-x 6 root root 4096 nov 13 02:31 web

Modifions RÉCURSIVEMENT (= le répertoire et ses sous-répertoires) les droits du dossier  "app_symfony" :
[root@ip-vds httpdocs]# chown -R user.groupe app_symfony/
dans mon cas :  chown -R tintin45vu.psaserv app_symfony/

vérifions que "user.groupe" a bien été appliqué aux éléments :
[root@ip-vds httpdocs]# ls -l app_symfony/ 
=

drwxr-xr-x 3 tintin45vu psaserv 4096 nov 13 02:31 apps
drwxrwxrwx 3 tintin45vu psaserv 4096 nov 13 03:01 cache
drwxr-xr-x 2 tintin45vu psaserv 4096 nov 13 02:29 config
drwxr-xr-x 3 tintin45vu psaserv 4096 nov 13 03:01 data
drwxr-xr-x 2 tintin45vu psaserv 4096 nov 13 02:29 doc
drwxr-xr-x 3 tintin45vu psaserv 4096 nov 13 02:24 lib
drwxrwxrwx 2 tintin45vu psaserv 4096 nov 13 02:29 log
drwxr-xr-x 2 tintin45vu psaserv 4096 nov 13 02:29 plugins
-rwxrwxrwx 1 tintin45vu psaserv  446 nov 13 02:29 symfony
drwxr-xr-x 5 tintin45vu psaserv 4096 nov 13 02:29 test
drwxr-xr-x 6 tintin45vu psaserv 4096 nov 13 02:31 web

On peut maintenant transférer nos fichiers par ftp.
Nota : on n'oubliera pas ensuite de vider le cache :
[root@
ip-vds app_symfony]# php symfony cc

1 commentaires:

Adrien a dit…

Hi!

If you plan to put more than one SF app on your server, each one of course in a different vhost, you should install symfony in a more global directory.

With pear, just type :
pear channel-discover pear.symfony-project.com
then
pear install symfony/symfony
and it will be installed in /usr/local/PEAR and the symfony command will be available in your environment.