eZ Launchpad

Un outils qui va vous aider à construire un projet eZ Platform avec Docker en moins de 5 minutes.

Demonstration

Voici une démonstration de l'utilisation de l'initialization d'un projet en ne partant de rien. Cela va installer tout la stack pour vous, et vous permettre de code, commit et pusher!

Voici une démonstration de l'utilisation de lacreation d'un projet en partant d'un dépot git. Cela va installer tout la stack pour vous, et vous permettre de code, commit et pusher!

Installation

Requirements:

  • PHP and PHP-CURL extension. PHP version 5.6+ or 7+
  • Docker 1.17+
  • Docker Compose 1.16+

Si vous avez curl d'installé:

$ curl -LSs https://ezsystems.github.io/launchpad/install_curl.bash | bash

Si vous avez wget d'installé:

$ wget -O - "https://ezsystems.github.io/launchpad/install_wget.bash" | bash

Utilisation

Quand vous avez installé eZ Launchpad (~/ez), vous pouvez profiter des fonctionnalités.

eZ Launchpad fourni 2 fonctionnalités principales:

  • Initialisation d'un tout nouveau projet sur Docker
  • Creation de la stack Docker d'un projet existant.
$ export BLACKFIRE_CLIENT_ID=xxxx-xxxx-xxxx-xxxx-xxxxx
export BLACKFIRE_CLIENT_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export BLACKFIRE_SERVER_ID=xxxx-xxxx-xxxx-xxxx-xxxxx
export BLACKFIRE_SERVER_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Initialisation

C'est l'installation en partant de zéro. Vous devez utiliser cela quand vous n'avez pas encore de projet, que vous voulez installer eZ Platform.

$ ~/ez init

eZ Launchpad va vous accompagner dans la création avec quelques questions.

A la fin de la procédure, cette étape auront été fait pour vous:

  • Configuration locale du projet.
  • Téléchargement(pull) des bonnes images Docker sur votre local démon Docker.
  • Installer un docker-compose.yml adapté pour eZ.
  • Créer et démarrer les containers requis.(En fonction des choix effectués)
  • Installation de Composer dans le container Engine.(la où PHP est éxécuté sur la stack)
  • Installation d'eZ Platform avec Composer dans la stack.

Une fois l'initialisation terminée, le projet est prêt, vous pouvez vérifier en faisant:

$ ~/ez ps

Vous êtes désormais prêt a exporter la base de données et le storage, commiter and publier votre projet vers votre équipe.

$ ~/ez dumpdata; git init; git add .; git commit -m "First Initial Commit"
$ git remote add origin https://gitorigin.com/xxx/xxxx-xxx.git; git push -u origin master

eZ Platform Enterprise

Si vous voulez utiliser la version entreprise ou une version non stable vous avez le choix! Regardez l'aide. Voici un exemple:

$ ~/ez init ezsystems/ezplatform-ee

Quand eZ Launchpad vous demander les autorisations HTTP-BASIC alors il vous faudra fournir la clef d'installation et le jeton.

Creation

Dans ce context vous avez déjà un projet quelque part, quelqu'un a déjà fait un ~/ez init

Donc vous avez probablement déjà fait

$ git clone https://SOMETHING.git

Si vous voulez savoir si votre projet est prêt pour eZ Launchpad vous pouvez vérifier l'existence de .ezlaunchpad.yml à la racine du projet.

Pour créeer la stack locale la commande est alors

$ ~/ez create

eZ Launchpad va juste télécharger les images, créer les containers puis importer la base et le storage.

Déploiement

eZ Launchpad peut également vous aider à deployer. Même si c'est optionnel et que vous pouvez déployer comme bon vous semble, nous voulions vous simplifier la tâche.

Configuration

Platform.sh est une PaaS (Platform as a Service)
Avec Platform.sh il n'y a pas vraiment de processus de déploiement manuel. Platform.sh va simplement créer et synchroniser les environments selon le repository git!

eZ Launchpad va vous permettre de configurer le projet pour fonctionner avec Platform.sh.

$ ~/ez platformsh:setup

Cette commande va créer et générer les fichiers requis par Platform.sh. Comme eZ Launchpad connait votre projet et vos services il va adapter les fichiers de configuration Platform.sh

Voici la liste des fichier qui vont être créés.

.platform/services.yaml
.platform/routes.yaml
.platform.app.yaml
ezplatform/app/config/env/platformsh.php

Vous aurez besoin d'initialiser la base de données et le storage sur Platform.sh (la première fois), eZ Launchpad va donc aussi créer un dump.

Deploiement

Comment déjà mentionné, il n'y a pas vraiment de processus de déploiement, cette command va juste afficher de la documentation.

$ ~/ez platformsh:deploy

Bientôt disponible...

Stack

