WORDPRESS A DOCKER

Ján Bočínec

@johnnypea

Webové riešenia na mieru

WordPress pluginy a témy

@webikon

@wpsk

Predtým

  • MAMP, WAMP, XAMPP
  • Vagrant (VVV, Trellis...)
  • Wocker
  • VirtualBox, Parallels, VMware
  • Pomalé a nekonzistentné

potom

  • docker run...
  • docker-compose up...
  • Vlastné "images"
  • ...a kontajnery...
  • Samostatné procesy (microservices)
  • Rýchlé, flexibilné a zdieľateľné

Inštalácia

  • Mac
  • Windows (Server)
  • Linux (Ubuntu...)
  • AWS
  • Azure

windows

  • Povolená virtualizácia
  • Nazdieľajte adresár užívateľa
  • Potrebný reštart

mac

  • Môžete použiť Brew
  • Nepotrebujete reštartovať

Linux

  • Natívne prostredie ;)

Docker odporúča aj Jára.

docker run...
docker run --name some-wordpress \
--link some-mariadb:mysql -p 8080:80 -d wordpress


docker run --name some-mariadb \
-e MYSQL_ROOT_PASSWORD=my-secret-pw -d mariadb
docker-compose
version: "2"
services:
  database:
    image: mariadb
    ports:
      - "3333:3306"
    environment:
      MYSQL_ROOT_PASSWORD: TajneHeslo123

  wordpress:
    image: wordpress
    volumes:
      - .:/var/www/html
    ports:
      - "8080:80"
    links:
      - database:mysql
    environment:
      WORDPRESS_DB_PASSWORD: TajneHeslo123
docker-compose.yml
$ docker-compose up -d
http://localhost:8080

-d

Detached mode: Run containers in the background, print new container names.

Volumes
ports
links

volumes:
  - "/local/path:/container/path"
ports:
  - "8080:80"
links:
  - wordpress

oprávnenia súborov

chown -R 33:33 sites

"www-data"

Mysql kontajner

https://hub.docker.com/_/mariadb/

  • Automaticky vytvorí/nakonfiguruje databázu a jej užívateľov
  • Automaticky spustí mysql service
#!/usr/bin/env bash

docker-compose run --rm \
    database \
    mysqldump -h mysql -u root -proot wp-db > wp-db.sql

Export databázy

Wordpress kontajner

https://hub.docker.com/_/wordpress

  • Pripojí sa na databázu
  • Vytvorí databázu ak neexistuje
  • Stiahne WordPress ak je potreba
  • Automaticky nakonfiguruje wp-config.php

Štruktúra projektov

Development
├── docker-compose.yml
├── sites 
│   ├── project-1
│   ├── project-2
│   ├── project-3
│   ├── project-4
│   └── project-5
└── tools
    ├── build
    ├── cli
    ├── deploy
    ├── develop
    └── test

Premenné

wordpress:
  image: wordpress
  volumes:
    - './sites/${PROJECT}:/var/www/html'
  ports:
    - "8080:80"
  links:
    - database:mysql
  environment:
    WORDPRESS_DB_PASSWORD: TajneHeslo123
docker-compose.yml
#!/usr/bin/env bash

export PROJECT=project-X

docker-compose -p "$PROJECT" up -d
-p, --project-name NAME
     
Specify an alternate project name (default: directory name)

wp-cli

cli:
  image: webikon/wp-cli
  volumes:
    - './sites/${PROJECT}:/var/www/html'
  links:
    - database:mysql
  depends_on:
    - wordpress
  • Vlastné wp-cli "packages"
  • Ostatné potrebné CLI nástroje
  • Nepotrebujete nič inštalovať lokálne
