Repository files navigation

WP Dev

Rapid dev environment using docker for modern WordPress development.

This project is experimental and is currently in "works on my machine" stage. i.e it is only tested in OSX Sierra 10.12.5. Please feel free to try and report any bug found. Pull requests, issues, and project recommendations are more than welcome!

Overview

WP Dev aims to setup dev environment for modern WordPress development using simple yaml configuration inside setups.yml. A basic setup will only have website name, host and database name. The build command will fetch latest WordPress, configure and make it ready for you to work further. If git source is provided, it will clone the project from given repo. The system is also capable of provisioning database, installing plugins and themes using wp-cli during project setup.

# Sample configurationwebsite1:
host: website1.devenv:
DB_NAME: website1_db

What's included?

  1. PHP-fpm 7.0.x
  2. Nginx (stable version)
  3. Supervisor
  4. MySQL 5.7.*
  5. Redis
  6. WP-CLI
  7. Composer
  8. phpMyAdmin & Adminer

Prerequisites

  1. Install docker: https://docs.docker.com/engine/installation/

  2. Make sure that you have docker-compose installed

    $ docker-compose --version
    docker-compose version: 1.11.2

    If not, install docker-compose: https://docs.docker.com/v1.11/compose/install/

  3. Install shyaml: https://github.com/0k/shyaml#installation

  4. Install git if you haven't already: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git

Application level environments

Application level environment variables are located inside app_env. Following values are configurable.

# WP Devexport APP_NAME="wpdev"export APP_PORT="80"export NETWORK_NAME="wpdev_network"export LOG_FILE="${PWD}/logs/${APP_NAME}.logs"# Default WordPress Settingsexport WP_DEFAULT_TITLE="WordPress"# Site titleexport WP_ADMIN_USER="admin"export WP_ADMIN_PASSWORD="admin"export WP_ADMIN_EMAIL="admin@local.dev"# MySQL Databaseexport MYSQL_PORT="3306"export MYSQL_ROOT_PASSWORD="wpdev"export DB_HOST="172.19.0.25"export DB_USER="wpdev"export DB_PASSWORD="wpdev"export MYSQL_CLIENT_PORT="8080"# Redisexport REDIS_PORT="6379"# phpmyadmin or adminerexport MYSQL_CLIENT="phpmyadmin"

Configure websites

Copy or rename setups.template.yml to setups.yml to get started with the website setup. Website name, host and DB_NAME inside env are the only values required. Website name can only be alphanumeric and can contain hyphen/dash (-).

# Basic setupwebsite1:
host: website1.devenv:
DB_NAME: website1_db# Complete entry with source as a git repowebsite2:
host: website2.devsource: git@git.org:user/project.gittitle: "Website 2 with all settings"admin_user: "admin"admin_password: "admin"admin_email: "admin@website1.com"plugins:
- "plugin-slug-1 --activate"
- "plugin-slug-2"themes:
- "theme-slug-1 --activate"
- "theme-slug-2"env:
DB_NAME: website2_db# WordPress 4.3website3:
host: website3.devversion: 4.3env:
DB_NAME: website3_db

Available options

OptionDescriptionDefault
hostHost name. This entry should also be made inside /etc/hosts
sourceGit source for the project to clone from
versionWordPress versionlatest
titleWordPress site titledefaults from app_env
admin_userWordPress admin userdefaults from app_env
admin_passwordWordPress admin passworddefaults from app_env
admin_emailWordPress admin emaildefaults from app_env
pluginsList of plugins to install during setup. You can provide all parameters that wp-cli accepts, eg: --activate or --debug
themesList of themes to install during setup. You can provide all parameters that wp-cli accepts, eg: --activate or --debug
envEnvironment variables like DB_NAME. DB_NAME is required.

Build

You only need to run build script if you have made any changes in setups.yml file.

$ ./wpdev build

To build core images only, use

$ ./wpdev build core
# To skip cache, use --no-cache option
$ ./wpdev build core --no-cache

To build projects only, use

$ ./wpdev build projects "<list of website name from setups.yml>"

You can access help file using ./wpdev build -h

Run project containers

You can skip this step if you just build the projects using above step. The projects should already be up and running. From next time, you can just boot the containers using following command as the related project containers are already built.

$ ./wpdev up

Update /etc/hosts

Update /etc/hosts by adding all hosts listed in setups.yml

0.0.0.0 your-project.host

If you followed above steps correctly then, at this point, you should be able access project in your browser. Project files are located inside projects folder.

Accessing database configs

Database configs are stored in environment variables. In order to use it in say your project, use getenv.

/** The name of the database for WordPress */
define('DB_NAME', getenv('DB_NAME'));
/** MySQL database username */
define('DB_USER', getenv('DB_USER'));
/** MySQL database password */
define('DB_PASSWORD', getenv('DB_PASSWORD'));
/** MySQL hostname */
define('DB_HOST', getenv('DB_HOST'));

Shutdown project containers

You can shutdown running containers using following script.

$ ./wpdev down

Clean or destroy

You can delete all related containers using destroy script.

$ ./wpdev destroy

Rebuild

Rebuild will first delete all related containers and builds it again. It is same as running ./wpdev destroy && ./wpdev build.

$ ./wpdev rebuild -h
usage: rebuild
--no-cache Skip cache
-h | --help Display this help text

Override project configuration

To override configurations for a project, copy core/configs/default folder and name it to your website name you are using in setups.yml. You can now change required configurations for the project. The system will first check if the configuration for the website is available and builds it, if not, it will use default configuration.

Volumes

All volumes are mounted inside .data folder except the logs. Logs are mounted inside logs folder.

  • Composer: .data/composer
  • MySQL: .data/mysql
  • Redis: .data/redis
  • WP-CLI: .data/wp-cli

Database provisioning and backup

If you want to import database for a project during setup, just add a sql file with same name as your database name and the system will automatically import it during the build process. So for the basic setup above in Configure websites section, you need to add a file called website1_db inside database folder.

Backup all databases

To backup all databases, use

$ ./wpdev db backup_all

By default it will save backup to the database folder. You can provide custom path using -p option.

$ ./wpdev db backup_all -p /path/to/downloads/bkp.sql

Backup specific databases

To only backup some databases, use

$ ./wpdev db backup -d "db1 db2"

Same as above it will save backup to the database folder. You can provide custom path using -p option.

$ ./wpdev db backup -d "db1 db2" -p /path/to/downloads/bkp.sql

MySQL Client

You can choose between phpmyadmin or adminer as your mysql client. By default the client runs on port 8080. These values are configurable in app_env. So with default configuration, you can access the client by visiting http://localhost:8080. You can use the values DB_USER and DB_PASSWORD from app_env to login.

By default, mysql runs on ip 192.168.10.25 as listed in app_env. So if you are using adminer as a client you should use that ip as a host. To connect database using third party client like sequel pro, use 0.0.0.0 as a host.

Todo

  • Add PHP_CodeSniffer for WordPress.
  • Ability to sync/update plugins, themes, core etc for a project.
  • Ability to create new project from existing one (variation).

About

Rapid dev environment using docker for modern WordPress development.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

