Serveur de développement sous Parallels Desktop



1- Installation du toolbox pour Parallels Desktop











2- Installation du toolbox pour Parallels Desktop






3- Installation et paramétrage du système d'exploitation GNU/Linux Debian 9.2

Linux est un système d'exploitation Open Source de type Unix dont l noyaux a été développé par Linux Torvald. On devaris d'ailleurs parler de GNU/Linux plutôt que de Linux. En effet Le système d'exploitation GNU est fondé en 1983 par Richard Stallman dans le but de fournir un équivalent libre à Unix. En 1991, Linus Torvalds crée le noyau Linux. À ce moment, GNU est quasiment prêt à l'exception de son noyau, le Hurd. L'association de Linux avec GNU permet ainsi de créer un système d'exploitation libre. Le nom « GNU/Linux » fut utilisé pour la première fois par Debian en 1994 pour le nom de leur distribution du système d'exploitation basé sur le noyau Linux et des logiciels GNU. (En 1992, la distribution Yggdrasil fut appelée Linux/GNU/X.) Dans le Bulletin GNU de juin 1994, Linux y est référé comme un clone libre d'UNIX (comportant de nombreux utilitaires et bibliothèques GNU). Dans l'édition de janvier 1995, les références à Linux furent changées en « GNU/Linux ».

Linux est donc l'association de GNU et de Linux.

De nombreuses distributions incluent des systèmes de gestion de paquets qui facilitent l'installation des applications souhaitées. Cependant, ces versions du référentiel ne seront généralement pas les plus récentes. Deux des distributions Linux les plus couramment utilisées dans les piles LEMP sont Debian et Ubuntu.

3.a- Créer une nouvelle machine virtuelle sur Parallels Desktop

  • Télécharger GNU/Linux Debian 9.2 sur le site officiel
    • Aller sur sur la page d'accueil du site de GNU/Linux Debian : https://www.debian.org/index.fr.html
    • Cliquer sur le bouton Télécharger Debian 9.2
  • Démarrer Parallels Desktop depuis le Finder
  • Installer Windows ou tout autre OS à partir d'un DVR ou du fichier image depuis le Parallels Wizard
  • Cliquer sur le lien Sélectionner un fichier depuis le Parallels Wizard
  • Choisir le nom et l'emplacement de l'image
  • Choisir l'installation de GNU/Linux Debian en mode non graphique
  • Choisir le langue de GNU/Linux Debian
  • Choisir la situation géographique de GNU/Linux Debian
  • Configurer le clavier de GNU/Linux Debian
  • Définir le nom du système GNU/Linux Debian
  • Définir le domaine du système GNU/Linux Debian
  • Définir le mot de passe root du système GNU/Linux Debian
  • Créer un compte utilisateur pour le système GNU/Linux Debian
  • Choisir un mot de passe pour le compte utilisateur qui vient d'être crée
  • Partitionner les disques du système GNU/Linux Debian
  • L'installation du système GNU/Linux Debian s'effectue
  • Configurer l'outil de gestion des paquets du système GNU/Linux
  • Configurer le popularity contest
  • Choisir les logiciels à installer
  • Les logiciels s'installent
  • Installer le programme de démarrage GRUB
  • Installation de GNU/Linux Debian est terminée
    Les utilitaires sudo et nano sont déjà installés sur le VPS.

3.b- Paraméter l'adresse IP de la machine virtuelle

Les paramètres de configurations peuvent varier en fonction de votre fournisseur d'accès. Dans mon cas, je suis client de bouygue télécom et l'adresse IP du réseau est 192.168.1.0, l'adresse IP de la passerelle est 192.168.1.254(routeur) et l'adresse IP du serveur D.N.S est 192.168.1.254. Le routeur est à la fois passerelle et serveur de D.N.S comme chez beaucoup de fournisseur d'accès.

  • Se connecter au système avec l'utilisateur root
  • Modifier le fichier /etc/network/interfaces
    root@srvdev:~# nano /etc/network/interfaces
    Explication :Pour configurer un serveur, il est nécessaire d’avoir une adresse ip statique. Sur notre machine virtuelle, il est faut mettre une adresse ip appartenant au réseau local.On paramètre l’interface de la carte réseau enp0s5 avec pour adresse ip 192.168.1.55, masque de sous réseau 255.255.255.0,l’adresse du réseau de la machine 192.168.1.0, l’adresse broadcast(celle qui appelle toutes les machines du réseau) 192.168.1.255 et passerelle 192.168.1.1. La passerelle correspond à l’adresse de votre Box fournit par le F.A.I (orange, bouygues télécom, sfr, free ...).
  • Redémarrer le service réseau
    root@srvdev:~# /etc/init.d/networking restart
  • Paramétrer le fichier /etc/resolv.confExplication: Ce fichier permer de spécifier à la machine quel serveur D.N.S interroger. Interroger un serveur dns, va permettre à machine que telle adresse ip correspond à tel nom de domaine. Généralement , la box du F.A.I joue à la fois de rôle passerelle et de serveur D.N.S.
    root@srvdev:~# nano /etc/resolv.conf
  • Paramétrer les fichiers de nom d'hôte
    root@srvdev:~# nano /etc/hosts
    
    127.0.0.1       localhost.virt localhost
    192.168.1.55    parallels.virt   parallels
    
    # The following lines are desirable for IPv6 capable hosts
    ::1     localhost ip6-localhost ip6-loopback
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    
    root@srvdev:~# hostnamectl set-hostname parallels.virt
  • Vérifier le nom d’hôte de la machine
    
    root@srvdev:~# hostname
    root@srvdev:~# hostname -f
    
  • Arrêter le système d'exploitation GNU/Linux Debian
    root@srvdev:~# shutdown -h now
  • Modifier les paramètre des la machine virtuel pour définir la carte réseau avec accès par pont
  • Redémarrer la machine virtuelle
  • Vérifier que la carte est correctement configurée
    
    root@parallels:~# ping 192.168.1.254 #la passerelle répond . Tout va pour le meilleur des mondes
    root@parallels:~# ping www.google.fr #le site de google répond.Tout va pour le meilleur des mondes
    root@parallels:~# apt-get install net-tools
    root@paralells:~# ifconfig
    
    

3.b- Monter un dossier du MacOS dans la machine virtuelle

  • Installer les outils Paralleles Desktop
    Monter le CD Outil Parallels Desktop dans la machine virtuelle:
    Debian GNU/Linux monte automatiquement le cdrom Outil Parallels Desktop lorsqu'il est inséré dans la machine virtuelle.Mais pour des raisons de sécurité l'image est monté dans un état qui ne peut être exécuté. Vous devez démonter le CDROM et le remonter avec en mode d' exécution en utilisant les commandes suivantes:
    
    root@parallels:~# umount /media/cdrom
    root@parallels:~# mount -o exec /media/cdrom
    
    
    
    root@parallels:~#  cd  /media/cdrom
    root@parallels:/media/cdrom#  ./install
    
    
  • Quitter le système d'exploitation GNU/Linux Debian
    root@parallels:/media/cdrom# shutdown -h now
  • Créer le dossier de partage
    Créer un dossier partage_debian sur le bureau de MacOS.
  • Redémarrer la machine virtuelle
    On peut accéder aux dossier partage_debian créé sous MacOS High Sierra depuis la machine virtuel en allant dans le dossier: /media/psf/partage_debian.
