Suite à mes découvertes de la veille j’ai déployé hier une machine virtuelle avec une distribution Debian 8.3 (mise à jour ensuite en 8.4), Apache 2.4, MySQL 5.5 et PHP 5.6 en mode FastCGI.
Rien de bien sorcier, ce n’est que de l’installation standard d’un LAMP, hormis peut-être pour l’aspect FastCGI, et encore. Si besoin, voilà le fichier /etc/apache2/mods-available/fastcgi.conf correspondant (car c’est en général là qu’il y a des soucis) :
<IfModule mod_fastcgi.c> AddType application/x-httpd-fastphp5 .php Action application/x-httpd-fastphp5 /php5-fcgi Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization <Directory /usr/lib/cgi-bin> Require all granted </Directory> </IfModule>
Et pour vérifier que le socket est au bon endroit :
grep -E '^\s*listen\s*=\s*[a-zA-Z/]+' /etc/php5/fpm/pool.d/www.conf
Qui doit retourner quelque chose comme :
listen = /var/run/php5-fpm.sock
Qu’on retrouve dans le fichier de config fastcgi.conf.
J’ai ensuite mappé le port 8080 vers le port 80 de la VM histoire de pouvoir accéder au serveur Apache. Dans le fichier de configuration Vagrantfile :
# -*- mode: ruby -*- # vi: set ft=ruby : # All Vagrant configuration is done below. The "2" in Vagrant.configure # configures the configuration version (we support older styles for # backwards compatibility). Please don't change it unless you know what # you're doing. Vagrant.configure(2) do |config| # The most common configuration options are documented and commented below. # For a complete reference, please see the online documentation at # https://docs.vagrantup.com. # Every Vagrant development environment requires a box. You can search for # boxes at https://atlas.hashicorp.com/search. config.vm.box = "debian8-php5" # Create a forwarded port mapping which allows access to a specific port # within the machine from a port on the host machine. In the example below, # accessing "localhost:8080" will access port 80 on the guest machine. config.vm.network "forwarded_port", guest: 80, host: 8080 # … end
Puis, j’ai créé une connection avec Sequel Pro pour accéder au serveur MySQL, via une connection SSH, avec les paramètres suivants :
- Hôte : 127.0.0.1
- User : <mysql admin login>
- Password : <mysql admin password>
- Port : défaut (3306)
- Hôte SSH : 127.0.0.1
- User SSH : vagrant
- Clé SSH : récupérer la clé dans le dossier caché .vagrant/machines/default/virtualbox/private_key
- Port SSH : 2222
Me voilà paré avec une config LAMP qui tourne et sur laquelle j’ai installé un Dotclear tout neuf après avoir créé une base de données avec Sequel Pro.
Clonage de la VM
J’ai ensuite pris soin de cloner cette VM fonctionnelle pour pouvoir y revenir en cas de souci avec mes tests ultérieurs.
On commence par arrêter la VM :
vagrant halt
Suivi d’un :
vagrant package --output debian8-php5.box
Pour créer une copie compressée de la VM que j’ai ensuite déplacé dans un nouveau répertoire. J’ai ajouté la copie à la liste des VM connues par vagrant :
vagrant box add debian8-php5 debian8-php5.box
Une vérification suivie d’une initialisation :
vagrant box list vagrant init
Puis modifier le nouveau fichier Vagrantfile en modifiant la ligne :
config.vm.box = "debian8-php5"
Et voilà, vous avez maintenant deux VM identiques, chacune dans son répertoire. Je vais donc conserver cette copie soigneusement et revenir à l’originale pour la suite…
Upgrade PHP 7
Je relance la première VM avec un vagrant up, suivi d’un vagrant ssh pour m’y connecter.
Cette récente version de PHP 7 n’étant pas encore dans les dépôts stable de Jessie (petit nom de la Debian 8), du coup il faut compléter les sources de dépôts (fichier /etc/apt/sources.list :
# Dotdeb stable deb http://packages.dotdeb.org jessie all deb-src http://packages.dotdeb.org jessie all
Puis récupérer et installer la clé GPG de Dotdeb :
wget https://www.dotdeb.org/dotdeb.gpg apt-get add dotdeb.gpg
Puis un :
apt-get update && apt-get upgrade
Suppression de PHP 5
On commence par virer PHP 5 de la machine, puisque cette version ne servira plus :
apt-get purge php5-*
Pour info voilà les paquets qui ont été supprimés (ça peut servir s’il faut revenir en arrière) :
dh-php5* libapache2-mod-php5* php-pear* php5-cli* php5-common* php5-curl* php5-dev* php5-fpm* php5-gd* php5-imagick* php5-json* php5-mcrypt* php5-memcache* php5-mysql* php5-readline* php5-tidy* php5-xmlrpc* php5-xsl* pkg-php-tools*
Installation de PHP 7
On poursuit en installant PHP 7 (la liste des modules est à ajuster en fonction de vos besoins) :
apt-get install php7.0 php7.0-fpm php7.0-gd php7.0-cli php7.0-common php7.0-curl php7.0-opcache php7.0-json php7.0-mysql php7.0-mcrypt php7.0-xsl php7.0-imagick php7.0-tidy php7.0-xmlrpc
Puis on modifie le fichier de configuration de FastCGI, /etc/apache2/mods-available/fastcgi.conf :
<IfModule mod_fastcgi.c> AddType application/x-httpd-fastphp .php Action application/x-httpd-fastphp /php-fcgi Alias /php-fcgi /usr/lib/cgi-bin/php FastCgiExternalServer /usr/lib/cgi-bin/php -socket /run/php/php7.0-fpm.sock -pass-header Authorization <Directory /usr/lib/cgi-bin> Require all granted </Directory> </IfModule>
Et on vérifie que le socket correspond :
grep -E '^\s*listen\s*=\s*[a-zA-Z/]+' /etc/php/7.0/fpm/pool.d/www.conf
Qui doit normalement retourner :
listen = /run/php/php7.0-fpm.sock
Qu’on retrouve dans le fichier de configuration de FastCGI.
Un petit redémarrage des services :
service apache2 restart service php7.0-fpm restart
Et voilà ce que donne la vérif en ligne de la version de php
php --version
Qui retourne :
PHP 7.0.5-1~dotdeb+8.1 (cli) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
Au passage le fichier de configuration de PHP a changé de place, il se trouve maintenant dans /etc/php/7.0/fpm/php.ini, donc pensez à y reporter les réglages faits pour la version précédente.
Et ça roule \o/
1 De Philippe -
Très intéressant, merci pour la pédagogie, j’essaie de suivre…
Blague à part, j’ai aussi une VirtualBox avec la même configuration, mais je me pose la question de l’utilité de Vagrant ?
J’ai bien vu une réponse de Pep dans le billet précédent, et tenté de comprendre, mais si tu pouvais l’expliquer aussi simplement que le reste…
2 De Franck -
Vagrant c’est un truc de feignasse, mais ça simplifie aussi pas mal. En gros l’appli s’occupe de télécharger et initialiser une VM VirtualBox avec ce qu’il faut pour t’y connecter en SSH avec une clé privée.
Mais pas seulement, tu peux aussi faire en sorte qu’une fois la VM initialisée (à partir d’une box comme une debian 8) il s’occupe d’installer et configurer des trucs en plus, genre Apache, MySQL, PHP et pourquoi pas un Dotclear ! C’est ce que Pep indiquait en causant de provisioning.
Et puis enfin Vagrant permet de mapper les ports (mais pas seulement, voir la doc sur le networking) pour avoir accès à ta VM depuis l’extérieur.
Pour résumer il ne fait rien de plus que ce que tu pourrais faire à la mano avec VirtualBox, sauf qu’il se tape tous les trucs chiants, en gros.
3 De Biou -
Cool ! Merci pour les tests et la doc, yapluka en gros ;)
4 De Franck -
Biou, c’était un peu l’idée, de faire des tests et d’avoir une ToDo sous la main. Par contre je n’ai pas testé l’upgrade de la distribution de Debian 7 en Debian 8 ; je me demande si c’est nécessaire ou pas…