Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

demyx Build Status demyx

Demyx is a Docker image that automates and manages WordPress installations. Traefik for reverse proxy with Lets Encrypt SSL/TLS. WordPress sites are powered by OpenLiteSpeed/NGINX-PHP and MariaDB.

Docker Pulls Architecture Alpine Docker Client Buy Me A Coffee Become a Patron!


  • Everything is in containers
  • SSL turned on by default
  • Site-wide or login only basic auth and/or IP whitelisted protection
  • Secure NGINX/PHP configurations
  • Backup/Restore/Clone
  • FastCGI cache with nginx-helper plugin by rtCamp (WooCommerce ready)
  • Auto activate rate requests and limit connections when CPU is high
  • Custom healthchecks
  • Development mode includes the tools code-server (with WPCS and Xdebug), BrowserSync, and demyx_helper plugin
  • Bedrock
  • Browse Demyx file system using code-server (with capabilities of executing demyx commands inside the container and a full fledge terminal using oh-my-zsh)


  • Dedicated/KVM server that can install Docker
  • Port 80 and 443 must be open
  • CentOS/Fedora/RHEL requires selinux-dockersock or similar fix

Tested Distros (x64)

  • Alpine 3.1x
  • Debian 10.x
  • Ubuntu 18.04, 19.10, 20.04
  • CentOS 7.6 (Probably works on Fedora and RHEL)


bash -c "$(curl -sL"

Getting Started

# Create a WordPress site with cache
demyx run domain.tld --cache

# Create a WordPress site powered by Bedrock
demyx run domain.tld --stack=bedrock

Demyx Image

Demyx needs access to the docker.sock as a non-root user, which the helper script will set that up for you. Sudo is installed to only allow the demyx user to execute specific scripts as root. The image has /bin/busybox and other binaries locked down. This prevents the non-privelege user to modify the script and do malicious things.

This is a helper script that gets installed on the host and configuration file is installed at ~/.demyx. It wraps docker exec commands into the demyx container. It also restarts and removes the main demyx containers. See demyx host help for more info.

demyx host help

demyx host <args>          Chroot into the demyx container
           all             Targets both demyx and demyx_socket container, works with remove and restart
           config          Edit Demyx config on the host (~/.demyx)
           help            Demyx helper help menu
           remove|rm       Stops and removes demyx container
           restart|rs      Stops, removes, and starts demyx container
           shell           Run commands into demyx container from the host, leave blank to open a shell
           update          List available updates
           upgrade         Upgrade the demyx stack


demyx <arg>           Main demyx command
      backup          Back up an app
      compose         Accepts all docker-compose arguments
      config          Modifies an app's configuration
      cp              Wrapper for docker cp
      cron            Execute demyx cron
      edit            Opens nano to edit .env files
      exec            Accepts all docker exec arguments
      host            Command only available on the host OS, for more info: demyx host help
      healthcheck     Checks if WordPress apps are up
      info            Shows an app's .env and filter output
      list            List all apps
      log             Show or follow demyx.log
      maldet          Linux Malware Detect
      monitor         For auto scaling purposes
      motd            Message of the day
      pull            Pull one or all demyx images from Docker hub
      refresh         Refresh env and yml files of an app
      restore         Restore an app
      rm              Removes an app and its volumes
      run             Creates a new app
      update          Update demyx code base
      util            Generates credentials or access util container
      wp              Execute wp-cli commands


I have a telemetry setting that is enabled by default. It sends a curl request to server daily at midnight PST. No data is collected except your server's IP address, which is logged to the web server like any other visitor on a browser. I have this enabled so I can track how many active installs there are of Demyx. The curl request uses a token (generated by OpenSSL with a passphrase) to prevent abuse and duplicate entries. What I intend to do with this data is just show a graph of active Demyx installs, just like WordPress plugin stats.

If you are uncomfortable with this, then you can turn off telemetry by running the command below OR keep it turned on to show your support!

# Edit demyx environment variables and set DEMYX_TELEMETRY=false
demyx host edit


  • ctop - htop but for containers!
  • VirtuBox - Borrowed configs for NGINX and PHP
  • EasyEngine - Using their nginx helper plugin

Updates & Support

Code Size Repository Size Watches Stars Forks

  • Auto built weekly on Saturdays (America/Los_Angeles)
  • Rolling release updates
  • For support: #demyx


Demyx is a Docker image that automates and manages WordPress installations. Traefik for reverse proxy with Lets Encrypt SSL/TLS. WordPress sites are powered by OpenLiteSpeed/NGINX-PHP and MariaDB.





No packages published