WP Dev

Rapid dev environment using docker for modern WordPress development.

This project is experimental and is currently in "works on my machine" stage. i.e it is only tested in OSX Sierra 10.12.5. Please feel free to try and report any bug found. Pull requests, issues, and project recommendations are more than welcome!

Overview

WP Dev aims to setup dev environment for modern WordPress development using simple yaml configuration inside setups.yml. A basic setup will only have website name, host and database name. The build command will fetch latest WordPress, configure and make it ready for you to work further. If git source is provided, it will clone the project from given repo. The system is also capable of provisioning database, installing plugins and themes using wp-cli during project setup.

# Sample configurationwebsite1:
host: website1.devenv:
DB_NAME: website1_db

What's included?

  1. PHP-fpm 7.0.x
  2. Nginx (stable version)
  3. Supervisor
  4. MySQL 5.7.*
  5. Redis
  6. WP-CLI
  7. Composer
  8. phpMyAdmin & Adminer

Prerequisites

  1. Install docker: https://docs.docker.com/engine/installation/

  2. Make sure that you have docker-compose installed

    $ docker-compose --version
    docker-compose version: 1.11.2

    If not, install docker-compose: https://docs.docker.com/v1.11/compose/install/

  3. Install shyaml: https://github.com/0k/shyaml#installation

  4. Install git if you haven't already: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git

Application level environments

Application level environment variables are located inside app_env. Following values are configurable.

# WP Devexport APP_NAME="wpdev"export APP_PORT="80"export NETWORK_NAME="wpdev_network"export LOG_FILE="${PWD}/logs/${APP_NAME}.logs"# Default WordPress Settingsexport WP_DEFAULT_TITLE="WordPress"# Site titleexport WP_ADMIN_USER="admin"export WP_ADMIN_PASSWORD="admin"export WP_ADMIN_EMAIL="admin@local.dev"# MySQL Databaseexport MYSQL_PORT="3306"export MYSQL_ROOT_PASSWORD="wpdev"export DB_HOST="172.19.0.25"export DB_USER="wpdev"export DB_PASSWORD="wpdev"export MYSQL_CLIENT_PORT="8080"# Redisexport REDIS_PORT="6379"# phpmyadmin or adminerexport MYSQL_CLIENT="phpmyadmin"

Configure websites

Copy or rename setups.template.yml to setups.yml to get started with the website setup. Website name, host and DB_NAME inside env are the only values required. Website name can only be alphanumeric and can contain hyphen/dash (-).

# Basic setupwebsite1:
host: website1.devenv:
DB_NAME: website1_db# Complete entry with source as a git repowebsite2:
host: website2.devsource: git@git.org:user/project.gittitle: "Website 2 with all settings"admin_user: "admin"admin_password: "admin"admin_email: "admin@website1.com"plugins:
- "plugin-slug-1 --activate"
- "plugin-slug-2"themes:
- "theme-slug-1 --activate"
- "theme-slug-2"env:
DB_NAME: website2_db# WordPress 4.3website3:
host: website3.devversion: 4.3env:
DB_NAME: website3_db

Available options

OptionDescriptionDefault
hostHost name. This entry should also be made inside /etc/hosts
sourceGit source for the project to clone from
versionWordPress versionlatest
titleWordPress site titledefaults from app_env
admin_userWordPress admin userdefaults from app_env
admin_passwordWordPress admin passworddefaults from app_env
admin_emailWordPress admin emaildefaults from app_env
pluginsList of plugins to install during setup. You can provide all parameters that wp-cli accepts, eg: --activate or --debug
themesList of themes to install during setup. You can provide all parameters that wp-cli accepts, eg: --activate or --debug
envEnvironment variables like DB_NAME. DB_NAME is required.

Build

You only need to run build script if you have made any changes in setups.yml file.

$ ./wpdev build

To build core images only, use

$ ./wpdev build core
# To skip cache, use --no-cache option
$ ./wpdev build core --no-cache

To build projects only, use

$ ./wpdev build projects "<list of website name from setups.yml>"

You can access help file using ./wpdev build -h

Run project containers

You can skip this step if you just build the projects using above step. The projects should already be up and running. From next time, you can just boot the containers using following command as the related project containers are already built.

$ ./wpdev up

Update /etc/hosts

Update /etc/hosts by adding all hosts listed in setups.yml

0.0.0.0 your-project.host

If you followed above steps correctly then, at this point, you should be able access project in your browser. Project files are located inside projects folder.

Accessing database configs

Database configs are stored in environment variables. In order to use it in say your project, use getenv.

/** The name of the database for WordPress */
define('DB_NAME', getenv('DB_NAME'));
/** MySQL database username */
define('DB_USER', getenv('DB_USER'));
/** MySQL database password */
define('DB_PASSWORD', getenv('DB_PASSWORD'));
/** MySQL hostname */
define('DB_HOST', getenv('DB_HOST'));

Shutdown project containers

You can shutdown running containers using following script.

$ ./wpdev down

Clean or destroy

You can delete all related containers using destroy script.

$ ./wpdev destroy

Rebuild

Rebuild will first delete all related containers and builds it again. It is same as running ./wpdev destroy && ./wpdev build.

$ ./wpdev rebuild -h
usage: rebuild
--no-cache Skip cache
-h | --help Display this help text

Override project configuration

To override configurations for a project, copy core/configs/default folder and name it to your website name you are using in setups.yml. You can now change required configurations for the project. The system will first check if the configuration for the website is available and builds it, if not, it will use default configuration.

Volumes

All volumes are mounted inside .data folder except the logs. Logs are mounted inside logs folder.

  • Composer: .data/composer
  • MySQL: .data/mysql
  • Redis: .data/redis
  • WP-CLI: .data/wp-cli

Database provisioning and backup

If you want to import database for a project during setup, just add a sql file with same name as your database name and the system will automatically import it during the build process. So for the basic setup above in Configure websites section, you need to add a file called website1_db inside database folder.

Backup all databases

To backup all databases, use

$ ./wpdev db backup_all

By default it will save backup to the database folder. You can provide custom path using -p option.

$ ./wpdev db backup_all -p /path/to/downloads/bkp.sql

Backup specific databases

To only backup some databases, use

$ ./wpdev db backup -d "db1 db2"

Same as above it will save backup to the database folder. You can provide custom path using -p option.

$ ./wpdev db backup -d "db1 db2" -p /path/to/downloads/bkp.sql

MySQL Client

You can choose between phpmyadmin or adminer as your mysql client. By default the client runs on port 8080. These values are configurable in app_env. So with default configuration, you can access the client by visiting http://localhost:8080. You can use the values DB_USER and DB_PASSWORD from app_env to login.

By default, mysql runs on ip 192.168.10.25 as listed in app_env. So if you are using adminer as a client you should use that ip as a host. To connect database using third party client like sequel pro, use 0.0.0.0 as a host.

Todo

  • Add PHP_CodeSniffer for WordPress.
  • Ability to sync/update plugins, themes, core etc for a project.
  • Ability to create new project from existing one (variation).

About

Rapid dev environment using docker for modern WordPress development.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

