# Vagrant



### Installation

```bash
$ brew cask install vagrant
```




### Test installation
```bash
$ vagrant
```




### Nouveau projet
```bash
$ mkdir vagrant_1
$ cd vagrant_1/
$ vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
```




### Installer une Box
Linux Mint 18.2 Fr: https://app.vagrantup.com/mazenovi/boxes/linuxmint

```bash
$ vagrant box add mazenovi/linuxmint
==> box: Loading metadata for box 'mazenovi/linuxmint'
    box: URL: https://vagrantcloud.com/mazenovi/linuxmint
==> box: Adding box 'mazenovi/linuxmint' (v18.2) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/mazenovi/boxes/linuxmint/versions/18.2/providers/virtualbox.box
    box: Progress: 0% (Rate: 667k/s, Estimated time remaining: 5:23:24)
==> box: Successfully added box 'mazenovi/linuxmint' (v18.2) for 'virtualbox'!
```

```bash
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'mazenovi/linuxmint'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'mazenovi/linuxmint' is up to date...
==> default: Setting the name of the VM: vagrant_1_default_1535283084230_82301
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2200 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2200
    default: SSH username: vagrant
    default: SSH auth method: private key
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default:
    default: Guest Additions Version: 5.1.26
    default: VirtualBox Version: 5.2
==> default: Mounting shared folders...
    default: /vagrant => /Users/bruno/vagrant_1
==> default: Running provisioner: shell...
    default: Running: /var/folders/s5/zy63nf3953sb_4k0ppcy16sw0000gn/T/vagrant-shell20180826-50764-3ev96e.sh
    default: Lecture des listes de paquets…
    default: Construction de l'arbre des dépendances…
    default: Lecture des informations d'état…
    default: The following additional packages will be installed:
    default:   apache2-bin apache2-data apache2-utils libapr1 libaprutil1
    default:   libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0
    default: Paquets suggérés :
    default:   apache2-doc apache2-suexec-pristine | apache2-suexec-custom
    default: Les NOUVEAUX paquets suivants seront installés :
    default:   apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1
    default:   libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0
    default: 0 mis à jour, 9 nouvellement installés, 0 à enlever et 10 non mis à jour.
    default: Il est nécessaire de prendre 1 540 ko dans les archives.
    default: Après cette opération, 6 369 ko d'espace disque supplémentaires seront utilisés.
    default: Réception de:1 http://archive.ubuntu.com/ubuntu xenial/main amd64 libapr1 amd64 1.5.2-3 [86,0 kB]
    default: Réception de:2 http://archive.ubuntu.com/ubuntu xenial/main amd64 libaprutil1 amd64 1.5.4-1build1 [77,1 kB]
    default: Réception de:3 http://archive.ubuntu.com/ubuntu xenial/main amd64 libaprutil1-dbd-sqlite3 amd64 1.5.4-1build1 [10,6 kB]
    default: Réception de:4 http://archive.ubuntu.com/ubuntu xenial/main amd64 libaprutil1-ldap amd64 1.5.4-1build1 [8 720 B]
    default: Réception de:5 http://archive.ubuntu.com/ubuntu xenial/main amd64 liblua5.1-0 amd64 5.1.5-8ubuntu1 [102 kB]
    default: Err:6 http://security.ubuntu.com/ubuntu xenial-security/main amd64 apache2-bin amd64 2.4.18-2ubuntu3.4
    default:   404  Not Found [IP : 91.189.88.162 80]
    default: Ign:7 http://security.ubuntu.com/ubuntu xenial-security/main amd64 apache2-utils amd64 2.4.18-2ubuntu3.4
    default: Ign:8 http://archive.ubuntu.com/ubuntu xenial-updates/main i386 apache2-data all 2.4.18-2ubuntu3.4
    default: Ign:9 http://security.ubuntu.com/ubuntu xenial-security/main amd64 apache2 amd64 2.4.18-2ubuntu3.4
    default: Ign:8 http://security.ubuntu.com/ubuntu xenial-security/main amd64 apache2-data all 2.4.18-2ubuntu3.4
    default: Err:6 http://security.ubuntu.com/ubuntu xenial-security/main amd64 apache2-bin amd64 2.4.18-2ubuntu3.4
    default:   404  Not Found [IP : 91.189.88.162 80]
    default: Err:7 http://security.ubuntu.com/ubuntu xenial-security/main amd64 apache2-utils amd64 2.4.18-2ubuntu3.4
    default:   404  Not Found [IP : 91.189.88.162 80]
    default: Err:9 http://security.ubuntu.com/ubuntu xenial-security/main amd64 apache2 amd64 2.4.18-2ubuntu3.4
    default:   404  Not Found [IP : 91.189.88.162 80]
    default: Err:8 http://security.ubuntu.com/ubuntu xenial-security/main i386 apache2-data all 2.4.18-2ubuntu3.4
    default:   404  Not Found [IP : 91.189.88.162 80]
    default: Err:8 http://security.ubuntu.com/ubuntu xenial-security/main i386 apache2-data all 2.4.18-2ubuntu3.4
    default:   404  Not Found [IP : 91.189.88.162 80]
    default: 285 ko réceptionnés en 0s (431 ko/s)
    default: E
    default: :
    default: Impossible de récupérer http://security.ubuntu.com/ubuntu/pool/main/a/apache2/apache2-bin_2.4.18-2ubuntu3.4_amd64.deb  404  Not Found [IP : 91.189.88.162 80]
    default: E
    default: :
    default: Impossible de récupérer http://security.ubuntu.com/ubuntu/pool/main/a/apache2/apache2-utils_2.4.18-2ubuntu3.4_amd64.deb  404  Not Found [IP : 91.189.88.162 80]
    default: E
    default: :
    default: Impossible de récupérer http://security.ubuntu.com/ubuntu/pool/main/a/apache2/apache2-data_2.4.18-2ubuntu3.4_all.deb  404  Not Found [IP : 91.189.88.162 80]
    default: E: Impossible de récupérer http://security.ubuntu.com/ubuntu/pool/main/a/apache2/apache2_2.4.18-2ubuntu3.4_amd64.deb  404  Not Found [IP : 91.189.88.162 80]
    default:
    default: E: Impossible de récupérer certaines archives, peut-être devrez-vous lancer apt-get update ou essayer avec --fix-missing ?
The SSH command responded with a non-zero exit status. Vagrant
assumes that this means the command failed. The output for this command
should be in the log above. Please read the output to determine what
went wrong.
```



