Serveur de développement en local, pour les dev oueb
Posté le 27/01/2017
J'ai beau passer 99,9% de mon temps sur des distributions Linux, incluant dans la grande majorité des cas un espace LAMP(1), il me faut assez régulièrement un "véritable" espace de développement pour certains projets.
Sur une base LAMP/WAMP, un simple "http://localhost/monprojetquitue" convient parfaitement. Parfois, une petite modification du fichier host(2) permet d'avoir une jolie URL bien reconnue en "http://monprojetquitue.local" et pouf on en parle plus.
Toutefois, certains projets, généralement un peu plus volumineux, spécifiques et/ou denses, impliquent des configurations particulières. Il pourra s'agir de versions spécifiques, de tests de tâches CRON(3) ou encore de modules Apache particuliers. Mais du coup, avouons le, installer une distribution serveur, se taper la configuration de base pour ensuite poser le projet, c'est passablement gonflant. On a beau faire un boulot de branleur, trop d'inactivité nuis à la consommation de café.
Il y a quelques années, j'étais tombé sur une super solution : Docker. Comme l'évoque l'ami Wikipédia, Docker se résume à "[...] un outil qui peut empaqueter une application et ses dépendances dans un conteneur isolé, qui pourra être exécuté sur n'importe quel serveur Linux" Mais j'avoue qu'à la longue, j'ai très souvent eu l'impression de déployer une machine de guerre pour une simple application de test sur Silex(4).
Au final, j'ai réglé le problème à l'arrache : une petite todo list regroupant les manipulations de base avec un petit serveur Debian(5) installé sous VirtualBox. Je ne présente plus ce superbe outil(6).
Bref. Je vous partage tout ça.
On va partir du principe que vous avez déjà téléchargé-installé-paramétré VirtualBox et récupéré une image iso d'une Debian 8
Les différentes saisies sont à réaliser en ligne de commande
Nous partons du principe que l'adresse IP locale de la machine virtualisée est : 192.168.1.17
Nous partons du principe que l'utilisateur système crée lors de l'installation est : bsp
Nous partons du principe que nous désirons créer cet espace de développement pour une application nommée Watson
Adaptez donc ces informations à votre situation
C'est parti !
~~ coté machine virtuelle
~ installation de sudo & récupération de l'adresse IP de votre machine virtuelle, les commandes sont à saisir dans la fenêtre ouverte VirtualBox après le démarrage de votre machine virtuelle
su root
~ saisir "ifconfig" puis repérer l'adresse IP. Dans notre cas, c'est 192.168.1.17
apt-get install sudo
adduser bsp sudo
reboot
Une fois la machine redémarrée, se connecter en ssh à partir de l'ordinateur hôte (votre ordinateur)
Pour les utilisateurs de Mac et Linux : utilisez directement votre terminal
Pour les utilisateurs Windows : utilisez le logiciel Putty(7)
~~ coté ordinateur hôte, on se connecte
ssh bsp@192.168.1.17
sudo su
~ installation LAMP & paquets requis pour les manipiulations suivantes
apt-get install mysql-server mysql-client apache2 php5 php5-mysql libapache2-mod-php5 phpmyadmin apache2-mpm-itk git vim proftpd
Des étapes de configuration propres à chaque logiciel vont vous être proposées
~ activation de modules Apache
a2enmod userdir rewrite
Note : "userdir" est un module Apache permettant d'avoir un répertoire "web" pour chaque utilisateur système. Assez pratique pour segmenter "1 site/application = 1 utilisateur système = 1 répertoire cible". Le module "rewrite" permet de gérer la réécriture d'URL(8)
~ paramétrage Apache pour avoir une application web = utilisateur système : on édite donc le fichier adapté
vim /etc/apache2/mods-enabled/userdir.conf
~ pour y remplacer le contenu par (les tirets sont bien entendu à supprimer) :
- <IfModule mod_userdir.c>
--- UserDir public_html
--- UserDir disabled root
---
--- <Directory /home//public_html>
------- AllowOverride All
------- Options MultiViews Indexes SymLinksIfOwnerMatch
------- <Limit GET POST OPTIONS>
------------ Order allow,deny
------------ Allow from all
------- </Limit>
------- <LimitExcept GET POST OPTIONS>
------------ Order deny,allow
------------ Deny from all
------- </LimitExcept>
--- </Directory>
- </IfModule>
*~ ajout d'un utilisateur système dédié à notre application
adduser watson
Pensez à garder en mémoire le mot de passe que vous renseignez...
~ création du sous répertoire où sera placé l'application & assigniation de droits adaptés sur le répertoire crée
cd /home/watson && mkdir public_html && chown watson:watson public_html
~ activation de PHP au sein des répertoires utilisateurs, en éditant le fichier :
vim /etc/apache2/mods-available/php5.conf
~ commenter les lignes suivantes en ajoutant un dièse en début de ligne
- <IfModule mod_userdir.c>
--- <Directory /home//public_html>
------ php_admin_value engine Off
--- </Directory>
- </IfModule>
*~ configuration du virtualhost dédié à notre application*
cd /etc/apache2/sites-available/
vim watson.conf
~ y saisir le contenu suivant (les tirets sont bien entendu à supprimer) :
- <VirtualHost :80>
---- ServerName watson.local
---- ServerAlias www.watson.local
----
---- DocumentRoot /home/watson/public_html/
----
---- <IfModule mpm_itk_module>
-------- AssignUserId watson watson
---- </IfModule>
----
---- <Directory "/home/watson/public_html/">
-------- AllowOverride all
-------- Require all granted
---- </Directory>
----
---- ErrorLog ${APACHE_LOG_DIR}/watson-error.log
---- CustomLog ${APACHE_LOG_DIR}/watson-access.log combined
- </VirtualHost>
*Remarque: notre site va "répondre" aux domaines watson.local et www.watson.local/.
~ activation du site dans la configuration Apache
a2ensite watson.conf
~ redémarrage Apache pour prendre en compte nos multiples modifications
service apache2 restart
Côté ordinateur "hôte", on va modifier notre fichier hosts pour rediriger le domaine "watson.local" (et "www.watson.local") vers notre machine virtuelle
~ sur Linux & Cie:
sudo vim /etc/hosts
~ sur Windows : ouverture du bloc note en "administrateur" puis ouverture du fichier "C:\Windows\System32\drivers\etc\hosts"
~ y ajouter les lignes suivantes :
192.168.1.17 watson.local
192.168.1.17 www.watson.local
Et voilà
En saisissant le domaine "www.watson.local" dans votre super navigateur, vous serez automatiquement redirigés sur le "contenu" présent dans le répertoire /home/watson/public_html de votre super serveur virtuel de développement. Pour y déposer votre application et ses fichiers, vous pourrez soit directement utilisé GIT que nous avons installé en début de manipulation, soit passer par votre super logiciel FTP(9).
Pour vous connecter en FTP, il vous suffira de remplir les informations suivantes :
Hôte : watson.local
Utilisateur : watson
Mot de passe : celui que vous avez renseigné lors de la création de l'utilisateur "watson"
En vous connectant, vous serez automatiquement redirigé dans votre répertoire "/home/watson"
Et pouf
---
[1] - Linux Apache MySQL PHP - On pourra aussi parler de WAMP pour une base Windows ou de MAMP pour une base Mac. Ensemble de logiciels permettant de créer des serveurs Web assez basiques.
[2] - Un gros, c'est un fichier livré avec le système d'exploitation de votre machine : il permet de faire une correspondance IP > nom de domaine, avant même d'interroger les serveurs DNS. En modifiant le fichier "host" de votre machine, vous pouvez ainsi ruser pour avoir localement la configuration IP > nom de domaine de votre choix. Quelques infos de plus par ici
[3] - Non ce n'est pas un gros mot. C'est simplement un petit programme tournant sur les systèmes UNIX, permettant l'execution automatique de tâches (scripts, commandes, ...) à un instant donné, avec notamment la possibilité de spécifier une réccurence. Exemples : vider les fichiers temporaires d'un site tous les jours à une heure précise, réaliser une sauvegarde automatique des données du serveur deux fois par jours, ...
[4] - Il s'agit d'un framework PHP, version allégée de Symfony. Nous aurons sûrement l'occasion d'en parler dans une prochaine propa. Plus d'infos sur Silex : http://silex.sensiolabs.org/
[5] - Dans ces cas là, je pars généralement sur une "netinstall" : cela permet de réduire le téléchargement initial et de partir avec une distribution assez légère et de ne récupérer, par Internet, que le nécessaire.
[6] - VirtualBox permet de virtualiser des systèmes d'exploitation sur un ordinateur hôte. Parfois un peu chiant pour gérer certaines subitlités (réseaux & périphériques notamment), je m'en suis beaucoup servi pour avoir un Photoshop tournant sur un Windows, lui même lancé (via VirtualBox) sur mon Linux. Certaines (mauvaises) langues (ou pas) diront que c'est un des rares bon trucs géré par Oracle. https://www.virtualbox.org/
[7] - Site officiel de PuTTY. Compte tenu du développement stagnant de PuTTY, Bros nous propose aussi d'utiliser Kitty
[8] - Pour avoir des URL du type http://www.monsite.com/contact plutôt que http://www.monsite.com/index.php?page=contact (par exemple)
[9] - Vous connaissez bien sûr FileZilla ?
(Photo by Autumn Mott)