WP Dev

Rapid dev environment using docker for modern WordPress development.

This project is experimental and is currently in "works on my machine" stage. i.e it is only tested in OSX Sierra 10.12.5. Please feel free to try and report any bug found. Pull requests, issues, and project recommendations are more than welcome!

Overview

WP Dev aims to setup dev environment for modern WordPress development using simple yaml configuration inside setups.yml. A basic setup will only have website name, host and database name. The build command will fetch latest WordPress, configure and make it ready for you to work further. If git source is provided, it will clone the project from given repo. The system is also capable of provisioning database, installing plugins and themes using wp-cli during project setup.

# Sample configurationwebsite1:
host: website1.devenv:
DB_NAME: website1_db

What's included?

  1. PHP-fpm 7.0.x
  2. Nginx (stable version)
  3. Supervisor
  4. MySQL 5.7.*
  5. Redis
  6. WP-CLI
  7. Composer
  8. phpMyAdmin & Adminer

Prerequisites

  1. Install docker: https://docs.docker.com/engine/installation/

  2. Make sure that you have docker-compose installed

    $ docker-compose --version
    docker-compose version: 1.11.2

    If not, install docker-compose: https://docs.docker.com/v1.11/compose/install/

  3. Install shyaml: https://github.com/0k/shyaml#installation

  4. Install git if you haven't already: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git

Application level environments

Application level environment variables are located inside app_env. Following values are configurable.

# WP Devexport APP_NAME="wpdev"export APP_PORT="80"export NETWORK_NAME="wpdev_network"export LOG_FILE="${PWD}/logs/${APP_NAME}.logs"# Default WordPress Settingsexport WP_DEFAULT_TITLE="WordPress"# Site titleexport WP_ADMIN_USER="admin"export WP_ADMIN_PASSWORD="admin"export WP_ADMIN_EMAIL="admin@local.dev"# MySQL Databaseexport MYSQL_PORT="3306"export MYSQL_ROOT_PASSWORD="wpdev"export DB_HOST="172.19.0.25"export DB_USER="wpdev"export DB_PASSWORD="wpdev"export MYSQL_CLIENT_PORT="8080"# Redisexport REDIS_PORT="6379"# phpmyadmin or adminerexport MYSQL_CLIENT="phpmyadmin"

Configure websites

Copy or rename setups.template.yml to setups.yml to get started with the website setup. Website name, host and DB_NAME inside env are the only values required. Website name can only be alphanumeric and can contain hyphen/dash (-).

# Basic setupwebsite1:
host: website1.devenv:
DB_NAME: website1_db# Complete entry with source as a git repowebsite2:
host: website2.devsource: git@git.org:user/project.gittitle: "Website 2 with all settings"admin_user: "admin"admin_password: "admin"admin_email: "admin@website1.com"plugins:
- "plugin-slug-1 --activate"
- "plugin-slug-2"themes:
- "theme-slug-1 --activate"
- "theme-slug-2"env:
DB_NAME: website2_db# WordPress 4.3website3:
host: website3.devversion: 4.3env:
DB_NAME: website3_db

Available options

OptionDescriptionDefault
hostHost name. This entry should also be made inside /etc/hosts
sourceGit source for the project to clone from
versionWordPress versionlatest
titleWordPress site titledefaults from app_env
admin_userWordPress admin userdefaults from app_env
admin_passwordWordPress admin passworddefaults from app_env
admin_emailWordPress admin emaildefaults from app_env
pluginsList of plugins to install during setup. You can provide all parameters that wp-cli accepts, eg: --activate or --debug
themesList of themes to install during setup. You can provide all parameters that wp-cli accepts, eg: --activate or --debug
envEnvironment variables like DB_NAME. DB_NAME is required.

Build

You only need to run build script if you have made any changes in setups.yml file.

$ ./wpdev build

To build core images only, use

$ ./wpdev build core
# To skip cache, use --no-cache option
$ ./wpdev build core --no-cache

To build projects only, use

$ ./wpdev build projects "<list of website name from setups.yml>"

You can access help file using ./wpdev build -h

Run project containers

You can skip this step if you just build the projects using above step. The projects should already be up and running. From next time, you can just boot the containers using following command as the related project containers are already built.

$ ./wpdev up

Update /etc/hosts

Update /etc/hosts by adding all hosts listed in setups.yml

0.0.0.0 your-project.host

If you followed above steps correctly then, at this point, you should be able access project in your browser. Project files are located inside projects folder.

Accessing database configs

Database configs are stored in environment variables. In order to use it in say your project, use getenv.

/** The name of the database for WordPress */
define('DB_NAME', getenv('DB_NAME'));
/** MySQL database username */
define('DB_USER', getenv('DB_USER'));
/** MySQL database password */
define('DB_PASSWORD', getenv('DB_PASSWORD'));
/** MySQL hostname */
define('DB_HOST', getenv('DB_HOST'));

Shutdown project containers

You can shutdown running containers using following script.

$ ./wpdev down

Clean or destroy

You can delete all related containers using destroy script.

$ ./wpdev destroy

Rebuild

Rebuild will first delete all related containers and builds it again. It is same as running ./wpdev destroy && ./wpdev build.

$ ./wpdev rebuild -h
usage: rebuild
--no-cache Skip cache
-h | --help Display this help text

Override project configuration

To override configurations for a project, copy core/configs/default folder and name it to your website name you are using in setups.yml. You can now change required configurations for the project. The system will first check if the configuration for the website is available and builds it, if not, it will use default configuration.

Volumes

All volumes are mounted inside .data folder except the logs. Logs are mounted inside logs folder.

  • Composer: .data/composer
  • MySQL: .data/mysql
  • Redis: .data/redis
  • WP-CLI: .data/wp-cli

Database provisioning and backup

If you want to import database for a project during setup, just add a sql file with same name as your database name and the system will automatically import it during the build process. So for the basic setup above in Configure websites section, you need to add a file called website1_db inside database folder.

Backup all databases

To backup all databases, use

$ ./wpdev db backup_all

By default it will save backup to the database folder. You can provide custom path using -p option.

$ ./wpdev db backup_all -p /path/to/downloads/bkp.sql

Backup specific databases

To only backup some databases, use

$ ./wpdev db backup -d "db1 db2"

Same as above it will save backup to the database folder. You can provide custom path using -p option.

$ ./wpdev db backup -d "db1 db2" -p /path/to/downloads/bkp.sql

MySQL Client

You can choose between phpmyadmin or adminer as your mysql client. By default the client runs on port 8080. These values are configurable in app_env. So with default configuration, you can access the client by visiting http://localhost:8080. You can use the values DB_USER and DB_PASSWORD from app_env to login.

By default, mysql runs on ip 192.168.10.25 as listed in app_env. So if you are using adminer as a client you should use that ip as a host. To connect database using third party client like sequel pro, use 0.0.0.0 as a host.

Todo

  • Add PHP_CodeSniffer for WordPress.
  • Ability to sync/update plugins, themes, core etc for a project.
  • Ability to create new project from existing one (variation).

About

Rapid dev environment using docker for modern WordPress development.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