### Mettre à jour la box:

```bash
$ apt-get update
```



### Démarrer la box:

```bash
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'mazenovi/linuxmint' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2200 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2200
    default: SSH username: vagrant
    default: SSH auth method: private key
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default:
    default: Guest Additions Version: 5.1.26
    default: VirtualBox Version: 5.2
==> default: Mounting shared folders...
    default: /vagrant => /Users/bruno/vagrant_1
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.
bruno@silverbook:~/vagrant_1$ vagrant provision
==> default: Running provisioner: shell...
    default: Running: /var/folders/s5/zy63nf3953sb_4k0ppcy16sw0000gn/T/vagrant-shell20180826-51048-16o6i4q.sh
    default: Lecture des listes de paquets…
    default: Construction de l'arbre des dépendances…
    default: Lecture des informations d'état…
    default: The following additional packages will be installed:
    default:   apache2-bin apache2-data apache2-utils libapr1 libaprutil1
    default:   libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0
    default: Paquets suggérés :
    default:   apache2-doc apache2-suexec-pristine | apache2-suexec-custom
    default: Les NOUVEAUX paquets suivants seront installés :
    default:   apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1
    default:   libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0
    default: 0 mis à jour, 9 nouvellement installés, 0 à enlever et 441 non mis à jour.
    default: Il est nécessaire de prendre 1 255 ko/1 540 ko dans les archives.
    default: Après cette opération, 6 373 ko d'espace disque supplémentaires seront utilisés.
    default: Réception de:1 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 apache2-bin amd64 2.4.18-2ubuntu3.9 [925 kB]
    default: Réception de:2 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 apache2-utils amd64 2.4.18-2ubuntu3.9 [81,8 kB]
    default: Réception de:3 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 apache2-data all 2.4.18-2ubuntu3.9 [162 kB]
    default: Réception de:4 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 apache2 amd64 2.4.18-2ubuntu3.9 [86,6 kB]
    default: dpkg-preconfigure: impossible de réouvrir stdin : No such file or directory
    default: 1 255 ko réceptionnés en 0s (2 062 ko/s)
    default: Sélection du paquet libapr1:amd64 précédemment désélectionné.
    default: (Lecture de la base de données...
    default: (Lecture de la base de données... 5%
    default: (Lecture de la base de données... 10%
    default: (Lecture de la base de données... 15%
    default: (Lecture de la base de données... 20%
    default: (Lecture de la base de données... 25%
    default: (Lecture de la base de données... 30%
    default: (Lecture de la base de données... 35%
    default: (Lecture de la base de données... 40%
    default: (Lecture de la base de données... 45%
    default: (Lecture de la base de données... 50%
    default: (Lecture de la base de données... 55%
    default: (Lecture de la base de données... 60%
    default: (Lecture de la base de données... 65%
    default: (Lecture de la base de données... 70%
    default: (Lecture de la base de données... 75%
    default: (Lecture de la base de données... 80%
    default: (Lecture de la base de données... 85%
    default: (Lecture de la base de données... 90%
    default: (Lecture de la base de données... 95%
    default: (Lecture de la base de données... 100%
    default: (Lecture de la base de données...
    default: 203928 fichiers et répertoires déjà installés.)
    default: Préparation du dépaquetage de .../libapr1_1.5.2-3_amd64.deb ...
    default: Dépaquetage de libapr1:amd64 (1.5.2-3) ...
    default: Sélection du paquet libaprutil1:amd64 précédemment désélectionné.
    default: Préparation du dépaquetage de .../libaprutil1_1.5.4-1build1_amd64.deb ...
    default: Dépaquetage de libaprutil1:amd64 (1.5.4-1build1) ...
    default: Sélection du paquet libaprutil1-dbd-sqlite3:amd64 précédemment désélectionné.
    default: Préparation du dépaquetage de .../libaprutil1-dbd-sqlite3_1.5.4-1build1_amd64.deb ...
    default: Dépaquetage de libaprutil1-dbd-sqlite3:amd64 (1.5.4-1build1) ...
    default: Sélection du paquet libaprutil1-ldap:amd64 précédemment désélectionné.
    default: Préparation du dépaquetage de .../libaprutil1-ldap_1.5.4-1build1_amd64.deb ...
    default: Dépaquetage de libaprutil1-ldap:amd64 (1.5.4-1build1) ...
    default: Sélection du paquet liblua5.1-0:amd64 précédemment désélectionné.
    default: Préparation du dépaquetage de .../liblua5.1-0_5.1.5-8ubuntu1_amd64.deb ...
    default: Dépaquetage de liblua5.1-0:amd64 (5.1.5-8ubuntu1) ...
    default: Sélection du paquet apache2-bin précédemment désélectionné.
    default: Préparation du dépaquetage de .../apache2-bin_2.4.18-2ubuntu3.9_amd64.deb ...
    default: Dépaquetage de apache2-bin (2.4.18-2ubuntu3.9) ...
    default: Sélection du paquet apache2-utils précédemment désélectionné.
    default: Préparation du dépaquetage de .../apache2-utils_2.4.18-2ubuntu3.9_amd64.deb ...
    default: Dépaquetage de apache2-utils (2.4.18-2ubuntu3.9) ...
    default: Sélection du paquet apache2-data précédemment désélectionné.
    default: Préparation du dépaquetage de .../apache2-data_2.4.18-2ubuntu3.9_all.deb ...
    default: Dépaquetage de apache2-data (2.4.18-2ubuntu3.9) ...
    default: Sélection du paquet apache2 précédemment désélectionné.
    default: Préparation du dépaquetage de .../apache2_2.4.18-2ubuntu3.9_amd64.deb ...
    default: Dépaquetage de apache2 (2.4.18-2ubuntu3.9) ...
    default: Traitement des actions différées (« triggers ») pour libc-bin (2.23-0ubuntu9) ...
    default: Traitement des actions différées (« triggers ») pour man-db (2.7.5-1) ...
    default: Traitement des actions différées (« triggers ») pour systemd (229-4ubuntu19) ...
    default: Traitement des actions différées (« triggers ») pour ureadahead (0.100.0-19) ...
    default: Traitement des actions différées (« triggers ») pour ufw (0.35-0ubuntu2) ...
    default: Paramétrage de libapr1:amd64 (1.5.2-3) ...
    default: Paramétrage de libaprutil1:amd64 (1.5.4-1build1) ...
    default: Paramétrage de libaprutil1-dbd-sqlite3:amd64 (1.5.4-1build1) ...
    default: Paramétrage de libaprutil1-ldap:amd64 (1.5.4-1build1) ...
    default: Paramétrage de liblua5.1-0:amd64 (5.1.5-8ubuntu1) ...
    default: Paramétrage de apache2-bin (2.4.18-2ubuntu3.9) ...
    default: Paramétrage de apache2-utils (2.4.18-2ubuntu3.9) ...
    default: Paramétrage de apache2-data (2.4.18-2ubuntu3.9) ...
    default: Paramétrage de apache2 (2.4.18-2ubuntu3.9) ...
    default: Enabling module mpm_event.
    default: Enabling module authz_core.
    default: Enabling module authz_host.
    default: Enabling module authn_core.
    default: Enabling module auth_basic.
    default: Enabling module access_compat.
    default: Enabling module authn_file.
    default: Enabling module authz_user.
    default: Enabling module alias.
    default: Enabling module dir.
    default: Enabling module autoindex.
    default: Enabling module env.
    default: Enabling module mime.
    default: Enabling module negotiation.
    default: Enabling module setenvif.
    default: Enabling module filter.
    default: Enabling module deflate.
    default: Enabling module status.
    default: Enabling conf charset.
    default: Enabling conf localized-error-pages.
    default: Enabling conf other-vhosts-access-log.
    default: Enabling conf security.
    default: Enabling conf serve-cgi-bin.
    default: Enabling site 000-default.
    default: Traitement des actions différées (« triggers ») pour libc-bin (2.23-0ubuntu9) ...
    default: Traitement des actions différées (« triggers ») pour systemd (229-4ubuntu19) ...
    default: Traitement des actions différées (« triggers ») pour ureadahead (0.100.0-19) ...
    default: Traitement des actions différées (« triggers ») pour ufw (0.35-0ubuntu2) ...
```



