Skip to research

L'ultimate fichier conf.yml Drupal VM pour l'ultime environnement de développement drupal 8 couplé à ReactJs avec webpack

Temps de lecture
Environ 8 minutes

Ce fichier de configuration permet de déployer un environnement propice au développement sous Drupal avec ReactJs.

Pour le développement Drupal, l'outil que je recommande est Drupal VM. Sous condition d'avoir une machine puissante et de trouver la combinaison des versions des outils a associés,  l'outil met a disposition des machines virtuelles, avec, Apache, php7, Mysql, mais également Adminer, Drupal console, Drush, Elasticsearch, Mailhog, Nodejs, Ruby et si vous avez besoin de Memcache ou encore Varnish, il vous suffira de dé-commenter la ligne adéquate et de procéder à la configuration de l'outil désiré pour l'implémenter a votre environnement. Voici le mien.

Configuration machine

La configuration de ma machine. (j'ai retiré les informations inutiles à la démonstration ou qui pourrait compromettre la sécurité de ma machine ou de mon réseau, prenez garde, a ne pas communiquer des informations critiques).

C:\Users\mm\Documents\tdb\workspace\drupal-react
λ systeminfo
Nom de l’hôte:                              MM
Nom du système d’exploitation:              Microsoft Windows 10 Famille
Version du système:                         10.0.17134 N/A version 17134
Fabricant du système d’exploitation:        Microsoft Corporation
Configuration du système d’exploitation:    Station de travail autonome
Type de version du système d’exploitation:  Multiprocessor Free
Propriétaire enregistré:                    Windows User
Organisation enregistrée:
Identificateur de produit:                  00---------------------------------
Date d’installation originale:              09/06/2018, 16:11:32
Heure de démarrage du système:              12/07/2018, 20:28:51
Fabricant du système:                       Micro-Star International Co., Ltd.
Modèle du système:                          GE62 7RE
Type du système:                            x64-based PC
Processeur(s):                              1 processeur(s) installé(s). 
[01] : Intel64 Family 6 Model 158 Stepping 9 Genuine Intel ~2800 MHz
Version du BIOS:                            American Megatrends Inc. E16J9IMS.309, 28/11/2016
Répertoire Windows:                         C:\WINDOWS
Répertoire système:                         C:\WINDOWS\system32
Périphérique d’amorçage:                    \------------------------
Option régionale du système:                fr; Français (France)
Paramètres régionaux d’entrée:              fr; Français (France)
Fuseau horaire:                             (UTC+01:00) Bruxelles, Copenhague, Madrid, Paris
Mémoire physique totale:                    16 269 Mo
Mémoire physique disponible:                5 347 Mo
Mémoire virtuelle : taille maximale:        24 973 Mo
Mémoire virtuelle : disponible:             8 650 Mo
Mémoire virtuelle : en cours d’utilisation: 16 323 Mo
Emplacements des fichiers d’échange:        C:\------
Domaine:                                    ------------
Serveur d’ouverture de session:             \\-----
Correctif(s):                               4 Corrections installées.
Carte(s) réseau:                            5 carte(s) réseau installée(s).
Configuration requise pour Hyper-V: 
  Extensions de mode du moniteur d’ordinateur virtuel : Oui
  Virtualisation activée dans le microprogramme : Oui
  Traduction d’adresse de second niveau : Oui
  Prévention de l’exécution des données disponible : Oui

 

C'est une machine, moyenne à prix moyen (1700 euros) dont un des defaults est de tourner sous Windows Family, dont on peut facilement monter la version en Pro. C'est un MSI, fait pour le jeu, puissant, stable, mais trop de soft installés, pour faire tourner des options tierses, la coloration du clavier, le centre de jeu MSi etc, qui alourdisse et réduise, à l'usage, les performances.

Cela fait un an que je l'ai, il fait déjà beaucoup de bruit, parfois, mais de tous ceux que j'ai utilisé c'est un de ceux qui tiens le mieux les besoins de mes machines virtuelles.
 

Configuration logiciel

J'ai essayé multiple combinaison est c'est celle qui fonctionne le mieux.

C:\Users\mm
λ vagrant -v
Vagrant 1.9.7

C:\Users\mm
λ VBoxManage --version
VirtualBox 5.1.36

C:\Users\mm
λ git --version
git version 2.17.0.windows.1

C:\Users\mm
λ Drupal Vm -v
4.9.0 "Creation of Tron" (2018-06-01)

fichier conf.yml

---
# Available `vagrant_box` values include:
#   - beet/box (pre-provisioned, based on Ubuntu 16.04)
#   - geerlingguy/centos7
#   - geerlingguy/centos6
#   - geerlingguy/debian9
#   - geerlingguy/debian8
#   - geerlingguy/ubuntu1604
#   - geerlingguy/ubuntu1404
vagrant_box: geerlingguy/ubuntu1604

vagrant_user: vagrant
vagrant_synced_folder_default_type: nfs
vagrant_gui: false

# If you need to run multiple instances of Drupal VM, set a unique hostname,
# machine name, and IP address for each instance.
vagrant_hostname: react.mm
vagrant_machine_name: react
vagrant_ip: 192.168.88.31

# Allow Drupal VM to be accessed via a public network interface on your host.
# Vagrant boxes are insecure by default, so be careful. You've been warned!
# See: https://docs.vagrantup.com/v2/networking/public_network.html
vagrant_public_ip: ""

# A list of synced folders, with the keys 'local_path', 'destination', and
# a 'type' of [nfs|rsync|smb] (leave empty for slow native shares). See
# http://docs.drupalvm.com/en/latest/getting-started/syncing-folders/ for more.
vagrant_synced_folders:
  # The first synced folder will be used for the default Drupal installation, if
  # any of the build_* settings are 'true'. By default the folder is set to
  # the drupal-vm folder.
  - local_path: .
    destination: /var/www/drupalvm
    type: nfs
    create: true

# Memory and CPU to use for this VM.
vagrant_memory: 2048
vagrant_cpus: 1

# Ensure vagrant plugins are installed.
vagrant_plugins:
  - name: vagrant-vbguest
  - name: vagrant-hostsupdater

# Minimum required versions.
drupalvm_vagrant_version_min: '1.8.6'
drupalvm_ansible_version_min: '2.4'

# Force use of ansible_local provisioner, even if Ansible is installed on host.
force_ansible_local: false

# The web server software to use. Can be either 'apache' or 'nginx'.
drupalvm_webserver: apache

# The database system to use. Can be either 'mysql' or 'pgsql'.
drupal_db_backend: mysql

# Set this to 'false' if you are using a different site deployment strategy and
# would like to configure 'vagrant_synced_folders' and 'apache_vhosts' manually.
drupal_build_makefile: false
drush_makefile_path: "{{ config_dir }}/drupal.make.yml"
drush_make_options: "--no-gitinfofile"

# Set 'drupal_build_makefile' to 'false' and this to 'true' if you are using a
# composer based site deployment strategy.
drupal_build_composer: false
drupal_composer_path: "{{ config_dir }}/drupal.composer.json"
drupal_composer_install_dir: "/var/www/drupalvm/drupal"
drupal_composer_dependencies:
  - "drupal/devel:1.x-dev"

# Set this to 'true' and 'drupal_build_makefile', 'drupal_build_composer' to 'false'
# if you are using Composer's create-project as a site deployment strategy.
drupal_build_composer_project: true
drupal_composer_project_package: "drupal-composer/drupal-project:8.x-dev"
drupal_composer_project_options: "--prefer-dist --stability dev --no-interaction"

# Set this to 'false' if you don't need to install drupal (using the drupal_*
# settings below), but instead copy down a database (e.g. using drush sql-sync).
drupal_install_site: true

# Required Drupal settings.
drupal_core_path: "{{ drupal_composer_install_dir }}/web"
drupal_core_owner: "{{ drupalvm_user }}"
drupal_db_user: drupal
drupal_db_password: drupal
drupal_db_name: drupal
drupal_db_host: localhost

# Settings for installing a Drupal site if 'drupal_install_site:' is 'true'.
drupal_major_version: 8
drupal_domain: "{{ vagrant_hostname }}"
drupal_site_name: "Drupal"
drupal_install_profile: standard
drupal_enable_modules: [ 'devel' ]
drupal_account_name: admin
drupal_account_pass: admin

# Additional arguments or options to pass to `drush site-install`.
drupal_site_install_extra_args: []

# Cron jobs are added to the vagrant user's crontab. Keys include name
# (required), minute, hour, day, weekday, month, job (required), and state.
drupalvm_cron_jobs: []

# Drupal VM automatically creates a drush alias file in your ~/.drush folder if
# this variable is 'true'.
configure_drush_aliases: true
drush_aliases_host_template: "templates/drupalvm.aliases.drushrc.php.j2"
drush_aliases_host_template_yml: "templates/drupalvm.aliases.yml.j2"
drush_aliases_guest_template: "templates/drupalvm-local.aliases.drushrc.php.j2"
drush_aliases_guest_template_yml: "templates/drupalvm-local.aliases.yml.j2"

# Helper variable to configure the PHP-FPM connection for each Apache
# VirtualHost in the `apache_vhosts` list.
apache_vhost_php_fpm_parameters: |
    <FilesMatch \.php$>
      SetHandler "proxy:fcgi://{{ php_fpm_listen }}"
    </FilesMatch>

# Apache VirtualHosts. Add one for each site you are running inside the VM. For
# multisite deployments, you can point multiple servernames at one documentroot.
# View the geerlingguy.apache Ansible Role README for more options.
apache_vhosts:
  - servername: "{{ drupal_domain }}"
    serveralias: "www.{{ drupal_domain }}"
    documentroot: "{{ drupal_core_path }}"
    extra_parameters: "{{ apache_vhost_php_fpm_parameters }}"

  - servername: "adminer.{{ vagrant_hostname }}"
    documentroot: "{{ adminer_install_dir }}"
    extra_parameters: "{{ apache_vhost_php_fpm_parameters }}"

  - servername: "xhprof.{{ vagrant_hostname }}"
    documentroot: "{{ php_xhprof_html_dir }}"
    extra_parameters: "{{ apache_vhost_php_fpm_parameters }}"

  - servername: "pimpmylog.{{ vagrant_hostname }}"
    documentroot: "{{ pimpmylog_install_dir }}"
    extra_parameters: "{{ apache_vhost_php_fpm_parameters }}"

  - servername: "{{ vagrant_ip }}"
    serveralias: "dashboard.{{ vagrant_hostname }}"
    documentroot: "{{ dashboard_install_dir }}"
    extra_parameters: "{{ apache_vhost_php_fpm_parameters }}"

apache_packages_state: latest
apache_remove_default_vhost: true
apache_mods_enabled:
  - expires.load
  - headers.load
  - ssl.load
  - rewrite.load
  - proxy.load
  - proxy_fcgi.load

# Nginx hosts. Each site will get a server entry using the configuration defined
# here. Set the 'is_php' property for document roots that contain PHP apps like
# Drupal.
nginx_hosts:
  - server_name: "{{ drupal_domain }} www.{{ drupal_domain }}"
    root: "{{ drupal_core_path }}"
    is_php: true

  - server_name: "adminer.{{ vagrant_hostname }}"
    root: "{{ adminer_install_dir }}"
    is_php: true

  - server_name: "xhprof.{{ vagrant_hostname }}"
    root: "{{ php_xhprof_html_dir }}"
    is_php: true

  - server_name: "pimpmylog.{{ vagrant_hostname }}"
    root: "{{ pimpmylog_install_dir }}"
    is_php: true

  - server_name: "{{ vagrant_ip }} dashboard.{{ vagrant_hostname }}"
    root: "{{ dashboard_install_dir }}"
    is_php: true

nginx_remove_default_vhost: true
nginx_ppa_use: true
nginx_vhost_template: "templates/nginx-vhost.conf.j2"

# MySQL databases and users.
mysql_databases:
  - name: "{{ drupal_db_name }}"
    encoding: utf8mb4
    collation: utf8mb4_general_ci

mysql_users:
  - name: "{{ drupal_db_user }}"
    host: "%"
    password: "{{ drupal_db_password }}"
    priv: "{{ drupal_db_name }}.*:ALL"

# PostgreSQL databases and users.
postgresql_databases:
  - name: "{{ drupal_db_name }}"

postgresql_users:
  - name: "{{ drupal_db_user }}"
    password: "{{ drupal_db_password }}"
    db: "{{ drupal_db_name }}"
    priv: "ALL"

# Comment out any extra utilities you don't want to install. If you don't want
# to install *any* extras, set this value to an empty set, e.g. `[]`.
installed_extras:
  - adminer
  # - blackfire
  - drupalconsole
  - drush
  - elasticsearch
  # - java
  - mailhog
  # - memcached
  # - newrelic
  - nodejs
  - pimpmylog
  # - redis
  - ruby
  # - selenium
  # - solr
  # - tideways
  # - upload-progress
  - varnish
  # - xdebug
  # - xhprof # use `tideways` if you're installing PHP 7+

# Add any extra apt or yum packages you would like installed.
extra_packages:
  - sqlite

# You can configure almost anything else on the server in the rest of this file.
extra_security_enabled: false

firewall_enabled: true
firewall_allowed_tcp_ports:
  - "22"
  - "25"
  - "80"
  - "81"
  - "443"
  - "4444"
  - "8025"
  - "8080"
  - "8443"
  - "8983"
  - "9200"
firewall_log_dropped_packets: false
firewall_disable_firewalld: true
firewall_disable_ufw: true

# PHP Configuration. Currently-supported versions: 5.6, 7.0, 7.1, 7.2.
# See version-specific notes: http://docs.drupalvm.com/en/latest/configurations/php/
php_version: "7.1"
php_install_recommends: no
php_memory_limit: "512M"
php_display_errors: "On"
php_display_startup_errors: "On"
php_realpath_cache_size: "1024K"
php_sendmail_path: "/opt/mailhog/mhsendmail"
php_opcache_enabled_in_ini: true
php_opcache_memory_consumption: "512"
php_opcache_max_accelerated_files: 4096
php_max_input_vars: "4000"

# Drupal VM defaults to using PHP-FPM with either Apache or Nginx. If you wish
# to instead use Apache + mod_php with an Ubuntu base box, make sure you add
# libapache2-mod-php7.0 to `extra_packages` elsewhere in this config file.
php_enable_php_fpm: true
php_fpm_listen: "127.0.0.1:9000"

composer_path: /usr/bin/composer
composer_home_path: "/home/{{ drupalvm_user }}/.composer"
composer_home_owner: "{{ drupalvm_user }}"
composer_home_group: "{{ drupalvm_user }}"
composer_global_packages:
  - { name: hirak/prestissimo, release: '^0.3' }

# Run specified scripts before or after VM is provisioned. Use {{ playbook_dir }}
# to reference the provisioning/ folder in Drupal VM or {{ config_dir }} to
# reference the directory where your `config.yml` is.
pre_provision_scripts: []
post_provision_scripts: []
  # - "{{ playbook_dir }}/../examples/scripts/configure-solr.sh"

# MySQL Configuration.
mysql_root_password: root
mysql_slow_query_log_enabled: true
mysql_slow_query_time: 2
mysql_wait_timeout: 300
adminer_install_filename: index.php

# Node.js configuration (if enabled above).
# Valid examples: "0.10", "0.12", "4.x", "5.x", "6.x".
nodejs_version: "6.x"
nodejs_npm_global_packages:
  - name: npm
  - name: yarn
  - name: webpack
  - name: webpack-cli
  - name: webpack-command
nodejs_install_npm_user: "{{ drupalvm_user }}"
npm_config_prefix: "/home/{{ drupalvm_user }}/.npm-global"

# Ruby Configuration (if enabled above).
ruby_install_gems_user: "{{ drupalvm_user }}"
ruby_install_gems: []

# Varnish Configuration (if enabled above).
varnish_listen_port: "81"
varnish_default_vcl_template_path: templates/drupalvm.vcl.j2
varnish_default_backend_host: "127.0.0.1"
varnish_default_backend_port: "80"

# Pimp my Log settings.
pimpmylog_install_dir: /usr/share/php/pimpmylog
pimpmylog_grant_all_privs: true

# XDebug configuration. XDebug is disabled by default for better performance.
php_xdebug_default_enable: 0
php_xdebug_coverage_enable: 0
php_xdebug_cli_disable: yes
php_xdebug_remote_enable: 1
php_xdebug_remote_connect_back: 1
php_xdebug_idekey: PHPSTORM
php_xdebug_max_nesting_level: 256
php_xdebug_remote_host: "{{ ansible_default_ipv4.gateway }}"

# Solr Configuration (if enabled above).
solr_version: "5.5.5"
solr_xms: "64M"
solr_xmx: "128M"

# Selenium configuration.
selenium_version: 2.53.0

# Docker configuration.
docker_container_name: drupal-vm
docker_image_name: drupal-vm
docker_image_path: ~/Downloads

# Other configuration.
dashboard_install_dir: /var/www/dashboard
known_hosts_path: ~/.ssh/known_hosts
hostname_configure: true
hostname_fqdn: "{{ vagrant_hostname }}"
ssh_home: "{{ drupal_core_path }}"

 

Les auteurs de Drupal VM

{
    "name": "geerlingguy/drupal-vm",
    "type": "vm",
    "description": "A VM for local Drupal development, built with Vagrant + Ansible",
    "keywords": ["vagrant", "vm", "virtual machine", "drupal"],
    "homepage": "https://www.drupalvm.com",
    "license": "MIT",
    "authors": [
        {
            "name": "Jeff Geerling",
            "homepage": "https://www.jeffgeerling.com"
        },
        {
            "name": "Oskar Schöldström",
            "homepage": "http://oxy.fi"
        }
    ],
    "support": {
        "issues": "https://github.com/geerlingguy/drupal-vm/issues",
        "source": "https://github.com/geerlingguy/drupal-vm",
        "docs": "http://docs.drupalvm.com"
    },
    "require": {},
    "config": {
        "process-timeout": 1800
    },
    "scripts": {
        "run-tests": "./tests/run-tests.sh",
        "docker-bake": "./provisioning/docker/bake.sh",
        "docker-save-image": "./provisioning/docker/save-image.sh",
        "docker-load-image": "./provisioning/docker/load-image.sh"
    }
}