WP Dev

Rapid dev environment using docker for modern WordPress development.

This project is experimental and is currently in "works on my machine" stage. i.e it is only tested in OSX Sierra 10.12.5. Please feel free to try and report any bug found. Pull requests, issues, and project recommendations are more than welcome!

Overview

WP Dev aims to setup dev environment for modern WordPress development using simple yaml configuration inside setups.yml. A basic setup will only have website name, host and database name. The build command will fetch latest WordPress, configure and make it ready for you to work further. If git source is provided, it will clone the project from given repo. The system is also capable of provisioning database, installing plugins and themes using wp-cli during project setup.

# Sample configurationwebsite1:
host: website1.devenv:
DB_NAME: website1_db

What's included?

  1. PHP-fpm 7.0.x
  2. Nginx (stable version)
  3. Supervisor
  4. MySQL 5.7.*
  5. Redis
  6. WP-CLI
  7. Composer
  8. phpMyAdmin & Adminer

Prerequisites

  1. Install docker: https://docs.docker.com/engine/installation/

  2. Make sure that you have docker-compose installed

    $ docker-compose --version
    docker-compose version: 1.11.2

    If not, install docker-compose: https://docs.docker.com/v1.11/compose/install/

  3. Install shyaml: https://github.com/0k/shyaml#installation

  4. Install git if you haven't already: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git

Application level environments

Application level environment variables are located inside app_env. Following values are configurable.

# WP Devexport APP_NAME="wpdev"export APP_PORT="80"export NETWORK_NAME="wpdev_network"export LOG_FILE="${PWD}/logs/${APP_NAME}.logs"# Default WordPress Settingsexport WP_DEFAULT_TITLE="WordPress"# Site titleexport WP_ADMIN_USER="admin"export WP_ADMIN_PASSWORD="admin"export WP_ADMIN_EMAIL="admin@local.dev"# MySQL Databaseexport MYSQL_PORT="3306"export MYSQL_ROOT_PASSWORD="wpdev"export DB_HOST="172.19.0.25"export DB_USER="wpdev"export DB_PASSWORD="wpdev"export MYSQL_CLIENT_PORT="8080"# Redisexport REDIS_PORT="6379"# phpmyadmin or adminerexport MYSQL_CLIENT="phpmyadmin"

Configure websites

Copy or rename setups.template.yml to setups.yml to get started with the website setup. Website name, host and DB_NAME inside env are the only values required. Website name can only be alphanumeric and can contain hyphen/dash (-).

# Basic setupwebsite1:
host: website1.devenv:
DB_NAME: website1_db# Complete entry with source as a git repowebsite2:
host: website2.devsource: git@git.org:user/project.gittitle: "Website 2 with all settings"admin_user: "admin"admin_password: "admin"admin_email: "admin@website1.com"plugins:
- "plugin-slug-1 --activate"
- "plugin-slug-2"themes:
- "theme-slug-1 --activate"
- "theme-slug-2"env:
DB_NAME: website2_db# WordPress 4.3website3:
host: website3.devversion: 4.3env:
DB_NAME: website3_db

Available options

OptionDescriptionDefault
hostHost name. This entry should also be made inside /etc/hosts
sourceGit source for the project to clone from
versionWordPress versionlatest
titleWordPress site titledefaults from app_env
admin_userWordPress admin userdefaults from app_env
admin_passwordWordPress admin passworddefaults from app_env
admin_emailWordPress admin emaildefaults from app_env
pluginsList of plugins to install during setup. You can provide all parameters that wp-cli accepts, eg: --activate or --debug
themesList of themes to install during setup. You can provide all parameters that wp-cli accepts, eg: --activate or --debug
envEnvironment variables like DB_NAME. DB_NAME is required.

Build

You only need to run build script if you have made any changes in setups.yml file.

$ ./wpdev build

To build core images only, use

$ ./wpdev build core
# To skip cache, use --no-cache option
$ ./wpdev build core --no-cache

To build projects only, use

$ ./wpdev build projects "<list of website name from setups.yml>"

You can access help file using ./wpdev build -h

Run project containers

You can skip this step if you just build the projects using above step. The projects should already be up and running. From next time, you can just boot the containers using following command as the related project containers are already built.

$ ./wpdev up

Update /etc/hosts

Update /etc/hosts by adding all hosts listed in setups.yml

0.0.0.0 your-project.host

If you followed above steps correctly then, at this point, you should be able access project in your browser. Project files are located inside projects folder.

Accessing database configs

Database configs are stored in environment variables. In order to use it in say your project, use getenv.

/** The name of the database for WordPress */
define('DB_NAME', getenv('DB_NAME'));
/** MySQL database username */
define('DB_USER', getenv('DB_USER'));
/** MySQL database password */
define('DB_PASSWORD', getenv('DB_PASSWORD'));
/** MySQL hostname */
define('DB_HOST', getenv('DB_HOST'));

Shutdown project containers

You can shutdown running containers using following script.

$ ./wpdev down

Clean or destroy

You can delete all related containers using destroy script.

$ ./wpdev destroy

Rebuild

Rebuild will first delete all related containers and builds it again. It is same as running ./wpdev destroy && ./wpdev build.

$ ./wpdev rebuild -h
usage: rebuild
--no-cache Skip cache
-h | --help Display this help text

Override project configuration

To override configurations for a project, copy core/configs/default folder and name it to your website name you are using in setups.yml. You can now change required configurations for the project. The system will first check if the configuration for the website is available and builds it, if not, it will use default configuration.

Volumes

All volumes are mounted inside .data folder except the logs. Logs are mounted inside logs folder.

  • Composer: .data/composer
  • MySQL: .data/mysql
  • Redis: .data/redis
  • WP-CLI: .data/wp-cli

Database provisioning and backup

If you want to import database for a project during setup, just add a sql file with same name as your database name and the system will automatically import it during the build process. So for the basic setup above in Configure websites section, you need to add a file called website1_db inside database folder.

Backup all databases

To backup all databases, use

$ ./wpdev db backup_all

By default it will save backup to the database folder. You can provide custom path using -p option.

$ ./wpdev db backup_all -p /path/to/downloads/bkp.sql

Backup specific databases

To only backup some databases, use

$ ./wpdev db backup -d "db1 db2"

Same as above it will save backup to the database folder. You can provide custom path using -p option.

$ ./wpdev db backup -d "db1 db2" -p /path/to/downloads/bkp.sql

MySQL Client

You can choose between phpmyadmin or adminer as your mysql client. By default the client runs on port 8080. These values are configurable in app_env. So with default configuration, you can access the client by visiting http://localhost:8080. You can use the values DB_USER and DB_PASSWORD from app_env to login.

By default, mysql runs on ip 192.168.10.25 as listed in app_env. So if you are using adminer as a client you should use that ip as a host. To connect database using third party client like sequel pro, use 0.0.0.0 as a host.

Todo

  • Add PHP_CodeSniffer for WordPress.
  • Ability to sync/update plugins, themes, core etc for a project.
  • Ability to create new project from existing one (variation).

About

Rapid dev environment using docker for modern WordPress development.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