### Se connecter à la box:

```bash
$ vagrant ssh
Welcome to Linux Mint 18.2 Sonya (GNU/Linux 4.8.0-53-generic x86_64)

- Documentation:  https://www.linuxmint.com
  vagrant@vagrant-VirtualBox ~ $ ls
  Bureau  Documents  Images  Modèles  Musique  Public  Téléchargements  Vidéos

CTRL + D => déconnexion ssh

vagrant@vagrant-VirtualBox ~ $ déconnexion
Connection to 127.0.0.1 closed.
```



### Installer LAMP:

```bash
sudo apt-get install apache2
sudo apt-get install mariadb-server # This will ask for a root password, I leave it blank. 
sudo apt-get install php
sudo apt-get install php7.3-mysql
```



#### Configurer le serveur local:

Ouvrir le fichier Vagrantfile et dé-commenter les 2 lignes suivantes:

```bash
config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

config.vm.network "private_network", ip: "192.168.33.10"
```

Quitter la box

```bash
exit
```

et redémarrer

```bash
$ vagrant reload
$ vagrant ssh
sudo /etc/init.d/apache2 start
```

Dans un navigateur, aller à *192.168.33.10* pour voir la page d'accueil d'Apache.



#### Dossiers partagés:

Créer un dossier *vagrant_site* sur le Mac et y ajouter un fichier *index.php*.

