Environnement de dev hors ligne
::TOC::
Navetteur SNCF depuis plus d'un an, mes méthodes de développement des projets personnel se sont adaptées.
La 3G/4G partagée avec mon PC portable dans le train n'est suffisamment stable ni pour faire du dev sur un serveur distant ni des actions d'administration système linux (même via mosh). [1]
Je fais mumuse en quasi local et push de temps en temps.
Vous avez donc compris l'objectif de ce tutoriel: Installer sur mon PC portable un serveur web local et la documentation hors ligne des langages que j'utilise. Plus en détail:
- Serveur web apache pour simplifier
- PHP 7 + mysql
- Le serveur web fonctionne avec le même user que moi, C'est un serveur de dev. Je veux me simplifier la gestion des droits sur les fichiers. Et d'ailleurs, les répertoires servant de racine aux vitrualhosts se trouvent dans mon dossier user. Comme ça, j'y vais directement avec mon éditeur préféré[2].
- J'ai plusieurs projets en cours. Plusieurs VHOSTS locaux
- La documentation hors ligne et SWAGGER editor.
/!\ J'évoque bien un environnement de dev, limité à mon ordinateur portable. Pour un serveur web en production, certains points décrits ici sont à ne surtout pas faire! Si je devais faire un environnement de production, comme le serveur hébergeant ce blog, ce serait NGINX + PHP7-FPM.[3]
Environnement
Ubuntu 17.04, mais ce qui va suivre fonctionnera (en adaptant un chouilla) sur d'autres distributions.
Évidemment, dans la suite, lorsque j'utilise l'user "gnieark" ou le chemin "/home/gnieark/....", Vous adaptez avec votre user unix hein!
Installer LAMP
La base
sudo apt-get install apache2 php mysql-server libapache2-mod-php php-mysql git
Les modules
Accessoirement, pour mes besoins, j'ai installé:
sudo apt-get install php-curl php-mbstring php-zip php7.0-xml #activer le mod rewrite sudo a2enmod rewrite sudo /etc/init.d/apache2 restart
Configuration
Arborescence / résolution de noms
Je vais créer 4 vhosts pour le moment[4]
Créer les répertoires (les actions suivantes sont faites en tant que "gnieark", pas en tant que root)
cd ~ mkdir www cd www mkdir default mkdir dotclear mkdir swagger mkdir botsarena #au passage on s'installe si on veut phpmyadmin wget https://files.phpmyadmin.net/phpMyAdmin/4.7.2/phpMyAdmin-4.7.2-all-languages.zip unzip phpMyAdmin-4.7.2-all-languages.zip mv phpMyAdmin-4.7.2-all-languages phpmyadmin #Installer swagger (Ne le faites pas si vous n'en avez pas l'utilité) git clone https://github.com/swagger-api/swagger-editor.git swagger #mettre des fichiers qui permettront de vérifier que ça marche echo "dotclear" > dotclear/index.html echo "botsarena">botsarena/index.html touch default>index.html
- dotclear parcequ'en ce moment je fais mumuse à developper un plugin pour dotclear
- Swagger pour héberger localement Swagger editor qui me sert pour le projet précédent
- botsarena pour le fun
Afin que ça marche, je veux que les noms de domaines suivants:
- dotclear.localhost
- swagger.localhost
- botsarena.localhost
- phpmyadmin.localhost
soient résolus par mon PC en leur attribuant l'adresse IP locale 127.0.0.1
Dans ce but, je modifie la première ligne de mon fichier[5] /etc/hosts comme ceci:
127.0.0.1 localhost dotclear.localhost swagger.localhost botsarena.localhost phpmyadmin.localhost
changer l'user apache
Éditez le fichier /etc/apache2/envvars
Commentez les lignes définissant l'user et le group et remettez les avec votre user. Comme ceci.
#export APACHE_RUN_USER=www-data #export APACHE_RUN_GROUP=www-data export APACHE_RUN_USER=gnieark export APACHE_RUN_GROUP=gnieark
/etc/apache2/apache2.conf
Dans le fichier /etc/apache2/apache2.conf
Trouvez le bloc
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
On va y changer le chemin et la valeur AllowOverride afin d'autoriser les .htaccess comme ceci:
<Directory /home/gnieark/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
Créer différents Vhosts
Je remplace tout le fichier /etc/apache2/sites-available/000-default.conf par celui ci dessous qui contient la configuration minimaliste de chaque vhost.
<VirtualHost *:80> #default vhost #ServerName www.example.com ServerAdmin webmaster@localhost DocumentRoot /home/gnieark/www/default ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> <VirtualHost *:80> ServerName dotclear.localhost ServerAdmin webmaster@localhost DocumentRoot /home/gnieark/www/dotclear ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> <VirtualHost *:80> ServerName botsarena.localhost ServerAdmin webmaster@localhost DocumentRoot /home/gnieark/www/botsarena ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> <VirtualHost *:80> ServerName swagger.localhost ServerAdmin webmaster@localhost DocumentRoot /home/gnieark/www/swagger ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> <VirtualHost *:80> ServerName phpmyadmin.localhost ServerAdmin webmaster@localhost DocumentRoot /home/gnieark/www/phpmyadmin ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Appliquer les changements:
sudo /etc/init.d/apache2 restart
Je vérifie que ça marche en me rendant sur
http://dotclear.localhost/
et les autres sites locaux définis.
C'est OK.
Voilà, à ce niveau, j'ai mon environnement de dev, avec un documentRoot inclus dans mon répertoire home et un serveur web qui utilise mon uid unix. Ca va me faciliter les "git clone", "git push" et autres.
Documentation hors ligne
La meilleure solution que j'ai trouvée est le service devdoc.io. Il permet un mode hors ligne.
Installer Dotclear
Ce n'est pas l'objet de ce tuto en fait, mais tant que j'y suis:
Préparer une base de données:
mysql -u root -p
Puis dans le prompt mysql:
CREATE DATABASE dotclear; GRANT ALL ON dotclear.* TO 'dotclear'@'localhost' IDENTIFIED BY 'dcpwd';
cd /home/gnieark/www/dotclear rm * wget https://download.dotclear.org/loader/dotclear-loader.php
Créer le fichier /home/gnieark/www/dotclear/.htaccess suivant:
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*) index.php/$1 RewriteRule ^index.php$ index.php/
RDV avec un navigateur à l'URL http://dotclear.localhost et suivre les indications
Une fois Dotclear installé, dans les parametres avancés du blog, changez la l'Url du blog par: http://dotclear.localhost/ et la méthode de lecture des URL par "PATH_INFO".
Notes
[1] J'ai pendant un moment remis en cause la qualité de freeMobile sur ce point, mais je me suis aperçu qu'avec une clef Orange, c'était la même non qualité de service sur la ligne Rouen Paris
[2] kate
[3] Nginx / Apache même combat, mais le mode de paramétrage du premier force à être plus fin et rigoureux. Par exemple, on va vraiment définir uniquement (via des regex) quels sont les seuls fichiers php qui pourront être interprétés. De plus, je n'installe pas PHPmyAdmin en prod
[4] Le vhost default n'est pas compté
[5] Il n'est pas possible d'utiliser de wildcard dans le fichier hosts. Et je ne souhaite pas ajouter un résolveur local dans ce but.
Commentaires
Non, surtout pas PHPMyAdmin : c'est mal fichu et trouvé de partout. Je te recommande http://adminer.org à la place : il sait aussi manipuler PostGres (que je te recommande d'utiliser à la place de PHPMyAdmin), et se déploie/déinstalle en un seul fichier.
Et par défaut, passe au https: // notamment pour travailler correctement tes CSP.
Ton environnement swagger m'intéresse. Tu installes et utilises ça comment localement ?
Hello Franck
lors d'un de tes tours de moto, passe au hackerspace à Rouen je t'expliquerai ;) j
Oui, j'utilise swagger Editor localement. Mais c'est la même chose que ça http://editor.swagger.io/#/ Il fonctionne localement malgré l'absence de serveur node js. Je pense que ça me désactive certaines fonctionnalités qui ne sont pas très utiles.
Installer un serveur node.js n'est pas très compliqué je pense, si vraiment ça fait défaut.
Quoi qu'il en soit, je note la suggestion et dès que je passe dans le coin je bip ;-)