WP Dev

Rapid dev environment using docker for modern WordPress development.

This project is experimental and is currently in "works on my machine" stage. i.e it is only tested in OSX Sierra 10.12.5. Please feel free to try and report any bug found. Pull requests, issues, and project recommendations are more than welcome!

Overview

WP Dev aims to setup dev environment for modern WordPress development using simple yaml configuration inside setups.yml. A basic setup will only have website name, host and database name. The build command will fetch latest WordPress, configure and make it ready for you to work further. If git source is provided, it will clone the project from given repo. The system is also capable of provisioning database, installing plugins and themes using wp-cli during project setup.

# Sample configurationwebsite1:
host: website1.devenv:
DB_NAME: website1_db

What's included?

  1. PHP-fpm 7.0.x
  2. Nginx (stable version)
  3. Supervisor
  4. MySQL 5.7.*
  5. Redis
  6. WP-CLI
  7. Composer
  8. phpMyAdmin & Adminer

Prerequisites

  1. Install docker: https://docs.docker.com/engine/installation/

  2. Make sure that you have docker-compose installed

    $ docker-compose --version
    docker-compose version: 1.11.2

    If not, install docker-compose: https://docs.docker.com/v1.11/compose/install/

  3. Install shyaml: https://github.com/0k/shyaml#installation

  4. Install git if you haven't already: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git

Application level environments

Application level environment variables are located inside app_env. Following values are configurable.

# WP Devexport APP_NAME="wpdev"export APP_PORT="80"export NETWORK_NAME="wpdev_network"export LOG_FILE="${PWD}/logs/${APP_NAME}.logs"# Default WordPress Settingsexport WP_DEFAULT_TITLE="WordPress"# Site titleexport WP_ADMIN_USER="admin"export WP_ADMIN_PASSWORD="admin"export WP_ADMIN_EMAIL="admin@local.dev"# MySQL Databaseexport MYSQL_PORT="3306"export MYSQL_ROOT_PASSWORD="wpdev"export DB_HOST="172.19.0.25"export DB_USER="wpdev"export DB_PASSWORD="wpdev"export MYSQL_CLIENT_PORT="8080"# Redisexport REDIS_PORT="6379"# phpmyadmin or adminerexport MYSQL_CLIENT="phpmyadmin"

Configure websites

Copy or rename setups.template.yml to setups.yml to get started with the website setup. Website name, host and DB_NAME inside env are the only values required. Website name can only be alphanumeric and can contain hyphen/dash (-).

# Basic setupwebsite1:
host: website1.devenv:
DB_NAME: website1_db# Complete entry with source as a git repowebsite2:
host: website2.devsource: git@git.org:user/project.gittitle: "Website 2 with all settings"admin_user: "admin"admin_password: "admin"admin_email: "admin@website1.com"plugins:
- "plugin-slug-1 --activate"
- "plugin-slug-2"themes:
- "theme-slug-1 --activate"
- "theme-slug-2"env:
DB_NAME: website2_db# WordPress 4.3website3:
host: website3.devversion: 4.3env:
DB_NAME: website3_db

Available options

OptionDescriptionDefault
hostHost name. This entry should also be made inside /etc/hosts
sourceGit source for the project to clone from
versionWordPress versionlatest
titleWordPress site titledefaults from app_env
admin_userWordPress admin userdefaults from app_env
admin_passwordWordPress admin passworddefaults from app_env
admin_emailWordPress admin emaildefaults from app_env
pluginsList of plugins to install during setup. You can provide all parameters that wp-cli accepts, eg: --activate or --debug
themesList of themes to install during setup. You can provide all parameters that wp-cli accepts, eg: --activate or --debug
envEnvironment variables like DB_NAME. DB_NAME is required.

Build

You only need to run build script if you have made any changes in setups.yml file.

$ ./wpdev build

To build core images only, use

$ ./wpdev build core
# To skip cache, use --no-cache option
$ ./wpdev build core --no-cache

To build projects only, use

$ ./wpdev build projects "<list of website name from setups.yml>"

You can access help file using ./wpdev build -h

Run project containers

You can skip this step if you just build the projects using above step. The projects should already be up and running. From next time, you can just boot the containers using following command as the related project containers are already built.

$ ./wpdev up

Update /etc/hosts

Update /etc/hosts by adding all hosts listed in setups.yml

0.0.0.0 your-project.host

If you followed above steps correctly then, at this point, you should be able access project in your browser. Project files are located inside projects folder.

Accessing database configs

Database configs are stored in environment variables. In order to use it in say your project, use getenv.

/** The name of the database for WordPress */
define('DB_NAME', getenv('DB_NAME'));
/** MySQL database username */
define('DB_USER', getenv('DB_USER'));
/** MySQL database password */
define('DB_PASSWORD', getenv('DB_PASSWORD'));
/** MySQL hostname */
define('DB_HOST', getenv('DB_HOST'));

Shutdown project containers

You can shutdown running containers using following script.

$ ./wpdev down

Clean or destroy

You can delete all related containers using destroy script.

$ ./wpdev destroy

Rebuild

Rebuild will first delete all related containers and builds it again. It is same as running ./wpdev destroy && ./wpdev build.

$ ./wpdev rebuild -h
usage: rebuild
--no-cache Skip cache
-h | --help Display this help text

Override project configuration

To override configurations for a project, copy core/configs/default folder and name it to your website name you are using in setups.yml. You can now change required configurations for the project. The system will first check if the configuration for the website is available and builds it, if not, it will use default configuration.

Volumes

All volumes are mounted inside .data folder except the logs. Logs are mounted inside logs folder.

  • Composer: .data/composer
  • MySQL: .data/mysql
  • Redis: .data/redis
  • WP-CLI: .data/wp-cli

Database provisioning and backup

If you want to import database for a project during setup, just add a sql file with same name as your database name and the system will automatically import it during the build process. So for the basic setup above in Configure websites section, you need to add a file called website1_db inside database folder.

Backup all databases

To backup all databases, use

$ ./wpdev db backup_all

By default it will save backup to the database folder. You can provide custom path using -p option.

$ ./wpdev db backup_all -p /path/to/downloads/bkp.sql

Backup specific databases

To only backup some databases, use

$ ./wpdev db backup -d "db1 db2"

Same as above it will save backup to the database folder. You can provide custom path using -p option.

$ ./wpdev db backup -d "db1 db2" -p /path/to/downloads/bkp.sql

MySQL Client

You can choose between phpmyadmin or adminer as your mysql client. By default the client runs on port 8080. These values are configurable in app_env. So with default configuration, you can access the client by visiting http://localhost:8080. You can use the values DB_USER and DB_PASSWORD from app_env to login.

By default, mysql runs on ip 192.168.10.25 as listed in app_env. So if you are using adminer as a client you should use that ip as a host. To connect database using third party client like sequel pro, use 0.0.0.0 as a host.

Todo

  • Add PHP_CodeSniffer for WordPress.
  • Ability to sync/update plugins, themes, core etc for a project.
  • Ability to create new project from existing one (variation).

About

Rapid dev environment using docker for modern WordPress development.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