```php
<?php echo "Hello world"; ?>
```

Ouvrir le fichier Vagrantfile et dé-commenter la ligne suivante:

```bash
config.vm.synced_folder "../data", "/vagrant_data"
```

et la modifier comme suit:

```bash
config.vm.synced_folder "../vagrant_site/", "/var/www/html/"
```

- "../vagrant_site/" est le chemin vers le dossier nouvellement crée.
- "/var/www/html/" est le chemin où seront les fichiers dans la VM Vagrant.

Quitter la box:

```bash
exit
```

et redémarrer:

```bash
$ vagrant reload
$ vagrant ssh
```

Dans un navigateur, recharger *192.168.33.10* pour voir la page 'Hello World'.



#### MySQL:

Se connecter à la VM et démarrer Mysql:

```bash
sudo mysql
```

```mysql
CREATE USER 'debian';
GRANT ALL PRIVILEGES ON *.* TO debian;`
quit
```

Quitter la VM:

```bash
exit
```

puis

```bash
$ vagrant ssh-config

Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/bruno/vagrant_boxes/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL
```

Ouvrir Sequel Pro et initier une connexion SSH:

- Hôte MySQL: 127.0.0.1
- Utilisateur: debian
- Mot de passe: <vide>
- Base: <vide>
- Port: <vide>
- Hôte SSH: 127.0.0.1
- Utilisateur SSH: vagrant
- Clé SSH: select /Users/bruno/vagrant_boxes/.vagrant/machines/default/virtualbox/private_key
- Port SSH: 2222



#### Virtual Host:

Editer le fichier *hosts* sur le mac:

```bash
$ sudo nano /etc/hosts
```

Ajouter cette ligne à la fin:

```bash
# Vagrant
192.168.33.10 hello.world
```

SSH dans la VM:

```bash
$ vagrant ssh
```

Puis:

```bash
cd /etc/apache2/sites-available/
```

Créer un nouveau fichier de config:

```bash
sudo nano hello.world.conf
```

Et y ajouter:

```bash
<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  ServerName hello.world
  DocumentRoot /var/www/html/
