eZ Launchpad

Et verktøy som hjelper deg å bygge et eZ Platform prosjekt basert på Docker på under 5 minutter.

Demo

Dette er en demo av initialisering hvor du får alt du trenger for å kode, committe og pushe!

This is a demo of a creation. Starting from a git repository you will get everything ready to code, commit and push!

Installasjon

Requirements:

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

Dersom du har curl installert:

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

Dersom du har wget installert:

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

Bruk

Når du har installert eZ Launchpad (~/ez) kan du begynne å bruke funksjonene.

eZ Launchpad leverer 2 hovedfunksjoner:

  • Initialisering av en helt ny eZ Platform stack (på toppen av Docker)
  • Opprette en Docker Stack relatert til gjelende katalog.
$ 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

Initialisering

Dette er installasjon fra bunn av. Du må kjøre denne når du starter et helt nytt eZ Platform prosjekt.

$ ~/ez init

Her vil eZ Launchpad spørre deg en del spørsmål.

På Slutten av prosessen vil følgende gjøres for deg:

  • Konfigurere prosjektet ditt lokalt.
  • Laste ned(pull) de korrekte imagene til din Docker Daemon.
  • Sette opp en eZ kompatibel docker-compose.yml.
  • Opprette og starte påkrevede containere. (avhengig av valgene du gjorde)
  • Installere Composer i Engine containerern. (der hvor PHP blir eksekvert for din Stack)
  • Installere eZ Platform igjennom Composer inne i stacken.

Når installasjonen er fullført, er prosjektet oppe å kjører, og du kan gjøre følgende:

$ ~/ez ps

Du er nå klar til å dumpe databasen og filene, git commit og push for å dele prosjektet med ditt team.

$ ~/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

Enten du ønsker å bruke en enterprise versjon eller en ustabil utviklerversjon har du et valg. Sjekk dokumentasjonen. Det er et eksempel der:

$ ~/ez init ezsystems/ezplatform-ee

Når eZ Launchpad spør om HTTP-BASIC må du oppgi Installasjonsnøkkel og token.

Opprett

Denne kommandoen bruker du når du allere har et eksisterende prosjekt, dvs noen har allerede kjørt ~/ez init

Du har mest sannsynlig gjort

$ git clone https://SOMETHING.git

Om du vil vite om prosjektet ditt er klart for eZ Launchpad kan du sjekke om følgende eksisterer .ezlaunchpad.yml i rot-mappen til prosjektet ditt.

For å opprette en loak stack er kommandoen

$ ~/ez create

Her vil eZ Launchpad hente images, opprette containere for din stack samt importere database/filer.

Deployment

eZ Launchpad can help you to deploy as well. Even if it is optional and you can deploy the way you want we wanted to provide simplifications.

Setup

Platform.sh is a PaaS (Platform as a Service)
With Platform.sh there is no real deployment process to run manually. Platform.sh will just create and synchronize environments based on your git repository!

eZ Launchpad provides you a way to set up your eZ Project to be Platform.sh ready.

$ ~/ez platformsh:setup

This command will create and generate files required by Platform.sh. Because eZ Launchpad knows your project and the services you need it will adapt the Plaftorm.sh configuration files to it.

Here is the list of files that are going to be created.

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

Because you will need to initialize the database and the storage on Platform.sh (the first time), eZ Launchpad will also create a dump.

Deploy

As mentioned there is not real "deployment" process, this command will just display some documentation.

$ ~/ez platformsh:deploy

Coming soon...

Stack

Du kan når som helst få informasjon om din stack ved å kjøre

$ ~/ez info

Avhengig av initialiseringen kan du ha ulikt antall tjenester, men her er de mest vanlige.

LEMP: Linux Nginx Mysql/MariaDB PHP-FPM

Vanlige kommandoer

eZ Launchpad er laget for å hjelpe deg med din lokale Docker stack.

Her er de mest vanlige kommandoene for dette:

$ ~/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.

Når du vil gi ekstra argumenter til en Symfony-kommando, må du pakke alt (kommando + argumenter) inne i sitater:

$ ~/ez sfrun "cache:clear --env=prod"

Global konfigurasjon

Siden alle prosjekt kan dele ting og fordi du kan ønske samme konfigurasjon overalt leser eZ Launchpad en konfigurasjonsfil fra din HOME katalog.

Denne konfigurasjonsfilen er ~/ezlaunchpad/ez.yml. Her er et komplett eksempel:

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

Legg merke til at denne konfigurasjonen er global og vil ikke bli inkludert i hvert enkelt prosjekt (dvs i CVS/Git basen). Men det vil bli inkludert i din lokale stack.

docker er beskrevet i neste seksjon.

Mac OS X - Tips

When it comes to share folder from the Host(your mac) to containers Docker for Mac is slow. (at least for now). Then to manage this performance issue, there is a workaround. NFS! Yes, It might be odd, but yes NFS is faster than the default mount. Before the last version of Docker for Mac, we were using D4M but since Docker for Mac 18.03 we can directly mount the host as a volume from the container.

Update from D4M-NFS

First you need to add an option to your /ect/exports, spot the -alldirs

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

Second you need to update the version of docker-compose in your provisioning/dev/docker-compose.yml file to 2.1. And you need to create a new file named: provisioning/dev/docker-compose-osx.yml. With this content:

$ 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}/"

Once the setup is up-to-date, you can dumpdata (to backup), clean, and re-create the project again:

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

If you were using a special mapping, fix it:

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

That is it!

Store cache in the container

Even with D4M and the NFS mount, performances can be optimized. The following is clearly a trick. But a trick that works pretty well!
Here is the magic, in your env you have this line

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

If you want the cache to be generated on your host for PHPStorm for instance, just remove that line:

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

Enjoy!