Environnement de dev hors ligne

IMG_20170614_071154.jpg

::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.

Capture_du_2017-07-16_21-49-47.png

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

1. Le lundi, juillet 17 2017, 07:40 par Da Scritch

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.

2. Le lundi, juillet 17 2017, 09:42 par Franck

Ton environnement swagger m'intéresse. Tu installes et utilises ça comment localement ?

3. Le lundi, juillet 17 2017, 14:13 par gnieark

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.

4. Le vendredi, juillet 21 2017, 08:54 par Franck

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 ;-)

Page top