docker-compose.yml
if [ $# -gt 2 ];then
  export PROJECT="$1"
  if [ "$2" == "wp" ]; then
    shift 1
    docker-compose -p "$PROJECT" run --rm \
        -w /var/www/html \
        cli \
        $@
  fi
fi
./tools/cli

Testovanie

codeception

  • "unit" testy (PHPunit)
  • Akceptačné testy
  • Funkčné testy
test:
  image: codeception/codeception
  volumes:
    - ./sites/${PROJECT}:/src
    - ./sites/${PROJECT}/tests:/project/tests
    - ./sites/${PROJECT}/codeception.yml:/project/codeception.yml
    - ./sites/${PROJECT}/vendor:/project/vendor
docker-compose.yml
#!/usr/bin/env bash

if [ $# -gt 0 ];then
  export PROJECT="$1"
  if [ "$2" == "codecept" ]; then
    shift 2
    docker-compose -p "$PROJECT" run --rm \
      test \
      $@
  fi
fi
./tools/test
./tools/test project-X codecept run acceptance

Selenium

https://github.com/SeleniumHQ/docker-selenium

selenium/standalone-firefox

selenium/standalone-chrome

selenium/hub

 

selenium/standalone-chrome

selenium/standalone-firefox

 

 

chrome:
  image: selenium/standalone-chrome
  ports:
     "4444:4444" 

    
docker-compose.yml
class_name: AcceptanceTester
modules:
    enabled:
        - \Helper\Acceptance
        - WPWebDriver
    config:
        WPWebDriver:
            host: chrome
            url: 'http://wordpress'
            browser: chrome
            port: 4444
            window_size: '1024x768'
            adminUsername: 'admin'
            adminPassword: 'admin'
            adminPath: '/wp-admin'
acceptance.suite.yml

wp-browser

WPBrowser <=> PhpBrowser

https://github.com/lucatume/wp-browser

WPWebDriver <=> WebDriver

WPDb <=> Db

WordPress

Celé jadro bez potreby webserveru.

WPCLI

Prístup k nástroju wp-cli v akceptačných a funkčných testoch.

wpcept

  • wpcept bootstrap [--interactive]
  • wpcept generate:wpunit
  • wpcept generate:wprest
  • wpcept generate:wpajax
  • wpcept generate:wpxmlrpc
  • wpcept generate:wpcanonical
  • wpcept generate:phpunitBootstrap
  • ...

+

Ďalsie nástroje na prácu s databázou:

  • wpcept db:snapshot
  • wpcept search-replace
  • ...

Paralelné testovanie

./tools/test project-X 
    codecept run --html report-web.html web & \
./tools/test project-X 
    codecept run --html report-unit.html unit & \
./tools/test project-X 
    codecept run --html report-functional.html functional

Robo

task runner

http://codeception.com/docs/12-ParallelExecution#Robo

CI

(continuous integration)

jenkins:
  image: jenkins
  ports:
    - "8080:8080"
    - "50000:50000"
docker-compose.yml

Pozitíva

  • Rýchla konfigurácia nových WordPress inštalácií
  • docker-compose súbory sa dajú zdieľať 
  • Nič viac ako Docker nepotrebujete
  • Je to COOL!

negatíva

  • Potreba nainštalovať Docker
  • Bez príkazového riadku sa skoro nepohnete
  • Nutnosť nájsť tie správne image, alebo si vytvoriť vlastné

Populárne images

  • php
  • wordpress
  • mariadb
  • redis
  • memcached
  • jenkins
  • node
  • python
  • ruby
  • java
  • sentry
  • elasticsearch
  • mongo
  • rabbitmq
  • adminer alebo phpmyadmin/phpmyadmin
  • ubuntu
  • debian
  • centos
  • alpine
  • busybox

 

https://hub.docker.com/

FROM wordpress:4.7-apache

RUN curl -O https://url-to-wp-cli/wp-cli.phar \
    && chmod +x wp-cli.phar \
    && mv wp-cli.phar /usr/local/bin/wp

RUN wp core config 
--dbname=wp --dbuser=wp --dbpass=securepswd --locale=sk_SK

RUN wp core install 
--url=example.com --title=Example --admin_user=admin 
--admin_password=admin --admin_email=info@example.com

local.getflywheel.com

kalabox.io

Gitlab

CI a CD

kontena.io

  • Firewall
  • privátna VPN
  • nasadenie v cloude
  • orchestrácia
  • privátny register images
  • používateľské privilégia
  • "stacks"
  • viacero projektov
  • logy a štatistiky
  • CLI a API

meetupy

meetup.com/WordPress-Brno-Meetups

WordPress a Docker

By Ján Bočínec

WordPress a Docker

  • 1,132