</VirtualHost>
```

Relancer Apache:

```bash
sudo a2ensite hello.world.conf
sudo service apache2 reload
```

Dans le navigateur, charger la page *hello.wolrd*



### Quitter la box:

```bash
$ vagrant halt
==> default: Attempting graceful shutdown of VM...
```



### Supprimer la box:

```bash
$ vagrant destroy
```



### Supprimer les fichiers:

```bash
$ vagrant box remove <name>
```



### Synced folders:

```bash
vagrant@vagrant-VirtualBox /vagrant $ ls
foo  provision.sh  Vagrantfile
et
bruno@silverbook:~/vagrant_1$ ls
Vagrantfile	foo		provision.sh
sont synchronisés
```



### Provisionning:

Créer un fichier bootstrap.sh dans le même répertoire que Vagrantfile

```bash
# !/usr/bin/env bash

apt-get update
apt-get install -y apache2
if ! [ -L /var/www ]; then
  rm -rf /var/www
  ln -fs /vagrant /var/www
fi
```

et ajouter la ligne suivante à `Vagrantfile`

```bash
config.vm.provision :shell, path: "bootstrap.sh"
```



### Redémarrer la box:

```bash
$ vagrant up
Redémarrer la VM et relancer les provisions (lancer uniquement au 1er lancement de vagrant up)
$ vagrant reload --provision
```



### Liens:

[Plusieurs Vagrant MV dans un fichier Vagrantfile](http://www.thisprogrammingthing.com/2015/multiple-vagrant-vms-in-one-vagrantfile/)

[Utiliser Vagrant et Packer pour créer des VM](https://www.rubix.nl/blogs/utilizing-vagrant-and-packer-provisioning-development-environments)

[Créer une VagrantBox](https://www.engineyard.com/blog/building-a-vagrant-box)

[Vagrant Boxes](https://app.vagrantup.com/boxes/search)

[Vagrant docs](https://www.vagrantup.com/intro/getting-started/index.html)

[Bootstrap PHP7](https://github.com/spiritix/vagrant-php7)

[How To Provision A LEMP Stack In Vagrant](https://kenfavors.com/code/how-to-provision-a-lemp-stack-in-vagrant/)

[Setting Up a LAMP Server on a Vagrant Machine](https://dev.to/boringbdon/setting-up-a-lamp-server-on-a-vagrant-machine-ppi)

[SCOTCH BOX 3.5](https://box.scotch.io)