4 - Installation du serveur NTP

Définition: Network Time Protocol (« protocole d'heure réseau ») ou NTP est un protocole qui permet de synchroniser, via un réseau informatique, l'horloge locale d'ordinateurs sur une référence d'heure.

La première version v. 0 de NTP, formalisée dans la RFC 958, date de septembre 1985. Dès le début, ce protocole fut conçu pour offrir une précision de synchronisation meilleure que la seconde. Par rapport au service « Time Protocol » qui offre un service d'heure sans proposer une infrastructure, le projet NTP propose une solution globale et universelle de synchronisation qui est utilisable dans le monde entier.

La version 3 de NTP est la plus répandue à ce jour. Elle est formalisée par la RFC 1305 et a le statut « Draft Standard (en) »1 c'est-à-dire « spécification finale », elle spécifie plusieurs aspects :
  • la description du protocole réseau ;
  • les modes de fonctionnement ;
  • les algorithmes à mettre en place dans les machines.

La mise au point de ce protocole et des algorithmes a été menée de pair avec le développement d'un logiciel conforme à ces spécifications. De ce fait, cette réalisation fait office de référence dans le domaine et est appelée « logiciel NTP2 » même si d'autres solutions existent. Ces travaux ont été réalisés en grande partie à l'Université du Delaware grâce au professeur David L. Mills et à une importante équipe de bénévoles.

La version 4 de NTP est une révision importante publiée dans la RFC 5905 en juin 2010.Aussitôt après la parution de la version 3 de NTP, une version simplifiée est apparue, appelée « Simple Network Time Protocol » (SNTP) qui a également fait l'objet de plusieurs RFC. Par rapport à NTP, cette version est simplifiée dans le sens qu'elle ne spécifie pas les algorithmes à mettre en place dans les machines.
root@srvdev:~# apt-get install ntp ntpdate -y
Redémarrer le service NTP:
root@srvdev:~# service ntp restart
5 - Installation du serveur SSH
Définition: Secure Shell (SSH) est à la fois un programme informatique et un protocole de communication sécurisé. Le protocole de connexion impose un échange de clés de chiffrement en début de connexion. Par la suite, tous les segments TCP sont authentifiés et chiffrés. Il devient donc impossible d'utiliser un sniffer pour voir ce que fait l'utilisateur. Le protocole SSH a été conçu avec l'objectif de remplacer les différents protocoles non chiffrés comme rlogin, telnet, rcp, ftp et rsh.

5.a-Installer le serveur OPENSSH

Lorsque l'on travaille sur un serveur, nous n'avons pas accès directement à la machine pour pouvoir taper nos différentes commandes. Il va donc nous falloir utiliser un protocole particulier pour communiquer avec cette dernière : SSH.

Définition: OpenSSH (OpenBSD Secure Shell) est un ensemble d'outils informatiques libres permettant des communications sécurisées sur un réseau informatique en utilisant le protocole SSH.Créé comme alternative Open Source à la suite logicielle proposée par la société SSH Communications Security, OpenSSH est développé depuis 1999 par l'équipe d'OpenBSD, dirigée par son fondateur, Theo de Raadt, et diffusé sous licence BSD.

IMPORTANT : Pour la machine virtuel, il est nécessaire de faire ces opérations connecté sur la machine directement connecté en root.

root @srvdev:~# apt-get install openssh-server
root@srvdev: ~# service ssh restart0
Lorsque vous commandez un serveur dédié auprès d'un hébergeur, SSH est déjà installé et on vous fournira souvent les accès root (administrateur) à la machine.5.b-Tester la connexion en ssh au serveur depuis une machine clientePour vous connecter en utilisant ce protocole il vous faut utiliser le programme SSH. Il est disponible par défaut sur Mac et Linux. En revanche les choses ne sont pas aussi faciles sur Windows
  • Si vous avez déjà installé MsysGit ou Cygwin sur votre machine vous devez déjà avoir accès à la commande SSH
  • Sinon vous pouvez utiliser un outil qui vous permettra de démarrer une session SSH directement : PuTTy et PuTTygen qui nous servira à générer des clefs.
Pour se connecter à notre machine il suffit donc de taper la commande SSH :
ssh user@adresse_ip_du_serveur - p port_ssh_du_serveur
-p est une option.Le port du ssh par défaut est 22.En ce qui me concerne, je suis sous Mac. J’utilise donc dans le Terminal qui se situe dans «Application/Utilitaires» et je tape:
MinideCristophe: ~christophebrachet$ ssh christophe@192.168.1.55
C'est pareil que si vous tapez la commande suivante:
MinideCristophe: ~christophebrachet$ ssh christophe@192.168.1.55 -p 22
Normalement vous devriez pouvoir vous connecter.Le mot de passe est celui créer lors de l’installation du système d’exploitation GNU/Linux Debian.

5.c-Installer sudo

Définition: Sudo (Parfois considéré comme l'abréviation de Super-user do) est un programme dont l'objectif de permettre à l'administrateur du système d'autoriser certains utilisateurs à exécuter des commandes en tant que superutilisateur(ou qu'un autre utilisateur). La philosophie qui sous-tend cela est de donner aussi peu que possible de droits, mais de permettre quand même aux utilisateurs de faire leur travail. Sudo est aussi un moyen efficace d'enregistrer qui a exécuté quelle commande et quand.

root@srvdev:~# adduser christophe sudo

5.d-Sécuriser l'accès au serveur SSH

Afin de sécuriser l'accès SSH au serveur, éditons le fichier /etc/ssh/sshd_config. Nous allons changer le port de connexion par défaut pour éviter quelques attaques par bruteforce sur le port 22, qui est bien connu pour héberger ce service. N'oubliez pas de préciser ce nouveau port(dans Putty ou en ligne de commande ssh sous Linux) à la prochaine connexion. Nous allons tout de suite modifier la configuration de SSH afin d'améliorer un peu la sécurité de notre serveur. Pour cela on va modifier la configuration qui se trouve dans le dossier /etc/ssh/sshd_config. Nous n'allons pas passer toute la configuration en revue, mais seulement les paramètres importants :
  • Port, permet de changer le port d'écoute d'SSH ce qui permet de rendre votre porte d'entrée moins évident à trouver
  • PermitRootLogin, à mettre à no car on ne souhaite pas que les gens puissent se connecter en tant qu'administrateurs. Dans ce cas là il vous faudra accéder au serveur avec un autre utilisateur (vous pouvez créer un nouvel utilisateur avec la commande adduser lenomdevotreutilisateur)
  • AllowUsers, vous permet de lister les utilisateurs qui vont pouvoir se connecter à la machine.
root@srvdev:~# nano /etc/ssh/sshd_config

Port 2244                  # Changer le port par défaut
PermitRootLogin no         # Ne pas permettre de login en root
Protocol 2                 # Protocole v2
AllowUsers christophe      # N'autoriser qu'un utilisateur
5.e-Générer un clef pour l'authentification
Les mots de passe ne constituent pas une sécurité assez importante pour un accès aussi sensible. Nous allons pouvoir utiliser un système de clef SSH pour rendre les choses plus sécurisées.Si quelqu'un souhaite nous voler l'accès, il devra en plus posséder nos clefs, ce qui rajoute un obstacle supplémentaire pour les hackers.
MinideCristophe:~ christophebrachet$ ssh christophe@192.168.1.55
On ouvre en parallèle une invite de commande sur le poste client. Pour ce faire on génère une clef en utilisant la commande:
MinideCristophe:~ christophebrachet$ ssh-keygen -t rsa -b 4096 -C "votre_adresse_mail"
Dans mon cas:
MinideCristophe:~ christophebrachet$ ssh-keygen -t rsa -b 4096 -C "brachet-christophe@bbox.fr"
On retourne sur le compte connecté au serveur SSH et on tape les commandes suivantes:

christophe@parallels:~$ cd /home/christophe # on va dans le dossier utilisateur
christophe@parallels:~$ sudo mkdir -m 700 .ssh # on crée un dossier .ssh avec les droit seulement pour nous
christophe@parallels:~$ sudo nano .ssh/authorized_keys #on va copier la nouvelle clef générée dans ce fichier
christophe@parallels:~$ sudo chmod 600 .ssh/authorized_keys # on met des permissions très strictes sur le fichier
5.f-Redémarrez le service SSH
Une fois que vous avez effectué une modification dans ce fichier, vous devrez redémarrer SSH depuis le compte connecté afin que la configuration soit prise en compte.

christophe@parallels:~$ sudo service ssh restart
christophe@parallels:~$ exit
Désormais pour vous connecter au serveur SSH depuis le poste client, vous devez taper la commande suivante:
MinideCristophe:~ christophebrachet$ ssh christophe@192.168.1.55 -p 2244
7 - Optimiser la sécurité réseau du serveur
christophe@parallels:~$ su 
                root@parallels:/home/christophe# echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcastsroot@parallels:/home/christophe# echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_routeroot@parallels:/home/christophe# echo "1024" > /proc/sys/net/ipv4/tcp_max_syn_backlogroot@parallels:/home/christophe# echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
8 - Lancer les mises-à-jour du systèmeIl est préférable d'effectuer les mise-à-jour du système pour assurer la sécurité de la machine et obtenir, par conséquent, les derniers paquets à jours.
root@parallels:/home/christophe$ apt-get update && apt-get upgrade && apt-get dist-upgrade -y
root@parallels:/home/christophe$ exit
christophe@parallels:~$ sudo apt-get install zip unzip gcc libc6-dev linux-headers-$(uname –r) diffutils wget bzip2 make build-essential
9 - Paramétrer le système en fr_FR.UTF-8 UTF-8
christophe@parallels:~$ sudo dpkg-reconfigure locales
10 - Installation du serveur de base de données Mariadb et de son clientDéfinition: MariaDB est un système de gestion de base de données édité sous licence GPL. Il s'agit d'un fork communautaire de MySQL : la gouvernance du projet est assurée par la fondation MariaDB4, et sa maintenance par la société Monty Program AB, créateur du projet5. Cette gouvernance confère au logiciel l’assurance de rester libre.

En informatique, un système de gestion de base de données (abr. SGBD) est un logiciel système destiné à stocker et à partager des informations dans une base de données, en garantissant la qualité, la pérennité et la confidentialité des informations, tout en cachant la complexité des opérations.

En 2009, à la suite du rachat de MySQL par Sun Microsystems et des annonces du rachat de Sun Microsystems par Oracle Corporation, Michael Widenius, fondateur de MySQL, quitte cette société6 pour lancer le projet MariaDB, dans une démarche visant à remplacer MySQL tout en assurant l’interopérabilité. Le nom vient de la 2e fille de Monty Widenius, Maria (la première s'appelant My).

L’encyclopédie libre Wikipédia annonce, fin 2012, la migration de MySQL à MariaDB8. Les distributions Linux, comme Fedora ou OpenSuse, abandonnent elles aussi MySQL. En septembre 2013 Google annonce l'adoption de MariaDB en lieu et place de MySQL. Dans la foulée un des ingénieurs de Google est affecté à la Fondation MariaDB.

Un consortium baptisé « Open Database Alliance » a par ailleurs été créé pour assurer le développement du logiciel (comparable à la fondation Linux avec le noyau Linux).

10.a- Installation

christophe@parallels:~$ sudo apt-get -y install mariadb-server mariadb-client

10.b- Sécurisation

christophe@parallels:~$ sudo mysql_secure_installation

Comme demandé, tapez le mot de passe root de votre Debian. Puis répondez Y à toutes les questions suivantes.

Vous commencerez ainsi par donner un mot de passe à l'utilisateur root de MariaDB différent de l'utilisateur root de votre Debian. Cet utilisateur root de la base de données aura tous les droits d'accès, pour des raisons évidentes de sécurité, je vous recommande d'utiliser un mot de passe complexe !

Ensuite, les connexions anonymes seront désactivées, ainsi que les connexions root qui se font depuis un serveur autre que le votre...

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
C'est terminé : MariaDB est installé !

10.c-Configurer de MariaDB

L'installation par défaut de MariaDB sous Debian 9 applique une restriction à l'utilisateur root.

Lorsque vous essayerez de vous connecter à MariaDB avec la commande mysql -u root -p vous obtiendrez une erreur Access denied for user 'root'@'localhost'.

# mysql -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Pour remédier à ce problème, connectez vous à MariaDb avec sudo
christophe@parallels:~$ sudo mysql -u root -p

Une fois que vous aurez taper le bon mot de passe, cette fois vous serez connecté.

Tapez alors la commande USE mysql; qui vous connectera à la base de données mysql contenant la configuration du serveur.

Puis tapez la requête SELECT plugin FROM user WHERE user='root';

Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 10.1.23-MariaDB-9+deb9u1 Debian 9.0

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> USE mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [mysql]> SELECT plugin FROM user WHERE user='root';
+-------------+
| plugin      |
+-------------+
| unix_socket |
+-------------+
1 row in set (0.00 sec)

C'est à cause de ce plugin unix_socket que la connexion root est refusée lorsqu'on se connecte à la base sans sudo.

Pour remédier au problème, tapez la requête UPDATE user SET plugin= WHERE User='root'; qui supprimera ce plugin pour l'utilisateur root. Recharger les privilèges utilisateurs avec la commande FLUSH PRIVILEGES; puis quitter MariaDb avec la commande EXIT;

MariaDB [mysql]> UPDATE user SET plugin='' WHERE User='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [mysql]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> EXIT;
Bye
A présent, si vous essayez à nouveau de vous connecter au serveur sans sudo, avec mysql -u root -p, ca fonctionnera.
christophe@srvdev:~$ mysql -u root -p
    Enter password:
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 20
    Server version: 10.1.23-MariaDB-9+deb9u1 Debian 9.0

    Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

    MariaDB [(none)]>

Installation du langage de programmation PHP 7.0 FPM

Définition: PHP: Hypertext Preprocessor (anciennement Personal Home Page), plus connu sous son sigle PHP(acronyme récursif), est un langage de programmation libre, principalement utilisé pour produire des pages Web dynamiques via un serveur HTTP5, mais pouvant également fonctionner comme n'importe quel langage interprété(il est compilé à la volée(semi-compilé)) de façon locale. PHP est un langage impératif orienté objet. PHP a permis de créer un grand nombre de sites web célèbres, comme Facebook, Wikipédia.Il est considéré comme la base de la création des sites Internet dits dynamiques.

Très attendue, la dernière version majeure est sortie, et contrairement aux anciennes versions, celle-ci ne se concentre pas sur les fonctionnalités mais plutôt sur les performances.Voici ce que va donner un bon coup de turbo à la plupart des sites web :
  • Une vitesse d’exécution jusqu’à 2x supérieure
  • Compatibilité 64 bits
  • Utilisation de la mémoire vive réduit de 2/3

11.a-Installer PHP 7

INFO: On installe APC permettant de mettre en cache et d’optimiser le code intermédiaire PHP(opcode). Cet opcode est générer lors de la compiltaion à la volée et c’est lui qui est exécuté par le serveur.Il est fortement recommandé de l’installer pour augmenter la rapidité d’exécution des pages.

christophe@parallels:~$ sudo apt-get -y install php7.0 php7.0-fpm php7.0-common php7.0-mysql php7.0-cli php7.0-opcache php7.0-mysql php7.0-curl php7.0-json php7.0-gd php7.0-mcrypt php7.0-msgpack php7.0-apc php7.0-intl php7.0-sqlite3 php7.0-gmp php7.0-geoip php7.0-mbstring php7.0-xml php7.0-zip php-pear php7.0-imagick php7.0-imap php7.0-ps php7.0-pspell php7.0-recode php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-memcache php7.0-memcached php7.0-apcu
On vérifie que les modules ont été installés:
php -m # affiche la liste des modules disponibles (compilés avec php)

11.b - Editer le fichier /etc/php/7.0/fpm/php.ini

christophe@parallels:~$ sudo nano /etc/php/7.0/fpm/php.ini
[...]
cgi.fix_pathinfo=1
[...]date.timezone="Europe/Paris"[…]

11.c-Obliger PHP-FPM à utiliser une connexion TCP sur un port spécifique en modifiant le fichier /etc/php/7.0/fpm/pool.d/www.conf

christophe@srvdev:~$ sudo nano /etc/php/7.0/fpm/pool.d/www.conf
;listen = /run/php/php7.0-fpm.sock
listen = 127.0.0.1:9000

11.d- Redémarrer le service PHP-FPM

christophe@parallels:~$ sudo service php7.0-fpm restart
12-Installation du serveur de DNS (PowerDNS)

Définition: PowerDNS est un serveur libre de nom de domaine sous licence GNU GPL. Il permet de gérer des noms de domaines dans une base de données PostgreSQL ou MySQL.

12.a-Installer le serveur DNS (PowerDNS)

christophe@parallels:~$ sudo apt-get install pdns-server pdns-backend-mysql
Répondre NON à la question : Faut-il configurer la base de données de pdns-backend-mysql avec dbconfig-common?

12.b-Création de la base Mysql utilisée par PowerDNS

christophe@parallels:~$ mysql -u root -p
MariaDB [(none)]> CREATE DATABASE server;
MariaDB [(none)]> GRANT ALL ON server.* TO 'powerdns_user'@'localhost' IDENTIFIED BY 'pass';
FLUSH PRIVILEGES;
13- Création de 3 images différentes pour les 3 serveurs web respectifsFermer le système d'exploitation GNU/Linux Debian.
christophe@parallels:~$ sudo shutdown -h now
On clone l'image:
En trois fois :
  • Une image pour le serveur web NGinx
  • Une image pour le serveur web Apache2
  • U ne image pour le serveur web <Lighttpd
  • On obtient les images suivantes dans le centre de contrôle de Parallels Desktop :
    14- Installation d'un serveur web au choix

    14.a- Installation d'un serveur web Nginx sur la machine virtuelle

    14.a.1 - Installer Nginx

    Définition: Nginx[engine x] est un logiciel libre de serveur Web (ou HTTP) ainsi qu'un proxy inverse écrit par Igor Sysoev, dont le développement a débuté en2002 pour les besoins d'un site russe à très fort trafic (Rambler). Une partie de la documentation a été traduite du russe vers l'anglais.Nginx est un serveur asynchrone par opposition aux serveurs synchrones où chaque requête est traitée par un processus dédié. Au lieu d'exploiter une architecture parallèle et un multiplexage temporel des tâches par le système d'exploitation, Nginx utilise les changements d'état pour gérer plusieurs connexions en même temps; le traitement de chaque requête est découpé en de nombreuses mini-tâches et permet ainsi de réaliser un multiplexage efficace entre les connexions. Afin de tirer parti des ordinateurs multiprocesseurs, plusieurs processus peuvent être démarrés. Ce choix d'architecture se traduit par des performances très élevées, mais également par une charge et une consommation de mémoire particulièrement faibles comparativement aux serveurs HTTP classiques, tels qu'Apache.

    christophe@parallels:~$ sudo apt-get install nginx -y
    Si tout se passe bien , on doit voir apparaître la page suivante lorsque que l’on tape dans un navigateur l’url suivante: http://192.168.1.55/

    14.a.2 - Paramétrer le serveur Nginx pour fonctionner avec PHP 7.0 FPM

    
    christophe@parallels:~$ sudo rm /etc /nginx/sites-available/default
    christophe@parallels:~$ sudo nano /etc/nginx/sites-available/default
    
    server {
            listen 192.168.1.55:80;
    
            # SSL configuration
            #
            # listen 443 ssl default_server;
            # listen [::]:443 ssl default_server;
            #
            # Self signed certs generated by the ssl-cert package
            # Don't use them in a production server!
            #
            # include snippets/snakeoil.conf;
    
            root /var/www/html;
    
            # Add index.php to the list if you are using PHP
            index index.html index.htm index.nginx-debian.html index.php;
    
            server_name _;
    
            location / {
                    # First attempt to serve request as file, then
                    # as directory, then fall back to displaying a 404.
                    try_files $uri $uri/ =404;
            }
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            location ~ \.php$ {
                    include snippets/fastcgi-php.conf;
            #
            #       # With php7-cgi alone:
                     fastcgi_pass 127.0.0.1:9000;
            #      # With php5-fpm:
                    #fastcgi_pass unix:/run/php/php7.0-fpm.sock;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                    include fastcgi_params;
                    fastcgi_intercept_errors on;
                    fastcgi_ignore_client_abort off;
                    fastcgi_connect_timeout 60;
                    fastcgi_send_timeout 180;
                    fastcgi_read_timeout 180;
                    fastcgi_buffers 4 256k;
                    fastcgi_buffer_size 128k;
                    fastcgi_busy_buffers_size 256k;
                    fastcgi_temp_file_write_size 256k;
            }
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /\.ht {
            #       deny all;
            #}
    }
    

    14.a.3 - Installer le package fcgwrap pour partager des environnements hôtes.Ainsi chaque hôte possède son propre répertoire cgi-bin

    christophe@parallels:~$ sudo apt-get install fcgiwrap

    14.a.4 - Redémarrer le service Nginx

    christophe@parallels:~$ sudo service nginx restart
    14.a.5 - Se déplacer dans le répertoire: /var/www/html
    christophe@parallels:~$ cd /var/www/html
    14.a.6 - Créer le fichier phpinfo.php
    christophe@parallels:/var/www/html$ sudo nano phpinfo.php
    <?php
        phpinfo();
    
    Charger phpinfo.php depuis le navigateur : http://192.168.1.55/phpinfo.php
    14.a.7 - Installer PHPMyAdmin

    14.a.7.1 - Donner les droits d’écriture sur le répertoire /var/www

    christophe@parallels:/var/www/html$ sudo chmod 777 -R /var/www

    14.a.7.2 - Télécharger PhpMyadmin dans le répertoire /var/www

    christophe@parallels:/var/www/html$ cd /var/www
    christophe@parallels:/var/www$ wget https://files.phpmyadmin.net/phpMyAdmin/4.6.5/phpMyAdmin-4.6.5-all-languages.zip

    14.a.7.3 - Dézipper PhpMyadmin

    christophe@parallels:/var/www$ unzip phpMyAdmin-4.6.5-all-languages.zip
    christophe@parallels:/var/www$ mv phpMyAdmin-4.6.5-all-languages phpmyadmin
    christophe@parallels:/var/www$ rm phpMyAdmin-4.6.5-all-languages.zip
    christophe@parallels:/var/www$ sudo chmod 755 -R /var/www
    christophe@parallels:/var/www$ sudo chown -R www-data:www-data /var/www

    14.a.7.4 - Paramètrer Nginx pour faire fonctionner Phpmyadmin

    christophe@parallels:/var/www$ sudo nano /etc/nginx/sites-available/default
    server {
        listen 192.168.1.55:80;
    
        root /var/www/html;
        index index.html index.htm index.nginx-debian.html index.php;
        server_name _;
    
        location / {
            try_files $uri $uri/ =404;
        }
    
        location /phpmyadmin {
            root /var/www;
            index index.php index.html index.htm;
            location ~ ^/phpmyadmin/(.+\.php)$ {
                    try_files $uri =404;
                    root /var/www;
                    fastcgi_pass 127.0.0.1:9000;
                    fastcgi_index index.php;
                    fastcgi_param SCRIPT_FILENAME $request_filename;
                    include fastcgi_params;
                    fastcgi_param PATH_INFO $fastcgi_script_name;
                    fastcgi_buffer_size 128k;
                    fastcgi_buffers 256 4k;
                    fastcgi_busy_buffers_size 256k;
                    fastcgi_temp_file_write_size 256k;
                    fastcgi_intercept_errors on;
            }
       }
       # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
       #
       location ~ \.php$ {
            include snippets/fastcgi-php.conf;
    
            # With php5-cgi alone:
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
            fastcgi_intercept_errors on;
            fastcgi_ignore_client_abort off;
            fastcgi_connect_timeout 60;
            fastcgi_send_timeout 180;
            fastcgi_read_timeout 180;
            fastcgi_buffers 4 256k;
            fastcgi_buffer_size 128k;
            fastcgi_busy_buffers_size 256k;
            fastcgi_temp_file_write_size 256k;
       }
       # deny access to .htaccess files, if Apache's document root
       # concurs with nginx's one
       #
       #location ~ /\.ht {
       #       deny all;
       #}
    
    }
    14.a.7.5 -Redémarrer le service Nginx
    christophe@parallels:/var/www$ sudo service nginx restart
    christophe@parallels:/var/www$ sudo service nginx restart
    14.a.7.6 - Modifie le fichier de configuration de phpmyadmin : /var/www/phpmyadmin/libraries/config.default.php
    christophe@parallels:/var/www$ sudo nano /var/www/phpmyadmin/libraries/config.default.php
    $cfg['PmaAbsoluteUri'] = 'http://192.168.1.55/phpmyadmin/';
    $cfg['blowfish_secret'] = 'BqpWwiLFjkkSxYkwgLabaedyrvFFcUAbHgxirlVzHvQKxHBOVMqkSePgzYlajPmAxONEepbXrJdIWTcZroeCcTlZEkEGSpFkrUPkYKETASJQJB';#générer à l'aide d'un générateur de mot de passe en ligne
    
    PhpMyAdmin est accessible depuis un navigateur web en tapant l'adresse suivante: http://192.168.1.55/phpmyadmin/'
    14.a.8 - Installer nginx_ensite(http://github.perusio.org/nginx_ensite/)nginx_ensite permet d'activer et désactiver des hôtes vituels sous NGinx facilement
    christophe@parallels:/var/www$ sudo apt-get install git -y
    christophe@parallels:/var/www$ cd /home/christophe
    christophe@parallels:~$ git clone https://github.com/perusio/nginx_ensite.git
    christophe@parallels:~$ cd nginx_ensite
    christophe@parallels:~$ cd nginx_ensite
    christophe@parallels:~/nginx_ensite$ sudo make install
    christophe@parallels:~/nginx_ensite$ cd ..
    christophe@parallels:~$ sudo rm -R nginx_ensite
    

    14.b- Installation d'un serveur web Apache2 sur la machine virtuelle

    14.b.1 - Installer Apache2

    christophe@parallels:~$  sudo apt-get install apache2 -y
    Si tout se passe bien , on doit voir apparaître la page suivante lorsque que l’on tape dans un navigateur l’url suivante: http://192.168.1.55/

    14.b.2 - Paramétrer le serveur Apache2 pour fonctionner avec PHP 7.0 FPM

    christophe@parallels:~$ sudo rm /etc/apache2/sites-enabled/000-default.conf
    christophe@parallels:~$ sudo nano /etc/apache2/sites-enabled/000-default.conf
    
    
            # 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
    
            ServerAdmin webmaster@localhost
            DocumentRoot /var/www/html
    
            # 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 ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/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< FilesMatch "\.php$" >SetHandler "proxy:fcgi://127.0.0.1:9000/"
     
    
    # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
    

    14.b.3 - Activer le module alias du serveur web Apache2

    christophe@parallels:~$ sudo a2enmod alias

    14.b.4 - Activer le module rewrite du serveur web Apache2

    christophe@parallels:~$ sudo a2enmod rewrite
    14.b.5 - Activer le module proxy_fcgi du serveur web Apache2
    christophe@parallels:~$  sudo a2enmod proxy_fcgi
    14.b.6 - Redémarrer le service Apache2
    christophe@parallels:~$  sudo service apache2 restart
    14.b.7 - Se déplacer dans le répertoire : /var/www/html
    christophe@parallels:~$ cd /var/www/html
    14.b.8 - Créer le fichier phpinfo.php
    christophe@parallels:/var/www/html$ sudo nano phpinfo.php
    <?php
        phpinfo();
    
    Charger phpinfo.php depuis le navigateur : http://192.168.1.55/phpinfo.php
    14.b.9 - Installer PHPMyAdmin

    14.b.9.1 - Donner les droits d’écriture sur le répertoire /var/www

    christophe@parallels:/var/www/html$ sudo chmod 777 -R /var/www

    14.b.9.2 - Télécharger PhpMyadmin dans le répertoire /var/www

    christophe@parallels:/var/www/html$ cd /var/www
    christophe@parallels:/var/www$ wget https://files.phpmyadmin.net/phpMyAdmin/4.6.5/phpMyAdmin-4.6.5-all-languages.zip
    

    14.b.9.3 - Dézipper PhpMyadmin

    christophe@parallels:/var/www$ unzip phpMyAdmin-4.6.5-all-languages.zip
    christophe@parallels:/var/www$ mv phpMyAdmin-4.6.5-all-languages phpmyadmin
    christophe@parallels:/var/www$ rm phpMyAdmin-4.6.5-all-languages.zip
    christophe@parallels:/var/www$ sudo chmod 755 -R /var/www
    christophe@parallels:/var/www$ sudo chown -R www-data:www-data /var/www
    

    14.b.9.4 - Paramètrer Apache2 pour faire fonctionner Phpmyadmin

    christophe@parallels:/var/www$  sudo nano /etc/apache2/sites-enabled/000-default.conf
    
            # 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
    
            ServerAdmin webmaster@localhost
            DocumentRoot /var/www/html
    
            # 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 ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/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.confAlias/phpmyadmin "/var/www/phpmyadmin/"allow,deny
                      Allow from all
    # New directive needed in Apache 2.4.3:
                    Require all granted
            SetHandler "proxy:fcgi://127.0.0.1:9000/"
     
    # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
    
    14.b.9.5 - Redémarrer le service Apache2
    christophe@parallels:/var/www$ sudo service apache2 restart
    christophe@parallels:/var/www$ sudo nano /var/www/phpmyadmin/libraries/config.default.php
    
    $cfg['blowfish_secret'] = 'BqpWwiLFjkkSxYkwgLabaedyrvFFcUAbHgxirlVzHvQKxHBOVMqkSePgzYlajPmAxONEepbXrJdIWTcZroeCcTlZEkEGSpFkrUPkYKETASJQJB';#générer à l'aide d'un générateur de mot de passe en ligne
    PhpMyAdmin est accessible depuis un navigateur web en tapant l'adresse suivante: http://192.168.1.55/phpmyadmin/'

    14.c- Installation d'un serveur web Lighttpd sur la machine virtuelle

    14.c.1 Installer le serveur Lighttpd

    christophe@parallels:~$ sudo apt-get -y install lighttpd

    14.c.2 Démarrer le serveur Lighttpd après l'installation

    christophe@parallels:~$ sudo systemctl start lighttpd
    Si tout se passe bien , on doit voir apparaître la page suivante lorsque que l’on tape dans un navigateur l’url suivante: http://192.168.1.55/

    14.c.3 - Faire en sorte que le service Lighttp se relance à chaque démarrage du système GNU/Linux Debian

    christophe@parallels:~$ sudo systemctl enable lighttpd

    14.c.4 - Paramétrer le serveur Lighttpd pour fonctionner avec PHP 7.0 FPM

    Paramétrer le fichier 15-fastcgi-php.conf
    christophe@parallels:~$ sudo nano /etc/lighttpd/conf-available/15-fastcgi-php.conf
    Remplacer les lignes ci-dessous :
    "bin-path" => "/usr/bin/php-cgi","socket" => "/var/run/lighttpd/php.socket",
    Par les lignes suivantes :
    "host" => "127.0.0.1","port" => "9000",
    Activer les modules FastCGI et FastCGI-PHP du serveur Lighttpd
    christophe@parallels:~$ sudo lighty-enable-mod fastcgi
    christophe@parallels:~$ sudo lighty-enable-mod fastcgi-php
    
    14.c.5 - Recharger la configuration de Lighttpd
    christophe@parallels:~$ sudo service lighttpd force-reload
    14.c.6 - Se déplacer dans le répertoire: /var/www/html
    christophe@parallels:~$ cd /var/www/html
    14.c.7 - Créer le fichier phpinfo.php
    christophe@parallels:/var/www/html$ sudo nano phpinfo.php
    <?php
        phpinfo();
    
    Charger phpinfo.php depuis le navigateur : http://192.168.1.55/phpinfo.php
    14.c.8 - Configurer Lighttpd pour gérer les hôtes virtuels depuis une base de données MariaDB

    14.c.8.1 Installer les paquets debian python et python - mysqldb

    christophe@parallels:~$ sudo apt-get install python python-mysqldb;

    14.c.8.2 Créer la base de données

    christophe@parallels:~$ mysql -u root -p
    MariaDB [(none)]> GRANT SELECT ON server.* TO lighttpd@localhost IDENTIFIED BY 'pass';
    MariaDB [(none)]> GRANT SELECT ON server.* TO lighttpd@localhost.localdomain IDENTIFIED BY 'pass';
    MariaDB [(none)]> FLUSH PRIVILEGES;
    MariaDB [(none)]> USE server;
    Database changed
    MariaDB [server]> CREATE TABLE `ip` (
        ->   `ip_id` bigint(20) NOT NULL,
        ->   `ip_value` varchar(255) NOT NULL
        -> ) ENGINE=InnoDB DEFAULT CHARSET=latin7_general_ci
    MariaDB [server]> CREATE TABLE `vhost` (
        ->   `vhost_id` bigint(20) UNSIGNED NOT NULL,
        ->   `vhost_active` enum('1','0') NOT NULL DEFAULT '1',
        ->   `vhost_domain_name` varchar(255) NOT NULL,
        ->   `vhost_document_root` varchar(255) NOT NULL,
        ->   `vhost_date_added` datetime NOT NULL,
        ->   `vhost_date_deleted` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
        ->   `vhost_configuration` text,
        ->   `vhost_ip` bigint(20) NOT NULL
        -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    MariaDB [server]> ALTER TABLE `ip`
        ->   ADD PRIMARY KEY (`ip_id`);
    ALTER TABLE `vhost`
      ADD PRIMARY KEY (`vhost_id`),
      ADD UNIQUE KEY `websites_unique` (`vhost_domain_name`,`vhost_date_deleted`),
      ADD KEY `vhost_ip` (`vhost_ip`);
    MariaDB [server]> ALTER TABLE `ip`
        ->   MODIFY `ip_id` bigint(20) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
    MariaDB [server]> ALTER TABLE `vhost`
        ->   MODIFY `vhost_id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=17;
    MariaDB [server]> ALTER TABLE `vhost`
        ->   ADD CONSTRAINT `fk_vost_ip` FOREIGN KEY (`vhost_ip`) REFERENCES `ip` (`ip_id`) ON DELETE CASCADE;

    14.c.8.3 Ajouter un hôte virtuel dans la base de données

    MariaDB [server]> INSERT INTO `ip` (`ip_id`, `ip_value`) VALUES
        -> (1, '192.168.1.55');
    MariaDB [server]> INSERT INTO `vhost` (`vhost_id`, `vhost_active`, `vhost_domain_name`, `vhost_document_root`, `vhost_date_added`, `vhost_date_deleted`, `vhost_configuration`, `vhost_ip`) VALUES
        -> (1, '1', 'site.parallels.virt', '/var/www/portail', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', 1);
    MariaDB [server]> exit;
    Bye

    14.c.8.4 - Créer le dossier /var/www/portail de l'hôte virtuel site.parallels.virt

    christophe@parallels:~$ cd /var/www
    christophe@parallels:/var/www$sudo mkdir portail
    christophe@parallels:~$cd portail
    christophe@parallels: /var/www/portai$sudo nano index.html14- Installation d'un serveur web au choix
    
    <html>
    <head>
    <title>Hello World!</title>
    </head>
    <body>
    
    <h1>Hello World!</h1>
    
    </body>
    </html>
    14.c.8.5 - Créer un script en Python pour lire les hôtes virtuels depuis la base de données MariaDB
    christophe@parallels:~$ sudo nano /usr/share/lighttpd/mysql_vhost.py
    #!/usr/bin/env python
    import sys
    import MySQLdb
    from warnings import filterwarnings
    filterwarnings('ignore', category = MySQLdb.Warning)
    # load configuration data from the database
    db=MySQLdb.connect(host='localhost', db=sys.argv[1], user=sys.argv[2], passwd=sys.argv[3])
    cur = db.cursor()cur.execute("SELECT vhost_domain_name FROM vhost WHERE vhost_active = 1 and vhost_date_deleted = 0")rs = cur.fetchall()cur.execute("SELECT vhost_domain_name,vhost_document_root,vhost_configuration,ip_value FROM vhost inner join ip  ON vhost.vhost_ip=ip.ip_id  WHERE vhost_active=1 and vhost_date_deleted=0 order by ip_value");rs = cur.fetchall()
    i = 0;current = ""for vhost  in rs:
            i = i + 1
            if i == 1:
                    current = vhost[3]
            else:
                    if current != vhost[3]:
                            current = vhost[3]
                            print "\n}"
            config = vhost[2]
            if vhost[2] is None:
                config = ""
            config += "\n"
            print "$HTTP["host"] == "%s" {\n       server.name = "%s"\n       server.document-root = "%s"\n%s\n}" % (vhost[0], vhost[0], vhost[1], config)
    db.close()
    14.c.8.6 - Donner les droits d'exécution au script Python
    christophe@parallels:~$ sudo chmod 755 /usr/share/lighttpd/mysql_vhost.py
    14.c.8.7 - Paramétrer Lighttpd pour que le serveur web utilise le script Python
    christophe@parallels:~$ sudo nano /etc/lighttpd/lighttpd.conf
    14.c.8.8 - Paramétrer Lighttpd pour que le serveur web utilise le script Python
    include_shell "/usr/share/lighttpd/mysql_vhost.py server lighttpd pass"
    14.c.8.9 - Recharger la configuration de Lighttpd
    christophe@parallels:~$ sudo service lighttpd force-reload
    14.c.8.10 - Télécharger PhpMyadmin dans le répertoire /var/www
    christophe@parallels:/var/www/html$ cd /var/www
    christophe@parallels:/var/www$ sudo chmod 777 -R /var/www
    christophe@parallels:/var/www$ wget https://files.phpmyadmin.net/phpMyAdmin/4.6.5/phpMyAdmin-4.6.5-all-languages.zip
    14.c.8.11 - Dézipper PhpMyadmin
    christophe@parallels:/var/www$ unzip phpMyAdmin-4.6.5-all-languages.zip
    christophe@parallels:/var/www$ mv phpMyAdmin-4.6.5-all-languages phpmyadmin
    christophe@parallels:/var/www$ rm phpMyAdmin-4.6.5-all-languages.zip
    christophe@parallels:/var/www$ sudo chmod 755 -R /var/www
    christophe@parallels:/var/www$ sudo chown -R www-data:www-data /var/www
    14.c.8.12 - Paramétrer l'hôte virtuel de LIghthttpd pour que PHPMyAdmin fonctionne
    christophe@parallels:/var/www$ mysql -u root -p
    MariaDB [(none)]> use server
    MariaDB [server]> update vhost set vhost_configuration="alias.url += (
            "/phpmyadmin" => "/var/www/phpmyadmin",
           )" where vhost_id = 1;
    MariaDB[server] > exit;
    14.c.8.13 - Recharger la configuration de Lighttpd
    christophe@parallels:/var/www$ sudo nano /var/www/phpmyadmin/libraries/config.default.php
    $cfg['blowfish_secret'] = 'BqpWwiLFjkkSxYkwgLabaedyrvFFcUAbHgxirlVzHvQKxHBOVMqkSePgzYlajPmAxONEepbXrJdIWTcZroeCcTlZEkEGSpFkrUPkYKETASJQJB';#générer à l'aide d'un générateur de mot de passe en ligne
                
    christophe@parallels:~$ sudo service lighttpd force-reload
    PhpMyAdmin est accessible depuis un navigateur web en tapant l'adresse suivante: http://192.168.1.55/phpmyadmin/'
    15- Installation de PDNS Manager

    Définition: PDNS Managerest un outil d'administration simple mais puissant pour le serveur de noms faisant autorité Powerdns. Il supporte couramment les zones maitres et natives. PNDS Manager a été développé à partir de zéro pour créer une interface conviviale et jolie

    .

    PDNS Manager dispose également d'une puissante API pour accéder et paramétrer aux enregistrement DNS. Il est dés lors possible de modifier les enregistrements DNS par programmation.

    Cela peut être utilisé par exemple. pour un service DNS dynamique, mais aussi pour obtenir des certificats de Let's Encrypt via dns-01.

    PDNS Manager est écrit en PHP en utilisant Bootstrap et jQuery. Le backend peut aussi bien utiliser une base de données Mysql ou MariaDB.

    La base de données est également utilisée par Powerdns qui se sert de pdns-backend-mysql.
    Caractéristiques
    • Support complet pour les zones natives et maitres
    • Interface simple pour gérer les enregistrement SOA
    • Capacité multi-utilisateur et gestion des permissions
    • Prise en charge de tous les types d'enregistrements DNS valides
    • API puissante pour diverses applications
    • Sous Licence Open Source Apache 2

    15.a - Installation

    15.a.1 Cas de configuration de PowerDNS pour le serveur web Nginx

    christophe@parallels:~$ cd /var/www
    christophe@parallels:/var/www$ sudo mkdir pdns-manager
    christophe@parallels:/var/www$ sudo chmod  777 -R pdns-manager
    christophe@parallels:/var/www$ sudo chown -R www-data:www-data pdns-manager
    christophe@parallels:/var/www$ cd pdns-manager
    christophe@parallels:/var/www/pdns-manager$wget https://pdnsmanager.lmitsystems.de/files/pdns-manager-1.2.1.tar.gz
    christophe@parallels:/var/www/pdns-manager$ tar xzvf pdns-manager-1.2.1.tar.gz
    christophe@parallels:/var/www/pdns-manager$ sudo rm pdns-manager-1.2.1.tar.gz
    christophe@parallels:/var/www/pdns-manager$ cd ..
    christophe@parallels:/var/www$ sudo chmod 777 -R pdns-manager
    $ sudo  nano /etc/nginx/sites-available/default
    Ajouter ces lignes dans votre hôte virtuel :
     location /pdns-manager {
            root /var/www;
            index index.php index.html index.htm;
            location ~ ^/pdns-manager/(.+\.php)$ {
                    try_files $uri =404;
                    root /var/www;
                    fastcgi_pass 127.0.0.1:9000;
                    fastcgi_index index.php;
                    fastcgi_param SCRIPT_FILENAME $request_filename;
                    include fastcgi_params;
                    fastcgi_param PATH_INFO $fastcgi_script_name;
                    fastcgi_buffer_size 128k;
                    fastcgi_buffers 256 4k;
                    fastcgi_busy_buffers_size 256k;
                    fastcgi_temp_file_write_size 256k;
                    fastcgi_intercept_errors on;
      }
    }
    Redémarrer Nginx pour que les modification soient prises en compte:
    christophe@parallels:/var/www$ sudo service nginx restart

    15.a.2 Cas de configuration de PowerDNS pour le serveur web Apache2

    christophe@parallels:~$ cd /var/www
    christophe@parallels:/var/www$ sudo mkdir pdns-manager
    christophe@parallels:/var/www$ sudo chmod  777 -R pdns-manager
    christophe@parallels:/var/www$ sudo chown -R www-data:www-data pdns-manager
    christophe@parallels:/var/www$ cd pdns-manager
    christophe@parallels:/var/www/pdns-manager$wget https://pdnsmanager.lmitsystems.de/files/pdns-manager-1.2.1.tar.gz
    christophe@parallels:/var/www/pdns-manager$ tar xzvf pdns-manager-1.2.1.tar.gz
    christophe@parallels:/var/www/pdns-manager$ sudo rm pdns-manager-1.2.1.tar.gz
    christophe@parallels:/var/www/pdns-manager$ cd ..
    christophe@parallels:/var/www$ sudo chmod 777 -R pdns-manager
    christophe@parallels:~$ sudo nano /etc/apache2/sites-enabled/000-default.conf
    Ajouter ces lignes dans votre hôte virtuel :
    Alias /pdns-manager "/var/www/pdns-manager/"Order allow,deny
             Allow from all
    # New directive needed in Apache 2.4.3:
            Require all granted
     
    Redémarrer Apache2 pour que les modification soient prises en compte:
    christophe@parallels:~$ sudo service apache2 restart

    15.a.2 Cas de configuration de PowerDNS pour le serveur web Lighttpd

    christophe@parallels:~$ cd /var/www/hml
    christophe@parallels:/var/www/html$ sudo mkdir pdns-manager
    christophe@parallels:/var/www/html$ sudo chmod  777 -R pdns-manager
    christophe@parallels:/var/www/html$ sudo chown -R  www-data:www-data pdns-manager
    christophe@parallels:/var/www/html$ cd pdns-manager
    christophe@parallels:/var/www/html/pdns-manager$ sudo wget https://pdnsmanager.lmitsystems.de/files/pdns-manager-1.2.1.tar.gz
    christophe@parallels:/var/www/html/pdns-manager$ tar xzvf pdns-manager-1.2.1.tar.gz
    christophe@parallels:/var/www/html/pdns-manager$ sudo rm pdns-manager-1.2.1.tar.gz
    christophe@parallels:/var/www/html/pdns-manager$ cd ..
    christophe@parallels:/var/www/html$ sudo chmod  777 -R pdns-manager

    15.b - Démarre l’installation de PDNS manager en lançant l’url : http://192.168.1.55/pdns-manager/install.php

    christophe @parallels:~$ mysql -u root -p
    MariaDB [(none)]> use server
    MariaDB [server]> show tables;
    On remarque que les tables utiles au fonctionnement de PowerDNS ont été crées :
    christophe@parallels:~$ sudo chmod 755 -R pdns-manager

    15.c - Se connecter à PDNS manager depuis l'adresse :http://192.168.1.55/pdns-manager/

    15.d - Cliquer sur le bouton "add Master"

    15.e - Ajouter un domaine
    15.f - Ajouter un champs CNAME
    15.g - Editer le fichier /etc/powerdns/pdns.conf
    christophe@parallels:~$ sudo nano  /etc/powerdns/pdns.conf
    On modifie le fichier pdns.conf avec les valeurs suivantes :
    allow-axfr-ips=127.0.0.1
    allow-recursion=127.0.0.1
    config-dir=/etc/powerdns
    daemon=yes
    disable-axfr=no
    guardian=yes
    local-address=0.0.0.0
    local-port=53
    master=yes
    module-dir=/usr/lib/x86_64-linux-gnu/pdns
    setgid=pdns
    setuid=pdns
    socket-dir=/var/run
    version-string=powerdns
    include-dir=/etc/powerdns/pdns.d
    15.h - Paramétrer la connexion à la base de donnée pour le serveur PowerDNS
    christophe@parallels:~$sudo nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf
    # MySQL Configuration
    #
    # Launch gmysql backend
    launch+=gmysql
    
    # gmysql parameters
    gmysql-host=localhost
    gmysql-port=3306
    gmysql-dbname=server
    gmysql-user=powerdns_user 
    gmysql-password=pass
    gmysql-dnssec=no
    # gmysql-socket=
    15.i - Redémarrer le service PowerDNS
    christophe@parallels:~$sudo service pdns restart
    15.j - Installer le paquet dnsutils qui contient les client dns fournis avec BIND
    christophe@parallels:~$ sudo apt-get install dnsutils
    15.k - Tester que le serveur de DNS fonctionne correctement à l'aide de la commande DIG
    christophe@parallels:~$dig parallels.virt A @127.0.0.1
    christophe@parallels:~$dig site.parallels.virt A @127.0.0.1
    15.l - Paramétrer la carte réseau sous MacOS pour interroger le serveur de DNS de la machine virtuelle (192.168.1.55)
    Pour vider le cache client sous MacOS :
    MinideCristophe:~ christophebrachet$ sudo killall -HUP mDNSResponder;sudo killall mDNSResponderHelper;sudo dscacheutil -flushcache
    15.m - L'hôte virtuel "site.parallels.virt" est accessible depuis un navigateur en tapant : http://site.parallels.virt/