Introduction
Le besoin est simple : avoir un serveur web modulable, configurable, indépendant de sa machine de travail et le plus proche possible des configurations proposées par les hébergeurs pro.
Ce tuto va vous permettre de créer une machine virtuelle avec un serveur web, un serveur de bases de données (avec phpMyAdmin) et un serveur FTP pour transférer vos fichiers.
Ce tuto fait parti d’un ensemble qui conduit à créer une infrastructure de serveurs web avec différents rôles : “[Tuto – Infrastructure Web – Debian 8] – Présentation et objectifs”.
Vous devez avoir préparé et cloné la machine gabarit pour continuer.
Voir “[Tuto – Infrastructure Web – Debian 8] – La machine gabarit” puis « [Tuto – Infrastructure Web – Debian 8] – Cloner et préparer la machine gabarit« .
Vous devez avoir des connaissances sur l’utilisation de Linux via une connexion SSH ainsi qu’une certaine aisance avec les commandes d’un shell Linux.
Comptez env. 1h de configuration en partant d’une VM fraichement clonée et paramétrée sur votre réseau.
… et encore, je suis large !
Modifications et mises à jour du document
27/07/2005 : Ajout du bonus 2
27/07/2015 : Changement d’emplacement des fichiers de configuration pour le site de test.
27/07/2015 : Ajout des commandes de modifications rapides du fichier de configuration Apache pour le site de test.
26/07/2015 : Ajout des commandes de modifications rapides du fichier /etc/vsftpd.conf
17/07/2015 : Ajout activation de modules Apache, ajout configurations supplémentaires dans php.conf
15/07/2015 : Publication initiale
Avertissement
Cette machine est construite pour vous permettre de créer des sites web dans un environnement de test, le plus proche possible d’un serveur de production se rapprochant d’un serveur mutualisé chez un hébergeur comme 1&1.
Bien qu’elle possède (presque) tout d’un serveur web mutualisé voir dédié, elle n’est pas à utiliser en production puisqu’elle ne possède aucun moyen de défense contre d’éventuelles intrusions.
Par conséquent, vous êtes seul responsable si vous vous contentez de suivre ce tutoriel pour une mise en ligne d’un serveur web sur internet avec un accès public.
Vous voilà averti, passons aux choses sérieuses.
Installer le serveur Web
Apache
Utilisons Apache, un serveur web très répandu bien que Nginx commence à bien faire parler de lui.
Je vais installer Apache MPM ITK, une variante d’Apache qui est multi-thread et surtout permet d’utiliser des UID et GID différents pour plus de sécurité.
1 |
command apt-get install apache2-mpm-itk |
Une fois l’installation terminée, vous pouvez tester votre serveur.
Ouvrez un navigateur web, et utilisez cette adresse : http://10.0.0.100 (ou l’ip que vous avez configurée).
Prenez le temps de consulter cette page, elle contient des informations utiles pour ajouter un site web.
Le site par défaut est placé dans le répertoire /var/www/html/
Quelques modules à activer :
1 2 |
command a2enmod rewrite command a2enmod headers |
PHP
Nous allons utiliser PHP5-FPM qui permet d’exécuter des threads php indépendant d’un site web à l’autre avec des utilisateurs différents.
Pour pouvoir utiliser cette version de php, il faut ajouter le module Apache fatcgi :
1 2 3 |
command apt-get install libapache2-mod-fastcgi command a2enmod actions fastcgi command service apache2 restart |
Puis installons PHP5-FPM avec déjà des modules utiles pour la plupart des sites web :
1 |
command apt-get install php5-fpm php5-mysql php5-mcrypt php5-curl php5-gd php5-xsl php5-xmlrpc php5-imagick libgd-tools libmcrypt-dev mcrypt php-pear libgd2-xpm-dev php5-dev |
PHP5-FPM fonctionne avec des fichiers pool qui contiennent la configuration de PHP5-FPM pour un site donné.
Il faut un pool par site web.
Par défaut, le pool www.conf est créé dans le répertoire /etc/php5/fpm/pool.d.
Créez un fichier /var/www/html/phpinfo.php :
1 |
<?php phpinfo(); ?> |
Pour le moment, Apache n’a pas encore les directives pour transférer les fichiers php à PHP5-FPM qui les interprétera.
Donc si vous appelez le fichier dans votre navigateur vous aurez une page vide.
Éditez le fichier /etc/apache2/sites-enabled/000-default.conf et ajoutez ces lignes après « DocumentRoot »
1 2 3 4 5 6 7 8 9 10 11 |
<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 -idle-timeout 3600 -socket /var/run/php5-fpm.sock -pass-header Authorization ### Apache 2.4+ ### <Directory /usr/lib/cgi-bin> Require all granted </Directory> ### </IfModule> |
Relancez Apache et PHP5-FPM :
1 2 |
service php5-fpm restart service apache2 restart |
Rafraichissez votre navigateur :
MySQL
L’installation de MySQL est relativement simple :
1 |
command apt-get install mysql-server mysql-client |
Durant l’installation, vous devez fournir le mot de passe root qui devra être différent de l’utilisateur root du système.
La configuration de MySQL se gère dans le fichier /etc/mysql/my.cnf
Par défaut, la configuration est correcte pour un serveur de développement ou de recettage.
Vérifiez que le serveur est disponible :
1 |
command mysql -u root -p |
Saisissez le mot de passe root défini à l’installation.
Résultat :
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 43 Server version: 5.5.43-0+deb8u1 (Debian) Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> |
Votre serveur fonctionne. Tapez « exit » pour quitter le client MySQL.
La bonne habitude à prendre est de sécuriser un minimum votre serveur MySQL :
1 |
command mysql_secure_installation |
1 2 3 4 |
Change the root password? [Y/n] n Remove anonymous users? [Y/n] y Disallow root login remotely? [Y/n] y Reload privilege tables now? [Y/n] y |
phpMyAdmin
phpMyAdmin va permettre de gérer vos bases de données via un navigateur.
1 |
command apt-get install phpmyadmin |
Bien sûr vous pouvez également procéder à une installation manuelle via le site phpMyAdmin.
Mais vous devrez vous-même assurer les mises à jour.
Sélectionnez « apache2 » :
phpMyAdmin a besoin d’une base de données pour fonctionner correctement, mais ce n’est pas obligatoire.
Sélectionnez « Oui » et validez.
Vous devez donner l’accès root, du moins temporairement, pour configurer la base de données de phpMyAdmin.
Attention, l’écran qui arrive après n’est pas pour valider le mot de passe.
Ne ressaisissez pas le mot de passe root !!
Laissez phpMyAdmin générer un mot de passe aléatoire, c’est plus « secure » :
Une fois l’installation terminée, vous pouvez accédez à phpMyAdmin via l’url : http://10.0.0.100/phpmyadmin
Connectez-vous avec l’utilisateur root et le mot de passe configuré à l’installation pour valider l’accès :
Vous avez maintenant la main pour créer et gérer vos bases de données sur votre serveur lamp.
vsFTPd
vsFTPd permet d’avoir accès à votre serveur web par FTP.
Je vais vous montrer comment installer rapidement une connexion FTP non sécurisée (et donc à ne pas utiliser sur un serveur avec un accès public).
1 |
command apt-get install vsftpd |
Le fichier de configuration est : /etc/vsftpd.conf
Faites-en une copie au cas où…
1 |
cp /etc/vsftpd.conf /etc/vsftpd.conf.backup |
Ouvrez ce fichier et apportez les modifications suivantes.
Si nécessaire, ajouter les lignes manquantes à la fin du fichier.
1 2 3 4 5 6 7 8 9 |
listen=YES listen_ipv6=NO write_enable=YES local_umask=022 chroot_local_user=YES ls_recurse_enable=YES allow_writeable_chroot=YES local_root=/home/$USER user_sub_token=$USER |
Vous pouvez exécuter ces commandes pour modifier rapidement le fichier :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
command sed -i \ -e 's/^[#]*\(listen=\).*/\1YES/' \ -e 's/^[#]*\(listen_ipv6=\).*/\1NO/' \ -e 's/^[#]*\(write_enable=\).*/\1YES/' \ -e 's/^[#]*\(local_umask=\).*/\1022/' \ -e 's/^[#]*\(chroot_local_user=\).*/\1YES/' \ -e 's/^[#]*\(ls_recurse_enable=\).*/\1YES/' \ '/etc/vsftpd.conf' command echo " allow_writeable_chroot=YES local_root=/home/\$USER user_sub_token=\$USER " >> /etc/vsftpd.conf |
Redémarrez le service vsftpd :
1 |
service vsftpd restart |
Ouvrez un client FTP comme FileZilla ou WinSCP (pour windows uniquement).
Dans la barre de connexion rapide, tapez l’IP du serveur et les identifiants de connexion de l’utilisateur configuré à l’installation du serveur :
Vous allez probablement avoir ce message d’erreur :
1 2 3 4 5 6 7 8 |
Statut : Connexion à 10.0.0.100:21... Statut : Connexion établie, attente du message d'accueil... Statut : Serveur non sécurisé, celui-ci ne supporte pas FTP sur TLS. Commande : USER jbnet-user Réponse : 331 Please specify the password. Commande : PASS ******** Réponse : 500 OOPS: vsftpd: refusing to run with writable root inside chroot() Erreur : Erreur critique : Impossible d'établir une connexion au serveur |
Pas de panique, c’est normal puisque nous avons chrooté les utilisateurs. C’est à dire que nous avons demandé à vsFTPd « d’enfermer » les connexions FTP dans le répertoire racine de chaque utilisateur. Ils ne peuvent donc pas aller n’importe où sur le serveur (avec les conséquences qu’on peut aisément imaginer !)
Il faut donc modifier les droits du répertoire home de l’utilisateur de 755 en 700 :
1 |
chmod 700 /home/jbnet-user/ |
Retentez une connexion FTP et là tout va bien :
Astuce : pour afficher les fichiers cachés dans FileZilla, menu « Serveur » puis « Forcer l’affichage des fichiers cachés ».
Créer un hébergement web
Maintenant que nous avons tout ce qu’il faut pour travailler, nous allons voir comment créer un hébergement pour un site web sur notre serveur lamp.
Dans ma console ssh, je vais utiliser 2 variables qui éviteront de me tromper et de gagner du temps par des copier/coller directement de cette page vers ma console ssh :
1 2 3 |
myuser="jbnet-user" mywebsite="test" mydomain="jbnet.lan" |
Dans l’exemple, je vais créer un site web « test.jbnet.lan » dans le répertoire /home de l’utilistateur « jbnet-user ».
Création du répertoire racine
A l’aide de FileZilla, créez l’arborescence suivante à la racine de votre compte.
1 2 3 4 5 |
--/test --/conf --/html --/log --/tmp |
Ou en ssh :
1 2 3 4 5 |
command mkdir -p /home/${myuser}/${mywebsite}/conf command mkdir -p /home/${myuser}/${mywebsite}/html command mkdir -p /home/${myuser}/${mywebsite}/log command mkdir -p /home/${myuser}/${mywebsite}/tmp command chown -R ${myuser}:${myuser} /home/${myuser}/${mywebsite} |
Dans le répertoire /test/html, créez le fichier phpinfo.php :
1 |
<?php phpinfo(); ?> |
En ssh :
1 |
command echo "<?php phpinfo(); ?>" > /home/${myuser}/${mywebsite}/html/phpinfo.php |
Vous l’avez compris, c’est ici que seront envoyés les fichiers de votre site web.
Copiez les fichiers de configuration Apache et PHP5-FPM par défaut dans le répertoire /conf du site web :
1 2 |
cp /etc/apache2/sites-available/000-default.conf /home/${myuser}/${mywebsite}/conf/apache.conf cp /etc/php5/fpm/pool.d/www.conf /home/${myuser}/${mywebsite}/conf/php.conf |
Configuration Apache
Éditez le fichier apache.conf et apportez les modifications pour arriver à ce fichier en ajustant suivant vos paramètres :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
<VirtualHost *:80> # The ServerName directive sets the request scheme, hostname and port that # the server uses to identify itself. This is used when creating # redirection URLs. In the context of virtual hosts, the ServerName # specifies what hostname must appear in the request's Host: header to # match this virtual host. For the default virtual host (this file) this # value is not decisive as it is used as a last resort host regardless. # However, you must set it for any further virtual host explicitly. #ServerName www.example.com ServerName test.jbnet.lan ServerAdmin webmaster@localhost AssignUserID jbnet-user jbnet-user DocumentRoot /home/jbnet-user/test/html <Directory /home/jbnet-user/test/html> Options -Indexes +FollowSymLinks -MultiViews +ExecCGI -Includes AllowOverride All Require all granted </Directory> <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-test FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi-test -idle-timeout 3600 -socket /var/run/php5-fpm-test.sock -pass-header Authorization ### Apache 2.4+ ### <Directory /usr/lib/cgi-bin> Require all granted </Directory> ### </IfModule> # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. # It is also possible to configure the loglevel for particular # modules, e.g. #LogLevel info ssl:warn ErrorLog /home/jbnet-user/test/log/error.log CustomLog /home/jbnet-user/test/log/access.log combined # For most configuration files from conf-available/, which are # enabled or disabled at a global level, it is possible to # include a line for only one particular virtual host. For example the # following line enables the CGI configuration for this host only # after it has been globally disabled with "a2disconf". #Include conf-available/serve-cgi-bin.conf </VirtualHost> # vim: syntax=apache ts=4 sw=4 sts=4 sr noet |
En ssh :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
command sed -i "/#ServerName/a \ ServerName ${mywebsite}.${mydomain}" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/\sServerAdmin/a AssignUserID ${myuser} ${myuser}" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/\sDocumentRoot/ s/^/#/" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/#\sDocumentRoot/a DocumentRoot \/home\/${myuser}\/${mywebsite}\/html" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/^DocumentRoot/a \<Directory \/home\/${myuser}\/${mywebsite}\/html\> \\ Options -Indexes +FollowSymLinks -MultiViews +ExecCGI -Includes \\ AllowOverride All \\ Require all granted \\ \</Directory\>" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/\sErrorLog/ s/^/#/" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/\sCustomLog/ s/^/#/" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/#\sErrorLog/a ErrorLog \/home\/${myuser}\/${mywebsite}\/log\/apache-error.log" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "/#\sCustomLog/a CustomLog \/home\/${myuser}\/${mywebsite}\/log\/apache-access.log combined" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "s/\/usr\/lib\/cgi-bin\/php5-fcgi/\/usr\/lib\/cgi-bin\/php5-fcgi-${mywebsite}/g" /home/${myuser}/${mywebsite}/conf/apache.conf command sed -i "s/php5-fpm.sock/php5-fpm-${mywebsite}.sock/g" /home/${myuser}/${mywebsite}/conf/apache.conf |
Activez le nouveau site web :
Si vous avez laissé le fichier de configuration dans le répertoire /etc/apache2/sites-available :
1 |
command a2ensite ${mywebsite} |
Sinon il faut créer un lien symbolique :
1 |
ln -s /home/${myuser}/${mywebsite}/conf/apache.conf /etc/apache2/sites-enabled/${mywebsite}.conf |
Ne redémarrez pas Apache, il faut d’abord configurer PHP5-FPM.
Configuration PHP5-FPM
Si ce n’est déjà fait, copier le fichier /etc/apache2/sites-available/000-default.conf vers /home/jbnet-user/test/conf/php.conf
1 |
cp /etc/php5/fpm/pool.d/www.conf /home/${myuser}/${mywebsite}/conf/php.conf |
Éditez le fichier php.conf et apportez les modifications suivantes en fonction de vos paramètres :
Nom du pool : test
1 2 3 4 |
; Start a new pool named 'www'. ; the variable $pool can we used in any directive and will be replaced by the ; pool name ('www' here) [test] |
En ssh :
1 |
command sed -i -e "s/^\[www\]/\[${mywebsite}\]/" /home/${myuser}/${mywebsite}/conf/php.conf |
Utilisateur et groupe :
1 2 3 4 5 |
; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. user = jbnet-user group = jbnet-user |
En ssh :
1 2 3 4 |
command sed -i \ -e "s/^[#]*\(user = \).*/\1${myuser}/" \ -e "s/^[#]*\(group = \).*/\1${myuser}/" \ /home/${myuser}/${mywebsite}/conf/php.conf |
Nom du sock php :
1 2 |
; The address on which to accept FastCGI requests. listen = /var/run/php5-fpm-test.sock |
En ssh :
1 2 3 |
command sed -i \ -e "s/php5-fpm.sock/php5-fpm-${mywebsite}.sock/" \ /home/${myuser}/${mywebsite}/conf/php.conf |
Permission du sock :
1 2 3 4 5 6 7 |
; Set permissions for unix socket, if one is used. In Linux, read/write ; permissions must be set in order to allow connections from a web server. Many ; BSD-derived systems allow connections regardless of permissions. ; Default Values: user and group are set as the running user ; mode is set to 0660 listen.owner = jbnet-user listen.group = jbnet-user |
En ssh :
1 2 3 4 |
command sed -i \ -e "s/^[#]*\(listen.owner = \).*/\1${myuser}/" \ -e "s/^[#]*\(listen.group = \).*/\1${myuser}/" \ /home/${myuser}/${mywebsite}/conf/php.conf |
Laissez le reste par défaut.
Ajoutez à la fin du fichier quelques lignes de configuration pour un site de développement :
1 2 3 4 5 6 7 8 |
echo "php_flag[display_errors] = on php_admin_value[error_log] = /home/${myuser}/${mywebsite}/log/php-error.log php_admin_flag[log_errors] = on php_admin_value[memory_limit] = 256M php_admin_value[sys_get_temp_dir] = /home/${myuser}/${mywebsite}/tmp php_admin_value[session.save_path] = /home/${myuser}/${mywebsite}/tmp php_admin_value[upload_max_filesize] = 20M php_admin_value[post_max_size] = 20M" >> /home/${myuser}/${mywebsite}/conf/php.conf |
Il faut maintenant indiquer à PHP5-FPM l’emplacement du fichier à prendre en compte :
1 |
ln -s /home/${myuser}/${mywebsite}/conf/php.conf /etc/php5/fpm/pool.d/${mywebsite}.conf |
Redémarrez les services Apache et PHP5-FPM :
1 2 |
service php5-fpm restart service apache2 restart |
Vérification
Puisque j’ai utilisé un nom de domaine local, test.jbnet.lan, je ne vais pas pouvoir y avoir accès juste en tapant ce nom de domaine dans mon navigateur.
2 solutions :
- Soit vous ajoutez une entrée dans le serveur DNS du domaine (sur un réseau d’entreprise) ou celui de votre box (si vous êtes chez vous).
- Soit vous utilisez le fichier hosts.
Si on est chez soit et qu’on fait des tests, on va juste modifier le fichier hosts.
Sous Windows : C:\WINDOWS\system32\drivers\etc\hosts
Sous Linux : /etc/hosts
Il faut être root ou administrateur de sa machine pour modifier ce fichier.
Dans tous les cas, son utilisation est identique.
Il faut ajouter une ligne :
1 |
10.0.0.100 test.jbnet.lan |
Ensuite, utilisez votre navigateur pour vérifier que le site fonctionne.
Félicitation, vous venez de créer un hébergement fonctionnel pour votre site web.
Vous pouvez créer autant de site que vous voulez en repartant du chapitre « Créer un site web ».
Bonus : dupliquer un hébergement
Créer le modèle d’hébergement
C’est en fait ce que vous venez de faire !
Donc passons à la suite…
Utiliser le modèle d’hébergement
A la racine du répertoire où se trouvent les hébergements, dupliquez le répertoire test avec le nom de votre nouveau projet (jbnet.loc pour l’exemple) :
1 |
cp -R test jbnet.loc |
Attention, si vous avez exécuté cette commande avec root, il faut redonner les bons UID et GID :
1 |
chown -R jbnet-user:jbnet-user jbnet.loc |
Créez les liens symboliques vers les fichiers de configuration pour que Apache et PHP5-FPM puissent les charger :
1 2 3 4 5 |
cd /etc/apache2/sites-enabled ln -s /home/jbnet-user/jbnet.loc/conf/apache.conf jbnet.loc.conf cd /etc/php5/fpm/pool.d ln -s /home/jbnet-user/jbnet.loc/conf/php.conf jbnet.loc.conf |
Dans le fichier /home/jbnet-user/jbnet.loc/conf/apache.conf, modifiez les lignes :
1 2 3 4 5 6 7 8 9 10 11 |
ServerName jbnet.loc.jbnet.lan ... DocumentRoot /home/jbnet-user/jbnet.loc/html <Directory /home/jbnet-user/jbnet.loc/html> ... Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi-jbnet.loc FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi-jbnet.loc -idle-timeout 3600 -socket /var/run/php5-fpm-jbnet.loc.sock -pass-header Authorization ... ErrorLog /home/jbnet-user/jbnet.loc/log/error.log CustomLog /home/jbnet-user/jbnet.loc/log/access.log combined ... |
Dans le fichier /home/jbnet-user/jbnet.loc/conf/php.conf, modifiez les lignes :
1 2 3 4 5 6 7 8 9 |
[jbnet.loc] ... listen = /var/run/php5-fpm-jbnet.loc.sock ... php_admin_value[error_log] = /home/jbnet-user/jbnet.loc/log/php-error.log ... php_admin_value[sys_get_temp_dir] = /home/jbnet-user/jbnet.loc/tmp php_admin_value[session.save_path] = /home/jbnet-user/jbnet.loc/tmp ... |
Il y a d’autres paramètres qui pourraient être utile de modifier sur un hébergement en production.
Mais là il s’agit d’un hébergement en local, pour du développement. Les modifications apportées sont largement suffisantes pour le moment.
Redémarrez les services Apache et PHP5-FPM :
1 2 |
service php5-fpm restart service apache2 restart |
Ajoutez la ligne dans votre hosts :
1 |
10.0.0.100 jbnet.loc.jbnet.lan |
Testez dans votre navigateur.
Dans le phpinfo, cherchez la ligne « _SERVER[« SCRIPT_FILENAME »] » et vérifiez le chemin d’accès.
Et voilà !
Votre nouvel hébergement est paré à recevoir votre site web comme un projet WordPress, Joomla, etc..
N’oubliez pas que vous pouvez à tout moment cloner votre VM pour la sauvegarder.
Ou encore, créer une VM par projet, ce qui peut faciliter les sauvegardes et les restaurations rapides d’un « vieux » projet.
Bonus 2 : le script qui fait (presque) tout !
Si vous êtes arrivé jusque là, vous avez alors mérité un petit script tout bête qui va permettre de dupliquer le site de test.
Créez un répertoire /home/jbnet-user/scripts
1 |
command mkdir /home/jbnet-user/scripts |
Puis créez le script /home/jbnet-user/scripts/jbnet-manage.sh :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#!/bin/bash username="jbnet-user" userhome="/home/${username}" local_ip=`/sbin/ifconfig | sed '/Bcast/!d' | awk '{print $2}'| awk '{print $2}' FS=":"` if [ $# -ne 1 ]; then echo "Pas de ndd en paramètre" exit 1 fi mywebsite=$1 echo "NDD : ${mywebsite}" cp -R ${userhome}/test ${userhome}/${mywebsite} chown -R ${username}:${username} ${userhome}/${mywebsite} sed -i "s/test.jbnet.lan/${mywebsite}/g" ${userhome}/${mywebsite}/conf/apache.conf sed -i "s/test/${mywebsite}/g" ${userhome}/${mywebsite}/conf/apache.conf sed -i "s/test.jbnet.lan/${mywebsite}/g" ${userhome}/${mywebsite}/conf/php.conf sed -i "s/test/${mywebsite}/g" ${userhome}/${mywebsite}/conf/php.conf ln -s ${userhome}/${mywebsite}/conf/apache.conf /etc/apache2/sites-enabled/${mywebsite}.conf ln -s ${userhome}/${mywebsite}/conf/php.conf /etc/php5/fpm/pool.d/${mywebsite}.conf service php5-fpm restart service apache2 restart echo "Configuration terminée !" echo "Ajouter cette ligne dans le fichier hosts de la machine de dev : " echo "${local_ip} ${mywebsite}" |
Avant de l’utiliser, il faut modifier la ligne 2 avec le nom d’utilisateur qui héberge vos sites des dev.
En suite, il faut rendre le script exécutable :
1 |
command chmod 755 jbnet-manage.sh |
Son utilisation est très simple :
1 2 |
cd /home/jbnet-user/scripts ./jbnet-manage.sh jbnet.loc |
Résultat :
1 2 3 4 |
NDD : jbnet.loc Configuration terminée ! Ajouter cette ligne dans le fichier hosts de la machine de dev : 10.0.0.50 jbnet.loc |
Ajoutez la ligne donnée dans votre fichier hosts …Et c’est tout !
Have Fun !
Bonjour,
Tout d’abord, magnifique tuto, très beau travail, ça va m’aider !!!
Cependant j’ai un soucis, a la fin de la mise en place du serveur LAMP, je n’arrive pas à accéder a la page avec l’adresse local, puis si je lance avec l’ip de la machine il me met la page apache… auriez vous du temps a me consacrer pour dépanner tout ça ? merci a vous 🙂
Bonjour,
Merci pour le compliment, c’est agréable de voir que son travail est apprécié !
Le serveur LAMP décrit dans ce tuto est basé sur la machine gabarit directement connecté au réseau (pas de proxy), donc la résolution sera plus rapide.
A priori si vous avez la page Apache avec l’ip, c’est qu’il est correctement installé, tout va bien de ce coté-là.
Je pencherais donc juste pour un problème de configuration. Soit du fichier host de votre PC, soit le fichier de configuration du VirtualHost qui décrit le site installé à Apache.
Si vous faites un ping à partir de votre pc avec le nom de domaine configuré, est-ce que le serveur répond ? ex : « ping mondomaine.local »
Si oui, le fichier host est correctement configuré.
Si non, il faut l’éditer et ajouter une ligne du style
10.0.0.100 mondomaine.local www.mondomaine.local
.A adapter en fonction.
Ensuite, vérifiez le nom du domaine dans le fichier de configuration Apache, ligne « ServerName ». Au besoin corrigez et relancez Apache.
Ensuite, vérifiez bien qu’Apache prend en compte le fichier de configuration.
Le plus simple est de supprimer les log d’Apache dans le répertoire log du site et de redémarrer Apache. Ces fichiers seront recréés, on pourra dire alors qu’Apache prend bien en compte la configuration.
Éventuellement vérifiez leur contenu…
Vous pouvez aussi vérifier les log principales du serveur Apache dans /var/log/apache
Faites déjà ces rapides vérifications et tenez-moi au courant.
Bonjour,
Et de plus réactif !! génial
Donc suite des événements, qui pourrais peut-être vous être utile, finalement voici ce que j’ai fait :
Sur la machine qui reçoit virtualbox (hôte), j’ai installé BIND9 avec le domaine « mybox.lan », il fonctionne à merveilleles nslookup et dig sont correct.
Maintenant je vais procéder à la reconfiguration complète du serveur LAMP.
Si cela fonctionne correctement je vous en tiendrais informé.
Cependant, vu vos compétence (moi je ne suis qu’un autodidacte 😉 ) croyez vous que l’on puisse faire un script permettant de faire toutes cette configuration… ex : perte de serveur hote et tout a recommencer, le but de ce script etant, dans les grosse ligne, une fois debian installé sur l’hote, de procéder à l’installation de virtualbox, les image VDI …. enfin tout refaire en auto avec donnée d’entrée fourni pas l’utilisateur ?
Question longue et compliqué, je peux développer si vous le souhaitez.
En tout les cas merci pour ce tuto, il devient ma bible officiellement.
Bonne journée
Je ne vois pas l’intérêt d’installer Bind9 sur la machine hôte, mais bon pourquoi pas si ça peut aider.
Pour le script, s’il s’agit d’un script pour ajouter et configurer un nouveau domaine, je l’ai partagé dans mon tuto (Bonus 2).
Si c’est un script qui installe tout le système et la configuration, c’est faisable, mais c’est plus compliqué et il me semble qu’il en existe déjà.
Personnellement, je ne suis pas fan (maniaque du contrôle, peut-être un peu 😉 ), sauf si le projet le justifie. Et puis, ça ne fait pas progresser.
Le plus simple est d’utiliser la fonction clone de VirtualBox ou encore la fonction « Instantanée » (ou snapshot chez VMware).
Cette dernière permet de revenir à un état précédent de la machine si une configuration tourne mal.
Ou encore un simple backup régulier du répertoire de la VM sur un disque dur externe.
Bon courage !
PS : moi aussi, je ne suis « (pres)qu’un » autodidacte comme beaucoup dans le métier. La passion et la persévérance payent toujours !
Bonjour,
Alors effectivement installer BIND9 n’est pas forcément nécessaire, mais ça m’a permis de pouvoir trouver le soucis et je pense que cela va vous plaire, je m’explique :
Je suis sous Debian jessie (netinstall), le fichier « /etc/resolv.conf », se remetà son état initiale après un redémarrage de la machine,il ne faut donc pas le modifier directement, voici l »astuce que j’ai trouvé pour contourner ce problème. Il faut modifier le fichier « /etc/dhcp/dhclient.conf » de cette manière :
1/ ajouter la ligne : supersede domain-name-servers 127.0.0.1;
2/ décommenter celle-ci : supersede domain-name « mettre SON domaine »;
3/ on reboot la machine et le tour est joué
Une fois cela fait, la machine garde en mémoire dans le resolv.conf les informations entrée dans le fichier dhclient.conf.
Et quand on sait ça on se dit que bind9 n’est pas LA solution
Voilà voilà, en espérant que cela vous serve.
Je me suis permis de regarder votre CV, j’aurais besoin de discuter avec vous par un autre moyen concernant un projet pour ma part, puis-je vous laisser mon mail perso afin d’en parler ?
Un grand merci, et j’espère que mon info vous sera utile.
Christian
Re-bonjour,
Je viens de finir la partie « LAMP » du tuto, et ça y est, désormais ça fonctionne, il faut désactiver « /etc/apache2/sites-enabled/000-default.conf
a2dissite 000-default.conf
Voilà, mais nickel, ça marche je passe à la suite 😉
Christian
Bravo !!
Mais ce n’est pas normal de devoir désactiver le fichier par défaut d’Apache.
Le principal, c’est que ça fonctionne !!
Bonsoir,
Tout d’abord, très bon tutoriel et bien expliqué et de surcroit clair !!!
j’ai presque fini la partie « serveur lamp » mais quand je redémarre php5 : no problèmes par contre, apache2 ne veut rien savoir et me met « Job for apache2.service failed… »
Que faire ?
Autodidacte également, j’avoue que cela devient un peu dur !
Par avance, je vous remercie pour votre réponse.
Cordialement.
Bonjour Vince,
Merci pour le compliment, j’essaye d’être assez clair même si parfois je ne développe pas plus que ça.
Que donne la commande « systemctl status apache2.service » ?
Puis essayez également « journalctl -xn ».
Vous devriez avoir plus d’informations sur le problème.
Bonsoir,
J’ai essayé de nouveau le tutoriel en appelant mon projet « test » (comme dans le tutoriel) et arrivé au deux lignes de redémarrage :
– php5-fpm restart : OK,
– apache2 restart : OK !
Par contre, en actualisant ma page avec l’adresse ip du serveur (avec le vhost de windows mis à jour), je tombe sur la page « it works de debian apache » et non sur la page phpinfo.php précédemment créée dans le folder « html ».
J’ai du raté quelque chose je pense…
Qu’en pensez-vous ?
Par avance, je vous remercie.
Cordialement.
Bonsoir,
Si vous utilisez l’adresse ip c’est normal.
Il faut utiliser l’url saisie dans le fichier vhosts.
Ex : http://test.jbnet.lan/phpinfo.php
L’ip renvoie directement à la racine du serveur /var/www, pas dans le répertoire du site web créé.
Bonsoir,
Alors oui, effectivemment, sans taper l’adresse ip mais le nom de domaine enregistré et avec un host windows à jour, cela fonction : je suis bien sur la page « phpinfo.php ».
Par contre, quand je vérifie la ligne du serveur : la ligne « _SERVER[« SCRIPT_FILENAME »] », je ne tombe pas sur la bonne racine : je n’ai pas l’arborescence du type « /jbnet.user/jbnet.loc/html/index.php » mais plutôt « /var/www/html/phpinfo.php ».
Là encore, je pense avoir rater une manipulation…
Qu’en pensez-vous ?!?
Par avance, merci.
Cordialement.
Certainement un prb de lien symbolique antre Apache et le répertoire conf du site.
A vérifier au niveau « Activez le nouveau site web » dans le tuto.
Sinon, regarder les log d’Apache dans le répertoire /var/log
bonjour super pour le tuto
memo pour moi même :
pour la commend : « actions » dans /etc/apache2/sites-enabled/000-default.conf
faite : a2enmod actions
puis : service apache2 restart
Bonjour,
Je viens de remettre le nez dans le tutoriel : je ne tapais pas la bonne URL et avec un lien symbolique créé, cela va beaucoup mieux : je tombe bien sur le fichier « phpinfo.php » et le fichier Hosts de Windows est à jour (j’ai rebooté la machine quand même pour que Windows prenne en compte cette modification).
En tout cas, un grand merci pour ce tutoriel : vraiment complet et très intéressant.
Il ne me reste plus qu’a essayé de mettre des fichiers dedans et faire apparaître un site complet.
Merci encore.
Cordialement.
Franchement ce tuto est la meilleure. Waouh 5 étoiles
Ma config est propre mais sauf que quand je lance « »test.mondomaine » ça m’affiche une erreur ‘403 Formidden’ comme quoi »You don’t have permission to access / on this server. ».
Par contre quand je tape « »test.mondomaine/phpinfo.php » » ben ça marche.
Sauriez-vous c’est quoi le souci??
Merci pour le retour.
Bonjour,
Merci pour ce retour !
Pour que ça fonctionne, il faut un fichier index.php au même niveau que phpinfo.php.
C’est le point d’entrée du site web.
Essayer de dupliquer le fichier phpinfo.php en index.php pour un premier test.
Bonsoir,
Mes plus vives félicitations pour ces tutoriels : quel travail !
Je suis autodidacte également et je sais combien il est dur de comprendre les choses par soi-même !
Je viens de suivre vos tutoriels :
1 – Machine gabarit : pas de problèmes,
2 – Clonage : idem,
3 – LAMP avec putty : idem sauf que je suis toujours sur cette page It works ! au lieu de la page phpinfo par défaut (après hosts windows modifié et liens symboliques aussi).
j’ai bien suivi tous les points et essayé à plusieurs reprises (même en changeant les privilèges des fichiers .conf en 755) mais rien n’y fait.
J’essaie de regarder dans le fichier error.log : fichier vide donc j’en déduis qu’il n’y en a pas…
Pourriez-vous m’éclairer car je ne sais plus où chercher l’erreur ?
Par avance, je vous remercie !
Bonjour Huperi ,
Merci pour ce retour.
A noter que ce tuto commence sérieusement à dater.
Donc avec les nouvelles versions de la distribution et des différents éléments (comme Apache, PHP, etc.), l’emplacement des fichiers et la configuration risque de fortement différer de ceux cités dans mon tuto.
Concernant le prb que vous avez, je dirais qu’il faudrait activer (si pas fait) et consulter le fichier apache access dans le répertoire de log (Ligne « CustomLog /home/jbnet-user/test/log/access.log combined »).
Puis être sûr que le lien symbolique du fichier de configuration vers le répertorie /etc/apache2/sites-enabled/ est bien actif.
Puis relancer Apache pour la prise en compte.
Après, il faut pas hésiter à détruire et tout refaire.
C’est parfois plus rapide 😉
Bon courage !