N'importe quand vous pouvez avoir de l'information sur votre stack

$ ~/ez info

Selon l'initialisation éffectuée vous aurez plus ou moins de service disponible. Voici par défaut.

LEMP: Linux Nginx Mysql/MariaDB PHP-FPM

Commandes

eZ Launchpad est fait pour vous aider avec Docker.

Pour le faire, vouci les commandes disponibles:

$ ~/ez
                
Usage:
  command [options] [arguments]

Available commands:
  help               Displays help for a command
  list               Lists commands
  rollback           Rollback an update.
  self-update        Self Update
 docker
  docker:build       [build] Build all the services (or just one).
  docker:clean       [docker:down|clean|down] Clean all the services.
  docker:comprun     [comprun] Run Composer command in the engine.
  docker:create      [create] Create all the services.
  docker:dumpdata    [dumpdata] Dump Database and Storage.
  docker:enter       [enter|docker:exec|exec] Enter in a container.
  docker:importdata  [importdata] Import Database and Storage.
  docker:initialize  [docker:init|initialize|init] Initialize the project and all the services.
  docker:logs        [logs|log] Display the logs.
  docker:sfrun       [sfrun] Run a Symfony command in the engine.
  docker:start       [start] Start all the services (or just one).
  docker:status      [docker:ps|docker:info|ps|info] Obtaining the project information.
  docker:stop        [stop] Stop all the services (or just one).
  docker:up          [up] Up all the services (or just one).
  docker:update      Update to last images.
 platformsh
  platformsh:deploy  [psh:deploy] Deploy with Platformsh integration.
  platformsh:setup   [psh:setup] Set up the Platformsh integration.

Configurations globales

Parce que vous voulez pouvoir partager certaines configurations entre vos projets. eZ Launchpad lit un fichier de configuration dans votre HOME.

Ce fichier de configuration est ~/ezlaunchpad/ez.yml. Voici un exemple:

docker:
    host_machine_mapping: "/Users/bob/MyProjects:/data/MYPROJECTS"
    host_composer_cache_dir: "/data/MYPROJECTS/.composer_cache"

provisioning:
    folder_name: "myprovisioningfoldername"

composer:
    http_basic:
        hostname:
            host: www.hostname.com
            login: login
            password: pass
    token:
        github:
            host: github.com
            value: tokenvalue

Notez que la configuarion est globale et ne sera pas incluse dans le projet. (i.e dans le repository de source). Mais elle sera utilisé dans votre stack Docker locale.

La section docker est décrite dans la prochaine section.

Mac OS X - Tips

Pour partager des répertoires entre l'hôte(votre Mac) vers les containers Docker for Mac est très lent.(au moins pour le moment). Donc pour contourner ce problème de performance, il y a une technique. NFS! C'est étrange en effet, mais oui NFS est bien plus rapide que le montage par défaut! Avant la dernière version de Docker pour Mac, nous utilisions D4M mais depuis la version 18.03 nous pouvons directement monter le host via un volume depuis le container.

Migrer depuis D4M-NFS

D'abord vous devez ajouter une option a votre /ect/exports, le -alldirs

$ cat /etc/exports
/Users/plopix -mapall=plopix:staff -alldirs localhost

Ensuite vous devez mettre à jour la version de docker-compose dans votre fichier provisioning/dev/docker-compose.yml vers 2.1. Ensuite vous devez créer un novueau fichier provisioning/dev/docker-compose-osx.yml. Avec ce contenu:

$ cat provisioning/dev/docker-compose-osx.yml
version: '2.1'
services:
    engine:
        volumes:
            - "nfsmount:${PROJECTMAPPINGFOLDER}"
volumes:
  nfsmount:
    driver: local
    driver_opts:
      type: nfs
      o: addr=host.docker.internal,lock
      device: ":${PROJECTCOMPOSEPATH}/"

Une fois que c'est configuré, vous pouvez dumpdata (pour backuper), clean et re-create le projet:

$ ~/ez dumpdata; ~/ez clean; ~/ez create

Si vous aviez un mapping special, corrigé le:

docker:
        host_machine_mapping: "/Users/plopix:/Users/plopix"
        host_composer_cache_dir: "/Users/plopix/.composer_cache

C'est tout

Le cache dans le container

Même avec D4M et le partage NFS les performances peuvent être améliorées. Ce qui suit est clairement une astuce mais une astuce qui fonctionne parfaitement bien!
Voici la technique dans votre env vous avez une ligne:

# provisioning/dev/docker-compose.yml
engine:
    environment:
        - "SYMFONY_TMP_DIR=/tmp/ezplatformcache/"

Si vous voulez que le cache soit généré sur votre host, pour PHPStorm par exemple, supprimer cette ligne:

$ ~/ez up; ~/ez stop; ~/ez start

Enjoy!