WP Dev

Rapid dev environment using docker for modern WordPress development.

This project is experimental and is currently in "works on my machine" stage. i.e it is only tested in OSX Sierra 10.12.5. Please feel free to try and report any bug found. Pull requests, issues, and project recommendations are more than welcome!

Overview

WP Dev aims to setup dev environment for modern WordPress development using simple yaml configuration inside setups.yml. A basic setup will only have website name, host and database name. The build command will fetch latest WordPress, configure and make it ready for you to work further. If git source is provided, it will clone the project from given repo. The system is also capable of provisioning database, installing plugins and themes using wp-cli during project setup.

# Sample configurationwebsite1:
host: website1.devenv:
DB_NAME: website1_db

What's included?

  1. PHP-fpm 7.0.x
  2. Nginx (stable version)
  3. Supervisor
  4. MySQL 5.7.*
  5. Redis
  6. WP-CLI
  7. Composer
  8. phpMyAdmin & Adminer

Prerequisites

  1. Install docker: https://docs.docker.com/engine/installation/

  2. Make sure that you have docker-compose installed

    $ docker-compose --version
    docker-compose version: 1.11.2

    If not, install docker-compose: https://docs.docker.com/v1.11/compose/install/

  3. Install shyaml: https://github.com/0k/shyaml#installation

  4. Install git if you haven't already: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git

Application level environments

Application level environment variables are located inside app_env. Following values are configurable.

# WP Devexport APP_NAME="wpdev"export APP_PORT="80"export NETWORK_NAME="wpdev_network"export LOG_FILE="${PWD}/logs/${APP_NAME}.logs"# Default WordPress Settingsexport WP_DEFAULT_TITLE="WordPress"# Site titleexport WP_ADMIN_USER="admin"export WP_ADMIN_PASSWORD="admin"export WP_ADMIN_EMAIL="admin@local.dev"# MySQL Databaseexport MYSQL_PORT="3306"export MYSQL_ROOT_PASSWORD="wpdev"export DB_HOST="172.19.0.25"export DB_USER="wpdev"export DB_PASSWORD="wpdev"export MYSQL_CLIENT_PORT="8080"# Redisexport REDIS_PORT="6379"# phpmyadmin or adminerexport MYSQL_CLIENT="phpmyadmin"

Configure websites

Copy or rename setups.template.yml to setups.yml to get started with the website setup. Website name, host and DB_NAME inside env are the only values required. Website name can only be alphanumeric and can contain hyphen/dash (-).

# Basic setupwebsite1:
host: website1.devenv:
DB_NAME: website1_db# Complete entry with source as a git repowebsite2:
host: website2.devsource: git@git.org:user/project.gittitle: "Website 2 with all settings"admin_user: "admin"admin_password: "admin"admin_email: "admin@website1.com"plugins:
- "plugin-slug-1 --activate"
- "plugin-slug-2"themes:
- "theme-slug-1 --activate"
- "theme-slug-2"env:
DB_NAME: website2_db# WordPress 4.3website3:
host: website3.devversion: 4.3env:
DB_NAME: website3_db

Available options

OptionDescriptionDefault
hostHost name. This entry should also be made inside /etc/hosts
sourceGit source for the project to clone from
versionWordPress versionlatest
titleWordPress site titledefaults from app_env
admin_userWordPress admin userdefaults from app_env
admin_passwordWordPress admin passworddefaults from app_env
admin_emailWordPress admin emaildefaults from app_env
pluginsList of plugins to install during setup. You can provide all parameters that wp-cli accepts, eg: --activate or --debug
themesList of themes to install during setup. You can provide all parameters that wp-cli accepts, eg: --activate or --debug
envEnvironment variables like DB_NAME. DB_NAME is required.

Build

You only need to run build script if you have made any changes in setups.yml file.

$ ./wpdev build

To build core images only, use

$ ./wpdev build core
# To skip cache, use --no-cache option
$ ./wpdev build core --no-cache

To build projects only, use

$ ./wpdev build projects "<list of website name from setups.yml>"

You can access help file using ./wpdev build -h

Run project containers

You can skip this step if you just build the projects using above step. The projects should already be up and running. From next time, you can just boot the containers using following command as the related project containers are already built.

$ ./wpdev up

Update /etc/hosts

Update /etc/hosts by adding all hosts listed in setups.yml

0.0.0.0 your-project.host

If you followed above steps correctly then, at this point, you should be able access project in your browser. Project files are located inside projects folder.

Accessing database configs

Database configs are stored in environment variables. In order to use it in say your project, use getenv.

/** The name of the database for WordPress */
define('DB_NAME', getenv('DB_NAME'));
/** MySQL database username */
define('DB_USER', getenv('DB_USER'));
/** MySQL database password */
define('DB_PASSWORD', getenv('DB_PASSWORD'));
/** MySQL hostname */
define('DB_HOST', getenv('DB_HOST'));

Shutdown project containers

You can shutdown running containers using following script.

$ ./wpdev down

Clean or destroy

You can delete all related containers using destroy script.

$ ./wpdev destroy

Rebuild

Rebuild will first delete all related containers and builds it again. It is same as running ./wpdev destroy && ./wpdev build.

$ ./wpdev rebuild -h
usage: rebuild
--no-cache Skip cache
-h | --help Display this help text

Override project configuration

To override configurations for a project, copy core/configs/default folder and name it to your website name you are using in setups.yml. You can now change required configurations for the project. The system will first check if the configuration for the website is available and builds it, if not, it will use default configuration.

Volumes

All volumes are mounted inside .data folder except the logs. Logs are mounted inside logs folder.

  • Composer: .data/composer
  • MySQL: .data/mysql
  • Redis: .data/redis
  • WP-CLI: .data/wp-cli

Database provisioning and backup

If you want to import database for a project during setup, just add a sql file with same name as your database name and the system will automatically import it during the build process. So for the basic setup above in Configure websites section, you need to add a file called website1_db inside database folder.

Backup all databases

To backup all databases, use

$ ./wpdev db backup_all

By default it will save backup to the database folder. You can provide custom path using -p option.

$ ./wpdev db backup_all -p /path/to/downloads/bkp.sql

Backup specific databases

To only backup some databases, use

$ ./wpdev db backup -d "db1 db2"

Same as above it will save backup to the database folder. You can provide custom path using -p option.

$ ./wpdev db backup -d "db1 db2" -p /path/to/downloads/bkp.sql

MySQL Client

You can choose between phpmyadmin or adminer as your mysql client. By default the client runs on port 8080. These values are configurable in app_env. So with default configuration, you can access the client by visiting http://localhost:8080. You can use the values DB_USER and DB_PASSWORD from app_env to login.

By default, mysql runs on ip 192.168.10.25 as listed in app_env. So if you are using adminer as a client you should use that ip as a host. To connect database using third party client like sequel pro, use 0.0.0.0 as a host.

Todo

  • Add PHP_CodeSniffer for WordPress.
  • Ability to sync/update plugins, themes, core etc for a project.
  • Ability to create new project from existing one (variation).

About

Rapid dev environment using docker for modern WordPress development.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

