Docker is probably my favourite technology in terms of server-side setup. It allows a standard installation of Linux with a few package installs to become a hugely powerful server eliminating port conflicts if different sites need to be hosted on the same port. The number of WordPress sites can virtually be limitless depending on the server hardware and load requirements. 

The next learning plan to build on Docker is to start implementing Kubernetes but I’ve not really had a need to do this and the servers I currently manage aren’t all on a stable fast network which would make such things viable. I’ve set it up in the past though and are familiar the differences between Docker swarms and Kubernetes clusters. 

				
					version: '3.1'

networks:
  proxy:
    external: true

services:

  db:
    container_name: ${appname}-db
    image: mariadb:${sql_tag}
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${root_pass}
      MYSQL_DATABASE: ${db_name}
      MYSQL_USER: ${db_name}
      MYSQL_PASSWORD: ${db_pass}
    volumes:
      - ./sql:/var/lib/mysql:rw
    command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci']
#    ports:
#      - 3302:3306
    networks:
      - proxy

  wordpress:
    container_name: ${appname}-wp
    image: wordpress:${wp_tag}
    restart: always
#    ports:
#      - 8080:80
    environment:
      WORDPRESS_DB_HOST: ${appname}-db:3306
      WORDPRESS_DB_USER: ${db_name}
      WORDPRESS_DB_PASSWORD: ${db_pass}
      WORDPRESS_DB_NAME: ${db_name}
    volumes:
      - ./app:/var/www/html
      - ./php.ini:/usr/local/etc/php/conf.d/custom.ini:ro
    networks:
      - proxy
#    links:
#      - db
    depends_on:
      - db

				
			

Git

johan.koke.estate > Git
While I may not use GIT on a daily basis as I’ve never really had any real need to place a whole WordPress site in a git repository, I’m familiar enough with the technology and occasionally use it for personal projects like bash scripts and docker-compose files to make deploying new sites easy and fast.
johan.koke.estate > MySQL
From cleaning up redundant data or migrating websites connected to MySQL databases, I’ve got skills to perform manual backups and migrations without using 3rd party tools like PHPMyAdmin.

VPN

johan.koke.estate > VPN
Virtual Private Networks is an essential tool to keep your work network private and only allow certain users access. It’s also a fantastic tool to lock a firewall by only allowing traffic through a dedicated VPN.
johan.koke.estate > Hypervisors & Virtual Machines
I’m very competent at setting up enterprise servers that run an Hypervisor as their Main operating system. My own server is configured with XCP-ng which is widely used in the industry because of it’s robust performance vs hardware load.
johan.koke.estate > DNS and hosting
I fully understand DNS and hosting and host all my own websites by pointing domains via A or CNAME records to various servers depending on circumstances
johan.koke.estate > Linux
I feel very comfortable configuring a Debian based Linux server and setting up a secure firewall with VPN access to make hacking it virtually impossible

Docker & Docker-compose

Docker is probably my favourite technology in terms of server-side setup. It allows a standard installation of Linux with a few package installs to become a hugely powerful server eliminating port conflicts if different sites need to be hosted on the same port. The number of WordPress sites can virtually be limitless depending on the server hardware and load requirements. 

The next learning plan to build on Docker is to start implementing Kubernetes but I’ve not really had a need to do this and the servers I currently manage aren’t all on a stable fast network which would make such things viable. I’ve set it up in the past though and are familiar the differences between Docker swarms and Kubernetes clusters. 

				
					version: '3.1'
networks:
  proxy:
    external: true
services:
  db:
    container_name: ${appname}-db
    image: mariadb:${sql_tag}
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${root_pass}
      MYSQL_DATABASE: ${db_name}
      MYSQL_USER: ${db_name}
      MYSQL_PASSWORD: ${db_pass}
    volumes:
      - ./sql:/var/lib/mysql:rw
    command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci']
#    ports:
#      - 3302:3306
    networks:
      - proxy
  wordpress:
    container_name: ${appname}-wp
    image: wordpress:${wp_tag}
    restart: always
#    ports:
#      - 8080:80
    environment:
      WORDPRESS_DB_HOST: ${appname}-db:3306
      WORDPRESS_DB_USER: ${db_name}
      WORDPRESS_DB_PASSWORD: ${db_pass}
      WORDPRESS_DB_NAME: ${db_name}
    volumes:
      - ./app:/var/www/html
      - ./php.ini:/usr/local/etc/php/conf.d/custom.ini:ro
    networks:
      - proxy
#    links:
#      - db
    depends_on:
      - db