WP Dev

Rapid dev environment using docker for modern WordPress development.

This project is experimental and is currently in "works on my machine" stage. i.e it is only tested in OSX Sierra 10.12.5. Please feel free to try and report any bug found. Pull requests, issues, and project recommendations are more than welcome!

Overview

WP Dev aims to setup dev environment for modern WordPress development using simple yaml configuration inside setups.yml. A basic setup will only have website name, host and database name. The build command will fetch latest WordPress, configure and make it ready for you to work further. If git source is provided, it will clone the project from given repo. The system is also capable of provisioning database, installing plugins and themes using wp-cli during project setup.

# Sample configurationwebsite1:
host: website1.devenv:
DB_NAME: website1_db

What's included?

  1. PHP-fpm 7.0.x
  2. Nginx (stable version)
  3. Supervisor
  4. MySQL 5.7.*
  5. Redis
  6. WP-CLI
  7. Composer
  8. phpMyAdmin & Adminer

Prerequisites

  1. Install docker: https://docs.docker.com/engine/installation/

  2. Make sure that you have docker-compose installed

    $ docker-compose --version
    docker-compose version: 1.11.2

    If not, install docker-compose: https://docs.docker.com/v1.11/compose/install/

  3. Install shyaml: https://github.com/0k/shyaml#installation

  4. Install git if you haven't already: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git

Application level environments

Application level environment variables are located inside app_env. Following values are configurable.

# WP Devexport APP_NAME="wpdev"export APP_PORT="80"export NETWORK_NAME="wpdev_network"export LOG_FILE="${PWD}/logs/${APP_NAME}.logs"# Default WordPress Settingsexport WP_DEFAULT_TITLE="WordPress"# Site titleexport WP_ADMIN_USER="admin"export WP_ADMIN_PASSWORD="admin"export WP_ADMIN_EMAIL="admin@local.dev"# MySQL Databaseexport MYSQL_PORT="3306"export MYSQL_ROOT_PASSWORD="wpdev"export DB_HOST="172.19.0.25"export DB_USER="wpdev"export DB_PASSWORD="wpdev"export MYSQL_CLIENT_PORT="8080"# Redisexport REDIS_PORT="6379"# phpmyadmin or adminerexport MYSQL_CLIENT="phpmyadmin"

Configure websites

Copy or rename setups.template.yml to setups.yml to get started with the website setup. Website name, host and DB_NAME inside env are the only values required. Website name can only be alphanumeric and can contain hyphen/dash (-).

# Basic setupwebsite1:
host: website1.devenv:
DB_NAME: website1_db# Complete entry with source as a git repowebsite2:
host: website2.devsource: git@git.org:user/project.gittitle: "Website 2 with all settings"admin_user: "admin"admin_password: "admin"admin_email: "admin@website1.com"plugins:
- "plugin-slug-1 --activate"
- "plugin-slug-2"themes:
- "theme-slug-1 --activate"
- "theme-slug-2"env:
DB_NAME: website2_db# WordPress 4.3website3:
host: website3.devversion: 4.3env:
DB_NAME: website3_db

Available options

OptionDescriptionDefault
hostHost name. This entry should also be made inside /etc/hosts
sourceGit source for the project to clone from
versionWordPress versionlatest
titleWordPress site titledefaults from app_env
admin_userWordPress admin userdefaults from app_env
admin_passwordWordPress admin passworddefaults from app_env
admin_emailWordPress admin emaildefaults from app_env
pluginsList of plugins to install during setup. You can provide all parameters that wp-cli accepts, eg: --activate or --debug
themesList of themes to install during setup. You can provide all parameters that wp-cli accepts, eg: --activate or --debug
envEnvironment variables like DB_NAME. DB_NAME is required.

Build

You only need to run build script if you have made any changes in setups.yml file.

$ ./wpdev build

To build core images only, use

$ ./wpdev build core
# To skip cache, use --no-cache option
$ ./wpdev build core --no-cache

To build projects only, use

$ ./wpdev build projects "<list of website name from setups.yml>"

You can access help file using ./wpdev build -h

Run project containers

You can skip this step if you just build the projects using above step. The projects should already be up and running. From next time, you can just boot the containers using following command as the related project containers are already built.

$ ./wpdev up

Update /etc/hosts

Update /etc/hosts by adding all hosts listed in setups.yml

0.0.0.0 your-project.host

If you followed above steps correctly then, at this point, you should be able access project in your browser. Project files are located inside projects folder.

Accessing database configs

Database configs are stored in environment variables. In order to use it in say your project, use getenv.

/** The name of the database for WordPress */
define('DB_NAME', getenv('DB_NAME'));
/** MySQL database username */
define('DB_USER', getenv('DB_USER'));
/** MySQL database password */
define('DB_PASSWORD', getenv('DB_PASSWORD'));
/** MySQL hostname */
define('DB_HOST', getenv('DB_HOST'));

Shutdown project containers

You can shutdown running containers using following script.

$ ./wpdev down

Clean or destroy

You can delete all related containers using destroy script.

$ ./wpdev destroy

Rebuild

Rebuild will first delete all related containers and builds it again. It is same as running ./wpdev destroy && ./wpdev build.

$ ./wpdev rebuild -h
usage: rebuild
--no-cache Skip cache
-h | --help Display this help text

Override project configuration

To override configurations for a project, copy core/configs/default folder and name it to your website name you are using in setups.yml. You can now change required configurations for the project. The system will first check if the configuration for the website is available and builds it, if not, it will use default configuration.

Volumes

All volumes are mounted inside .data folder except the logs. Logs are mounted inside logs folder.

  • Composer: .data/composer
  • MySQL: .data/mysql
  • Redis: .data/redis
  • WP-CLI: .data/wp-cli

Database provisioning and backup

If you want to import database for a project during setup, just add a sql file with same name as your database name and the system will automatically import it during the build process. So for the basic setup above in Configure websites section, you need to add a file called website1_db inside database folder.

Backup all databases

To backup all databases, use

$ ./wpdev db backup_all

By default it will save backup to the database folder. You can provide custom path using -p option.

$ ./wpdev db backup_all -p /path/to/downloads/bkp.sql

Backup specific databases

To only backup some databases, use

$ ./wpdev db backup -d "db1 db2"

Same as above it will save backup to the database folder. You can provide custom path using -p option.

$ ./wpdev db backup -d "db1 db2" -p /path/to/downloads/bkp.sql

MySQL Client

You can choose between phpmyadmin or adminer as your mysql client. By default the client runs on port 8080. These values are configurable in app_env. So with default configuration, you can access the client by visiting http://localhost:8080. You can use the values DB_USER and DB_PASSWORD from app_env to login.

By default, mysql runs on ip 192.168.10.25 as listed in app_env. So if you are using adminer as a client you should use that ip as a host. To connect database using third party client like sequel pro, use 0.0.0.0 as a host.

Todo

  • Add PHP_CodeSniffer for WordPress.
  • Ability to sync/update plugins, themes, core etc for a project.
  • Ability to create new project from existing one (variation).

About

Rapid dev environment using docker for modern WordPress development.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

WP Dev

Rapid dev environment using docker for modern WordPress development.

This project is experimental and is currently in "works on my machine" stage. i.e it is only tested in OSX Sierra 10.12.5. Please feel free to try and report any bug found. Pull requests, issues, and project recommendations are more than welcome!

Overview

WP Dev aims to setup dev environment for modern WordPress development using simple yaml configuration inside setups.yml. A basic setup will only have website name, host and database name. The build command will fetch latest WordPress, configure and make it ready for you to work further. If git source is provided, it will clone the project from given repo. The system is also capable of provisioning database, installing plugins and themes using wp-cli during project setup.

# Sample configurationwebsite1:
host: website1.devenv:
DB_NAME: website1_db

What's included?

  1. PHP-fpm 7.0.x
  2. Nginx (stable version)
  3. Supervisor
  4. MySQL 5.7.*
  5. Redis
  6. WP-CLI
  7. Composer
  8. phpMyAdmin & Adminer

Prerequisites

  1. Install docker: https://docs.docker.com/engine/installation/

  2. Make sure that you have docker-compose installed

    $ docker-compose --version
    docker-compose version: 1.11.2

    If not, install docker-compose: https://docs.docker.com/v1.11/compose/install/

  3. Install shyaml: https://github.com/0k/shyaml#installation

  4. Install git if you haven't already: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git

Application level environments

Application level environment variables are located inside app_env. Following values are configurable.

# WP Devexport APP_NAME="wpdev"export APP_PORT="80"export NETWORK_NAME="wpdev_network"export LOG_FILE="${PWD}/logs/${APP_NAME}.logs"# Default WordPress Settingsexport WP_DEFAULT_TITLE="WordPress"# Site titleexport WP_ADMIN_USER="admin"export WP_ADMIN_PASSWORD="admin"export WP_ADMIN_EMAIL="admin@local.dev"# MySQL Databaseexport MYSQL_PORT="3306"export MYSQL_ROOT_PASSWORD="wpdev"export DB_HOST="172.19.0.25"export DB_USER="wpdev"export DB_PASSWORD="wpdev"export MYSQL_CLIENT_PORT="8080"# Redisexport REDIS_PORT="6379"# phpmyadmin or adminerexport MYSQL_CLIENT="phpmyadmin"

Configure websites

Copy or rename setups.template.yml to setups.yml to get started with the website setup. Website name, host and DB_NAME inside env are the only values required. Website name can only be alphanumeric and can contain hyphen/dash (-).

# Basic setupwebsite1:
host: website1.devenv:
DB_NAME: website1_db# Complete entry with source as a git repowebsite2:
host: website2.devsource: git@git.org:user/project.gittitle: "Website 2 with all settings"admin_user: "admin"admin_password: "admin"admin_email: "admin@website1.com"plugins:
- "plugin-slug-1 --activate"
- "plugin-slug-2"themes:
- "theme-slug-1 --activate"
- "theme-slug-2"env:
DB_NAME: website2_db# WordPress 4.3website3:
host: website3.devversion: 4.3env:
DB_NAME: website3_db

Available options

OptionDescriptionDefault
hostHost name. This entry should also be made inside /etc/hosts
sourceGit source for the project to clone from
versionWordPress versionlatest
titleWordPress site titledefaults from app_env
admin_userWordPress admin userdefaults from app_env
admin_passwordWordPress admin passworddefaults from app_env
admin_emailWordPress admin emaildefaults from app_env
pluginsList of plugins to install during setup. You can provide all parameters that wp-cli accepts, eg: --activate or --debug
themesList of themes to install during setup. You can provide all parameters that wp-cli accepts, eg: --activate or --debug
envEnvironment variables like DB_NAME. DB_NAME is required.

Build

You only need to run build script if you have made any changes in setups.yml file.

$ ./wpdev build

To build core images only, use

$ ./wpdev build core
# To skip cache, use --no-cache option
$ ./wpdev build core --no-cache

To build projects only, use

$ ./wpdev build projects "<list of website name from setups.yml>"

You can access help file using ./wpdev build -h

Run project containers

You can skip this step if you just build the projects using above step. The projects should already be up and running. From next time, you can just boot the containers using following command as the related project containers are already built.

$ ./wpdev up

Update /etc/hosts

Update /etc/hosts by adding all hosts listed in setups.yml

0.0.0.0 your-project.host

If you followed above steps correctly then, at this point, you should be able access project in your browser. Project files are located inside projects folder.

Accessing database configs

Database configs are stored in environment variables. In order to use it in say your project, use getenv.

/** The name of the database for WordPress */
define('DB_NAME', getenv('DB_NAME'));
/** MySQL database username */
define('DB_USER', getenv('DB_USER'));
/** MySQL database password */
define('DB_PASSWORD', getenv('DB_PASSWORD'));
/** MySQL hostname */
define('DB_HOST', getenv('DB_HOST'));

Shutdown project containers

You can shutdown running containers using following script.

$ ./wpdev down

Clean or destroy

You can delete all related containers using destroy script.

$ ./wpdev destroy

Rebuild

Rebuild will first delete all related containers and builds it again. It is same as running ./wpdev destroy && ./wpdev build.

$ ./wpdev rebuild -h
usage: rebuild
--no-cache Skip cache
-h | --help Display this help text

Override project configuration

To override configurations for a project, copy core/configs/default folder and name it to your website name you are using in setups.yml. You can now change required configurations for the project. The system will first check if the configuration for the website is available and builds it, if not, it will use default configuration.

Volumes

All volumes are mounted inside .data folder except the logs. Logs are mounted inside logs folder.

  • Composer: .data/composer
  • MySQL: .data/mysql
  • Redis: .data/redis
  • WP-CLI: .data/wp-cli

Database provisioning and backup

If you want to import database for a project during setup, just add a sql file with same name as your database name and the system will automatically import it during the build process. So for the basic setup above in Configure websites section, you need to add a file called website1_db inside database folder.

Backup all databases

To backup all databases, use

$ ./wpdev db backup_all

By default it will save backup to the database folder. You can provide custom path using -p option.

$ ./wpdev db backup_all -p /path/to/downloads/bkp.sql

Backup specific databases

To only backup some databases, use

$ ./wpdev db backup -d "db1 db2"

Same as above it will save backup to the database folder. You can provide custom path using -p option.

$ ./wpdev db backup -d "db1 db2" -p /path/to/downloads/bkp.sql

MySQL Client

You can choose between phpmyadmin or adminer as your mysql client. By default the client runs on port 8080. These values are configurable in app_env. So with default configuration, you can access the client by visiting http://localhost:8080. You can use the values DB_USER and DB_PASSWORD from app_env to login.

By default, mysql runs on ip 192.168.10.25 as listed in app_env. So if you are using adminer as a client you should use that ip as a host. To connect database using third party client like sequel pro, use 0.0.0.0 as a host.

Todo

  • Add PHP_CodeSniffer for WordPress.
  • Ability to sync/update plugins, themes, core etc for a project.
  • Ability to create new project from existing one (variation).

About

Rapid dev environment using docker for modern WordPress development.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages