Repository files navigation

Docker Environment for UCSC WordPress theme and plugins

How this environment works

This is a home-rolled Docker Compose environment for local development. It is not@wordpress/env (wp-env), notLocal (LocalWP), not ddev, and not WP Engine's local tooling. There is no framework CLI — the whole lifecycle is plain docker compose against the compose files in this repo, with WP-CLI run inside a container.

Why home-rolled: the Campus Directory block needs the PHP LDAP extension (and a UCSC VPN connection to reach the LDAP server). Off-the-shelf runtimes did not cleanly support a custom LDAP-enabled PHP image, so this repo ships its own image and compose set instead.

What's in the repo:

FileRole
DockerfileBuilds the wp service from wordpress:6.5.5-php8.1-apache, adding the PHP LDAP extension and Xdebug.
docker-compose.ymlBase stack: server (nginx 1.19), db (mysql 8.0), wp (built from Dockerfile), wpcli (wordpress:cli-php8.1).
docker-compose-start.ymlDev/watch overlay — adds the Node build/watch services for the theme and the blocks plugin.
docker-compose-install.ymlOne-shot bootstrap jobs: theme_composer_install, theme_npm_install, plugin_npm_install, wordpress_install.
setup.shClones the theme and product plugins into public/wp-content/.
.env.example.txtCopied to .env during first-time setup.
# base WordPress stack only
docker compose up -d
# base stack + Node dev/watch environments (theme + blocks plugin)
docker compose -f docker-compose.yml -f docker-compose-start.yml up -d

Important

This Docker stack is the local development environment only. The real WordPress site is production and is not this stack. Run all builds, tests, and PHP through the containers (e.g. docker compose exec wpcli wp <command>) — not host Node/PHP/Composer.

The step-by-step setup below walks through this from a clean checkout.

Prerequisites

  1. The instructions assume you have git and Docker installed. Have the docker app open while going through the steps.
  2. You need a UCSC VPN connection to use the Campus Directory block in the UCSC Gutenberg Blocks plugin.

Setup

  1. Go to your terminal and run this command to clone this repo

    • git clone https://github.com/ucsc/wp-dev.ucsc.git
    • cd into the folder cd wp-dev.ucsc
  2. Edit your hosts file by running sudo nano /etc/hosts in your terminal and add 127.0.0.1 wp-dev.ucsc

    • On Mac OS do ctrl+O to writeout and hit enter on your keyboard
    • Then hit ctrl+X to exit
    • You have now successfully edited you host file.
  3. Change .env.example.txt to .env by following these steps:

    • cd into the folder cd wp-dev.ucsc if you are not in it already
    • Run the command ls -a to see hidden files and verify there is a file called .env.example.txt
    • Run this command to change the name to .env cp .env.example.txt .env
    • Run ls -a to verify the name of the file has changed to .env
  4. In the wp-dev.ucsc directory build and start the WordPress server with HTTPS & PHP LDAP module (Allow time for this command to finish)

    • docker compose up -d to start the WordPress server environment OR
    • docker compose -f docker-compose.yml -f docker-compose-start.yml up -d to start the WordPress server environment AND the Node development environments for the theme and blocks plugin
    • Once this is finished running you should have a total of 5 docker containers up and running. You can verify this by opening up the docker app and making sure there is a green dot next to each container.
    • Troubleshooting: If there is not a green dot next to each container then here is what you should do: select all the containers in your docker app and delete them all. Once all the containers have been deleted go to your terminal in the wp-dev.ucsc directory and run docker compose up -d again. This should solve the issue and have all 5 containers up and running succesfully.

Important

Check that a wp-config.php file exists in the ./public/ folder before proceeding

  1. Run the following script to clone the theme and plugins to the correct project directories.

    • ./setup.sh
  2. Next we install WordPress, activate the theme & plugin, run composer install on the theme as well as npm install on both the plugin and the theme

    • docker compose -f docker-compose-install.yml run theme_composer_install
    • docker compose -f docker-compose-install.yml run theme_npm_install
    • docker compose -f docker-compose-install.yml run plugin_npm_install (may take up to 2 minutes to complete)
    • docker compose -f docker-compose-install.yml run wordpress_install

Your installation is now complete.

Troubleshooting: If there is not a green dot next to each container then here is what you should do: select all the containers in your docker app and delete them all. Once all the containers have been deleted go to your terminal in the wp-dev.ucsc directory and run docker compose up -d again. This should solve the issue and have all 5 containers up and running succesfully.

Running the Docker services for development

Now that WordPress is installed and the plugins and theme are built, we can start watching for changes to code and rebuild when necessary

  • Start the WordPress server environment
    • docker compose up -d OR
  • Start the WordPress server environment AND the Node development environments for the theme and blocks plugin
    • docker compose -f docker-compose.yml -f docker-compose-start.yml up -d

Tip

Swap up with down in the commands above to stop your containers. You must run both commands to start and stop the development environments.

In Your Browser

At this point you should be able to visit https://wp-dev.ucsc/wp-admin in a browser. In Google Chrome you will get a error saying "Your connection is not private", this is due to the local certificates. You can click Advanced -> proceed to wp-dev.ucsc. To login:

  • username: admin
  • password password

Tip

  • You can run WP-CLI commands with docker exec ${NAME}-cli wp <COMMAND>
  • ${NAME} is what you used in your .env file

Troubleshooting

If the error WARN[0000] Found orphan containers is encountered, use the --remove orphans flag on startup.

docker compose -f docker-compose.yml -f docker-compose-start.yml up -d --remove-orphans

VScode/Xdebug setup

The PHP Debug plugin is required. On the debug tab click Create a launch.json file and select type php.

You can replace the contents of launch.json with the following:

{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html/wp-content/plugins/ucsc-gutenberg-blocks": "${workspaceRoot}"
},
"hostname": "wp-dev.ucsc"
}
]
}

About

A Docker WordPress Local Environment with HTTPS & LDAP

Resources

Stars

3 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

Docker Environment for UCSC WordPress theme and plugins

How this environment works

This is a home-rolled Docker Compose environment for local development. It is not@wordpress/env (wp-env), notLocal (LocalWP), not ddev, and not WP Engine's local tooling. There is no framework CLI — the whole lifecycle is plain docker compose against the compose files in this repo, with WP-CLI run inside a container.

Why home-rolled: the Campus Directory block needs the PHP LDAP extension (and a UCSC VPN connection to reach the LDAP server). Off-the-shelf runtimes did not cleanly support a custom LDAP-enabled PHP image, so this repo ships its own image and compose set instead.

What's in the repo:

FileRole
DockerfileBuilds the wp service from wordpress:6.5.5-php8.1-apache, adding the PHP LDAP extension and Xdebug.
docker-compose.ymlBase stack: server (nginx 1.19), db (mysql 8.0), wp (built from Dockerfile), wpcli (wordpress:cli-php8.1).
docker-compose-start.ymlDev/watch overlay — adds the Node build/watch services for the theme and the blocks plugin.
docker-compose-install.ymlOne-shot bootstrap jobs: theme_composer_install, theme_npm_install, plugin_npm_install, wordpress_install.
setup.shClones the theme and product plugins into public/wp-content/.
.env.example.txtCopied to .env during first-time setup.
# base WordPress stack only
docker compose up -d
# base stack + Node dev/watch environments (theme + blocks plugin)
docker compose -f docker-compose.yml -f docker-compose-start.yml up -d

Important

This Docker stack is the local development environment only. The real WordPress site is production and is not this stack. Run all builds, tests, and PHP through the containers (e.g. docker compose exec wpcli wp <command>) — not host Node/PHP/Composer.

The step-by-step setup below walks through this from a clean checkout.

Prerequisites

  1. The instructions assume you have git and Docker installed. Have the docker app open while going through the steps.
  2. You need a UCSC VPN connection to use the Campus Directory block in the UCSC Gutenberg Blocks plugin.

Setup

  1. Go to your terminal and run this command to clone this repo

    • git clone https://github.com/ucsc/wp-dev.ucsc.git
    • cd into the folder cd wp-dev.ucsc
  2. Edit your hosts file by running sudo nano /etc/hosts in your terminal and add 127.0.0.1 wp-dev.ucsc

    • On Mac OS do ctrl+O to writeout and hit enter on your keyboard
    • Then hit ctrl+X to exit
    • You have now successfully edited you host file.
  3. Change .env.example.txt to .env by following these steps:

    • cd into the folder cd wp-dev.ucsc if you are not in it already
    • Run the command ls -a to see hidden files and verify there is a file called .env.example.txt
    • Run this command to change the name to .env cp .env.example.txt .env
    • Run ls -a to verify the name of the file has changed to .env
  4. In the wp-dev.ucsc directory build and start the WordPress server with HTTPS & PHP LDAP module (Allow time for this command to finish)

    • docker compose up -d to start the WordPress server environment OR
    • docker compose -f docker-compose.yml -f docker-compose-start.yml up -d to start the WordPress server environment AND the Node development environments for the theme and blocks plugin
    • Once this is finished running you should have a total of 5 docker containers up and running. You can verify this by opening up the docker app and making sure there is a green dot next to each container.
    • Troubleshooting: If there is not a green dot next to each container then here is what you should do: select all the containers in your docker app and delete them all. Once all the containers have been deleted go to your terminal in the wp-dev.ucsc directory and run docker compose up -d again. This should solve the issue and have all 5 containers up and running succesfully.

Important

Check that a wp-config.php file exists in the ./public/ folder before proceeding

  1. Run the following script to clone the theme and plugins to the correct project directories.

    • ./setup.sh
  2. Next we install WordPress, activate the theme & plugin, run composer install on the theme as well as npm install on both the plugin and the theme

    • docker compose -f docker-compose-install.yml run theme_composer_install
    • docker compose -f docker-compose-install.yml run theme_npm_install
    • docker compose -f docker-compose-install.yml run plugin_npm_install (may take up to 2 minutes to complete)
    • docker compose -f docker-compose-install.yml run wordpress_install

Your installation is now complete.

Troubleshooting: If there is not a green dot next to each container then here is what you should do: select all the containers in your docker app and delete them all. Once all the containers have been deleted go to your terminal in the wp-dev.ucsc directory and run docker compose up -d again. This should solve the issue and have all 5 containers up and running succesfully.

Running the Docker services for development

Now that WordPress is installed and the plugins and theme are built, we can start watching for changes to code and rebuild when necessary

  • Start the WordPress server environment
    • docker compose up -d OR
  • Start the WordPress server environment AND the Node development environments for the theme and blocks plugin
    • docker compose -f docker-compose.yml -f docker-compose-start.yml up -d

Tip

Swap up with down in the commands above to stop your containers. You must run both commands to start and stop the development environments.

In Your Browser

At this point you should be able to visit https://wp-dev.ucsc/wp-admin in a browser. In Google Chrome you will get a error saying "Your connection is not private", this is due to the local certificates. You can click Advanced -> proceed to wp-dev.ucsc. To login:

  • username: admin
  • password password

Tip

  • You can run WP-CLI commands with docker exec ${NAME}-cli wp <COMMAND>
  • ${NAME} is what you used in your .env file

Troubleshooting

If the error WARN[0000] Found orphan containers is encountered, use the --remove orphans flag on startup.

docker compose -f docker-compose.yml -f docker-compose-start.yml up -d --remove-orphans

VScode/Xdebug setup

The PHP Debug plugin is required. On the debug tab click Create a launch.json file and select type php.

You can replace the contents of launch.json with the following:

{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html/wp-content/plugins/ucsc-gutenberg-blocks": "${workspaceRoot}"
},
"hostname": "wp-dev.ucsc"
}
]
}

About

A Docker WordPress Local Environment with HTTPS & LDAP

Resources

Stars

3 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

Docker Environment for UCSC WordPress theme and plugins

How this environment works

This is a home-rolled Docker Compose environment for local development. It is not@wordpress/env (wp-env), notLocal (LocalWP), not ddev, and not WP Engine's local tooling. There is no framework CLI — the whole lifecycle is plain docker compose against the compose files in this repo, with WP-CLI run inside a container.

Why home-rolled: the Campus Directory block needs the PHP LDAP extension (and a UCSC VPN connection to reach the LDAP server). Off-the-shelf runtimes did not cleanly support a custom LDAP-enabled PHP image, so this repo ships its own image and compose set instead.

What's in the repo:

FileRole
DockerfileBuilds the wp service from wordpress:6.5.5-php8.1-apache, adding the PHP LDAP extension and Xdebug.
docker-compose.ymlBase stack: server (nginx 1.19), db (mysql 8.0), wp (built from Dockerfile), wpcli (wordpress:cli-php8.1).
docker-compose-start.ymlDev/watch overlay — adds the Node build/watch services for the theme and the blocks plugin.
docker-compose-install.ymlOne-shot bootstrap jobs: theme_composer_install, theme_npm_install, plugin_npm_install, wordpress_install.
setup.shClones the theme and product plugins into public/wp-content/.
.env.example.txtCopied to .env during first-time setup.
# base WordPress stack only
docker compose up -d
# base stack + Node dev/watch environments (theme + blocks plugin)
docker compose -f docker-compose.yml -f docker-compose-start.yml up -d

Important

This Docker stack is the local development environment only. The real WordPress site is production and is not this stack. Run all builds, tests, and PHP through the containers (e.g. docker compose exec wpcli wp <command>) — not host Node/PHP/Composer.

The step-by-step setup below walks through this from a clean checkout.

Prerequisites

  1. The instructions assume you have git and Docker installed. Have the docker app open while going through the steps.
  2. You need a UCSC VPN connection to use the Campus Directory block in the UCSC Gutenberg Blocks plugin.

Setup

  1. Go to your terminal and run this command to clone this repo

    • git clone https://github.com/ucsc/wp-dev.ucsc.git
    • cd into the folder cd wp-dev.ucsc
  2. Edit your hosts file by running sudo nano /etc/hosts in your terminal and add 127.0.0.1 wp-dev.ucsc

    • On Mac OS do ctrl+O to writeout and hit enter on your keyboard
    • Then hit ctrl+X to exit
    • You have now successfully edited you host file.
  3. Change .env.example.txt to .env by following these steps:

    • cd into the folder cd wp-dev.ucsc if you are not in it already
    • Run the command ls -a to see hidden files and verify there is a file called .env.example.txt
    • Run this command to change the name to .env cp .env.example.txt .env
    • Run ls -a to verify the name of the file has changed to .env
  4. In the wp-dev.ucsc directory build and start the WordPress server with HTTPS & PHP LDAP module (Allow time for this command to finish)

    • docker compose up -d to start the WordPress server environment OR
    • docker compose -f docker-compose.yml -f docker-compose-start.yml up -d to start the WordPress server environment AND the Node development environments for the theme and blocks plugin
    • Once this is finished running you should have a total of 5 docker containers up and running. You can verify this by opening up the docker app and making sure there is a green dot next to each container.
    • Troubleshooting: If there is not a green dot next to each container then here is what you should do: select all the containers in your docker app and delete them all. Once all the containers have been deleted go to your terminal in the wp-dev.ucsc directory and run docker compose up -d again. This should solve the issue and have all 5 containers up and running succesfully.

Important

Check that a wp-config.php file exists in the ./public/ folder before proceeding

  1. Run the following script to clone the theme and plugins to the correct project directories.

    • ./setup.sh
  2. Next we install WordPress, activate the theme & plugin, run composer install on the theme as well as npm install on both the plugin and the theme

    • docker compose -f docker-compose-install.yml run theme_composer_install
    • docker compose -f docker-compose-install.yml run theme_npm_install
    • docker compose -f docker-compose-install.yml run plugin_npm_install (may take up to 2 minutes to complete)
    • docker compose -f docker-compose-install.yml run wordpress_install

Your installation is now complete.

Troubleshooting: If there is not a green dot next to each container then here is what you should do: select all the containers in your docker app and delete them all. Once all the containers have been deleted go to your terminal in the wp-dev.ucsc directory and run docker compose up -d again. This should solve the issue and have all 5 containers up and running succesfully.

Running the Docker services for development

Now that WordPress is installed and the plugins and theme are built, we can start watching for changes to code and rebuild when necessary

  • Start the WordPress server environment
    • docker compose up -d OR
  • Start the WordPress server environment AND the Node development environments for the theme and blocks plugin
    • docker compose -f docker-compose.yml -f docker-compose-start.yml up -d

Tip

Swap up with down in the commands above to stop your containers. You must run both commands to start and stop the development environments.

In Your Browser

At this point you should be able to visit https://wp-dev.ucsc/wp-admin in a browser. In Google Chrome you will get a error saying "Your connection is not private", this is due to the local certificates. You can click Advanced -> proceed to wp-dev.ucsc. To login:

  • username: admin
  • password password

Tip

  • You can run WP-CLI commands with docker exec ${NAME}-cli wp <COMMAND>
  • ${NAME} is what you used in your .env file

Troubleshooting

If the error WARN[0000] Found orphan containers is encountered, use the --remove orphans flag on startup.

docker compose -f docker-compose.yml -f docker-compose-start.yml up -d --remove-orphans

VScode/Xdebug setup

The PHP Debug plugin is required. On the debug tab click Create a launch.json file and select type php.

You can replace the contents of launch.json with the following:

{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html/wp-content/plugins/ucsc-gutenberg-blocks": "${workspaceRoot}"
},
"hostname": "wp-dev.ucsc"
}
]
}

About

A Docker WordPress Local Environment with HTTPS & LDAP

Resources

Stars

3 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

Docker Environment for UCSC WordPress theme and plugins

How this environment works

This is a home-rolled Docker Compose environment for local development. It is not@wordpress/env (wp-env), notLocal (LocalWP), not ddev, and not WP Engine's local tooling. There is no framework CLI — the whole lifecycle is plain docker compose against the compose files in this repo, with WP-CLI run inside a container.

Why home-rolled: the Campus Directory block needs the PHP LDAP extension (and a UCSC VPN connection to reach the LDAP server). Off-the-shelf runtimes did not cleanly support a custom LDAP-enabled PHP image, so this repo ships its own image and compose set instead.

What's in the repo:

FileRole
DockerfileBuilds the wp service from wordpress:6.5.5-php8.1-apache, adding the PHP LDAP extension and Xdebug.
docker-compose.ymlBase stack: server (nginx 1.19), db (mysql 8.0), wp (built from Dockerfile), wpcli (wordpress:cli-php8.1).
docker-compose-start.ymlDev/watch overlay — adds the Node build/watch services for the theme and the blocks plugin.
docker-compose-install.ymlOne-shot bootstrap jobs: theme_composer_install, theme_npm_install, plugin_npm_install, wordpress_install.
setup.shClones the theme and product plugins into public/wp-content/.
.env.example.txtCopied to .env during first-time setup.
# base WordPress stack only
docker compose up -d
# base stack + Node dev/watch environments (theme + blocks plugin)
docker compose -f docker-compose.yml -f docker-compose-start.yml up -d

Important

This Docker stack is the local development environment only. The real WordPress site is production and is not this stack. Run all builds, tests, and PHP through the containers (e.g. docker compose exec wpcli wp <command>) — not host Node/PHP/Composer.

The step-by-step setup below walks through this from a clean checkout.

Prerequisites

  1. The instructions assume you have git and Docker installed. Have the docker app open while going through the steps.
  2. You need a UCSC VPN connection to use the Campus Directory block in the UCSC Gutenberg Blocks plugin.

Setup

  1. Go to your terminal and run this command to clone this repo

    • git clone https://github.com/ucsc/wp-dev.ucsc.git
    • cd into the folder cd wp-dev.ucsc
  2. Edit your hosts file by running sudo nano /etc/hosts in your terminal and add 127.0.0.1 wp-dev.ucsc

    • On Mac OS do ctrl+O to writeout and hit enter on your keyboard
    • Then hit ctrl+X to exit
    • You have now successfully edited you host file.
  3. Change .env.example.txt to .env by following these steps:

    • cd into the folder cd wp-dev.ucsc if you are not in it already
    • Run the command ls -a to see hidden files and verify there is a file called .env.example.txt
    • Run this command to change the name to .env cp .env.example.txt .env
    • Run ls -a to verify the name of the file has changed to .env
  4. In the wp-dev.ucsc directory build and start the WordPress server with HTTPS & PHP LDAP module (Allow time for this command to finish)

    • docker compose up -d to start the WordPress server environment OR
    • docker compose -f docker-compose.yml -f docker-compose-start.yml up -d to start the WordPress server environment AND the Node development environments for the theme and blocks plugin
    • Once this is finished running you should have a total of 5 docker containers up and running. You can verify this by opening up the docker app and making sure there is a green dot next to each container.
    • Troubleshooting: If there is not a green dot next to each container then here is what you should do: select all the containers in your docker app and delete them all. Once all the containers have been deleted go to your terminal in the wp-dev.ucsc directory and run docker compose up -d again. This should solve the issue and have all 5 containers up and running succesfully.

Important

Check that a wp-config.php file exists in the ./public/ folder before proceeding

  1. Run the following script to clone the theme and plugins to the correct project directories.

    • ./setup.sh
  2. Next we install WordPress, activate the theme & plugin, run composer install on the theme as well as npm install on both the plugin and the theme

    • docker compose -f docker-compose-install.yml run theme_composer_install
    • docker compose -f docker-compose-install.yml run theme_npm_install
    • docker compose -f docker-compose-install.yml run plugin_npm_install (may take up to 2 minutes to complete)
    • docker compose -f docker-compose-install.yml run wordpress_install

Your installation is now complete.

Troubleshooting: If there is not a green dot next to each container then here is what you should do: select all the containers in your docker app and delete them all. Once all the containers have been deleted go to your terminal in the wp-dev.ucsc directory and run docker compose up -d again. This should solve the issue and have all 5 containers up and running succesfully.

Running the Docker services for development

Now that WordPress is installed and the plugins and theme are built, we can start watching for changes to code and rebuild when necessary

  • Start the WordPress server environment
    • docker compose up -d OR
  • Start the WordPress server environment AND the Node development environments for the theme and blocks plugin
    • docker compose -f docker-compose.yml -f docker-compose-start.yml up -d

Tip

Swap up with down in the commands above to stop your containers. You must run both commands to start and stop the development environments.

In Your Browser

At this point you should be able to visit https://wp-dev.ucsc/wp-admin in a browser. In Google Chrome you will get a error saying "Your connection is not private", this is due to the local certificates. You can click Advanced -> proceed to wp-dev.ucsc. To login:

  • username: admin
  • password password

Tip

  • You can run WP-CLI commands with docker exec ${NAME}-cli wp <COMMAND>
  • ${NAME} is what you used in your .env file

Troubleshooting

If the error WARN[0000] Found orphan containers is encountered, use the --remove orphans flag on startup.

docker compose -f docker-compose.yml -f docker-compose-start.yml up -d --remove-orphans

VScode/Xdebug setup

The PHP Debug plugin is required. On the debug tab click Create a launch.json file and select type php.

You can replace the contents of launch.json with the following:

{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html/wp-content/plugins/ucsc-gutenberg-blocks": "${workspaceRoot}"
},
"hostname": "wp-dev.ucsc"
}
]
}

About

A Docker WordPress Local Environment with HTTPS & LDAP

Resources

Stars

3 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

Docker Environment for UCSC WordPress theme and plugins

How this environment works

This is a home-rolled Docker Compose environment for local development. It is not@wordpress/env (wp-env), notLocal (LocalWP), not ddev, and not WP Engine's local tooling. There is no framework CLI — the whole lifecycle is plain docker compose against the compose files in this repo, with WP-CLI run inside a container.

Why home-rolled: the Campus Directory block needs the PHP LDAP extension (and a UCSC VPN connection to reach the LDAP server). Off-the-shelf runtimes did not cleanly support a custom LDAP-enabled PHP image, so this repo ships its own image and compose set instead.

What's in the repo:

FileRole
DockerfileBuilds the wp service from wordpress:6.5.5-php8.1-apache, adding the PHP LDAP extension and Xdebug.
docker-compose.ymlBase stack: server (nginx 1.19), db (mysql 8.0), wp (built from Dockerfile), wpcli (wordpress:cli-php8.1).
docker-compose-start.ymlDev/watch overlay — adds the Node build/watch services for the theme and the blocks plugin.
docker-compose-install.ymlOne-shot bootstrap jobs: theme_composer_install, theme_npm_install, plugin_npm_install, wordpress_install.
setup.shClones the theme and product plugins into public/wp-content/.
.env.example.txtCopied to .env during first-time setup.
# base WordPress stack only
docker compose up -d
# base stack + Node dev/watch environments (theme + blocks plugin)
docker compose -f docker-compose.yml -f docker-compose-start.yml up -d

Important

This Docker stack is the local development environment only. The real WordPress site is production and is not this stack. Run all builds, tests, and PHP through the containers (e.g. docker compose exec wpcli wp <command>) — not host Node/PHP/Composer.

The step-by-step setup below walks through this from a clean checkout.

Prerequisites

  1. The instructions assume you have git and Docker installed. Have the docker app open while going through the steps.
  2. You need a UCSC VPN connection to use the Campus Directory block in the UCSC Gutenberg Blocks plugin.

Setup

  1. Go to your terminal and run this command to clone this repo

    • git clone https://github.com/ucsc/wp-dev.ucsc.git
    • cd into the folder cd wp-dev.ucsc
  2. Edit your hosts file by running sudo nano /etc/hosts in your terminal and add 127.0.0.1 wp-dev.ucsc

    • On Mac OS do ctrl+O to writeout and hit enter on your keyboard
    • Then hit ctrl+X to exit
    • You have now successfully edited you host file.
  3. Change .env.example.txt to .env by following these steps:

    • cd into the folder cd wp-dev.ucsc if you are not in it already
    • Run the command ls -a to see hidden files and verify there is a file called .env.example.txt
    • Run this command to change the name to .env cp .env.example.txt .env
    • Run ls -a to verify the name of the file has changed to .env
  4. In the wp-dev.ucsc directory build and start the WordPress server with HTTPS & PHP LDAP module (Allow time for this command to finish)

    • docker compose up -d to start the WordPress server environment OR
    • docker compose -f docker-compose.yml -f docker-compose-start.yml up -d to start the WordPress server environment AND the Node development environments for the theme and blocks plugin
    • Once this is finished running you should have a total of 5 docker containers up and running. You can verify this by opening up the docker app and making sure there is a green dot next to each container.
    • Troubleshooting: If there is not a green dot next to each container then here is what you should do: select all the containers in your docker app and delete them all. Once all the containers have been deleted go to your terminal in the wp-dev.ucsc directory and run docker compose up -d again. This should solve the issue and have all 5 containers up and running succesfully.

Important

Check that a wp-config.php file exists in the ./public/ folder before proceeding

  1. Run the following script to clone the theme and plugins to the correct project directories.

    • ./setup.sh
  2. Next we install WordPress, activate the theme & plugin, run composer install on the theme as well as npm install on both the plugin and the theme

    • docker compose -f docker-compose-install.yml run theme_composer_install
    • docker compose -f docker-compose-install.yml run theme_npm_install
    • docker compose -f docker-compose-install.yml run plugin_npm_install (may take up to 2 minutes to complete)
    • docker compose -f docker-compose-install.yml run wordpress_install

Your installation is now complete.

Troubleshooting: If there is not a green dot next to each container then here is what you should do: select all the containers in your docker app and delete them all. Once all the containers have been deleted go to your terminal in the wp-dev.ucsc directory and run docker compose up -d again. This should solve the issue and have all 5 containers up and running succesfully.

Running the Docker services for development

Now that WordPress is installed and the plugins and theme are built, we can start watching for changes to code and rebuild when necessary

  • Start the WordPress server environment
    • docker compose up -d OR
  • Start the WordPress server environment AND the Node development environments for the theme and blocks plugin
    • docker compose -f docker-compose.yml -f docker-compose-start.yml up -d

Tip

Swap up with down in the commands above to stop your containers. You must run both commands to start and stop the development environments.

In Your Browser

At this point you should be able to visit https://wp-dev.ucsc/wp-admin in a browser. In Google Chrome you will get a error saying "Your connection is not private", this is due to the local certificates. You can click Advanced -> proceed to wp-dev.ucsc. To login:

  • username: admin
  • password password

Tip

  • You can run WP-CLI commands with docker exec ${NAME}-cli wp <COMMAND>
  • ${NAME} is what you used in your .env file

Troubleshooting

If the error WARN[0000] Found orphan containers is encountered, use the --remove orphans flag on startup.

docker compose -f docker-compose.yml -f docker-compose-start.yml up -d --remove-orphans

VScode/Xdebug setup

The PHP Debug plugin is required. On the debug tab click Create a launch.json file and select type php.

You can replace the contents of launch.json with the following:

{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html/wp-content/plugins/ucsc-gutenberg-blocks": "${workspaceRoot}"
},
"hostname": "wp-dev.ucsc"
}
]
}

About

A Docker WordPress Local Environment with HTTPS & LDAP

Resources

Stars

3 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

Docker Environment for UCSC WordPress theme and plugins

How this environment works

This is a home-rolled Docker Compose environment for local development. It is not@wordpress/env (wp-env), notLocal (LocalWP), not ddev, and not WP Engine's local tooling. There is no framework CLI — the whole lifecycle is plain docker compose against the compose files in this repo, with WP-CLI run inside a container.

Why home-rolled: the Campus Directory block needs the PHP LDAP extension (and a UCSC VPN connection to reach the LDAP server). Off-the-shelf runtimes did not cleanly support a custom LDAP-enabled PHP image, so this repo ships its own image and compose set instead.

What's in the repo:

FileRole
DockerfileBuilds the wp service from wordpress:6.5.5-php8.1-apache, adding the PHP LDAP extension and Xdebug.
docker-compose.ymlBase stack: server (nginx 1.19), db (mysql 8.0), wp (built from Dockerfile), wpcli (wordpress:cli-php8.1).
docker-compose-start.ymlDev/watch overlay — adds the Node build/watch services for the theme and the blocks plugin.
docker-compose-install.ymlOne-shot bootstrap jobs: theme_composer_install, theme_npm_install, plugin_npm_install, wordpress_install.
setup.shClones the theme and product plugins into public/wp-content/.
.env.example.txtCopied to .env during first-time setup.
# base WordPress stack only
docker compose up -d
# base stack + Node dev/watch environments (theme + blocks plugin)
docker compose -f docker-compose.yml -f docker-compose-start.yml up -d

Important

This Docker stack is the local development environment only. The real WordPress site is production and is not this stack. Run all builds, tests, and PHP through the containers (e.g. docker compose exec wpcli wp <command>) — not host Node/PHP/Composer.

The step-by-step setup below walks through this from a clean checkout.

Prerequisites

  1. The instructions assume you have git and Docker installed. Have the docker app open while going through the steps.
  2. You need a UCSC VPN connection to use the Campus Directory block in the UCSC Gutenberg Blocks plugin.

Setup

  1. Go to your terminal and run this command to clone this repo

    • git clone https://github.com/ucsc/wp-dev.ucsc.git
    • cd into the folder cd wp-dev.ucsc
  2. Edit your hosts file by running sudo nano /etc/hosts in your terminal and add 127.0.0.1 wp-dev.ucsc

    • On Mac OS do ctrl+O to writeout and hit enter on your keyboard
    • Then hit ctrl+X to exit
    • You have now successfully edited you host file.
  3. Change .env.example.txt to .env by following these steps:

    • cd into the folder cd wp-dev.ucsc if you are not in it already
    • Run the command ls -a to see hidden files and verify there is a file called .env.example.txt
    • Run this command to change the name to .env cp .env.example.txt .env
    • Run ls -a to verify the name of the file has changed to .env
  4. In the wp-dev.ucsc directory build and start the WordPress server with HTTPS & PHP LDAP module (Allow time for this command to finish)

    • docker compose up -d to start the WordPress server environment OR
    • docker compose -f docker-compose.yml -f docker-compose-start.yml up -d to start the WordPress server environment AND the Node development environments for the theme and blocks plugin
    • Once this is finished running you should have a total of 5 docker containers up and running. You can verify this by opening up the docker app and making sure there is a green dot next to each container.
    • Troubleshooting: If there is not a green dot next to each container then here is what you should do: select all the containers in your docker app and delete them all. Once all the containers have been deleted go to your terminal in the wp-dev.ucsc directory and run docker compose up -d again. This should solve the issue and have all 5 containers up and running succesfully.

Important

Check that a wp-config.php file exists in the ./public/ folder before proceeding

  1. Run the following script to clone the theme and plugins to the correct project directories.

    • ./setup.sh
  2. Next we install WordPress, activate the theme & plugin, run composer install on the theme as well as npm install on both the plugin and the theme

    • docker compose -f docker-compose-install.yml run theme_composer_install
    • docker compose -f docker-compose-install.yml run theme_npm_install
    • docker compose -f docker-compose-install.yml run plugin_npm_install (may take up to 2 minutes to complete)
    • docker compose -f docker-compose-install.yml run wordpress_install

Your installation is now complete.

Troubleshooting: If there is not a green dot next to each container then here is what you should do: select all the containers in your docker app and delete them all. Once all the containers have been deleted go to your terminal in the wp-dev.ucsc directory and run docker compose up -d again. This should solve the issue and have all 5 containers up and running succesfully.

Running the Docker services for development

Now that WordPress is installed and the plugins and theme are built, we can start watching for changes to code and rebuild when necessary

  • Start the WordPress server environment
    • docker compose up -d OR
  • Start the WordPress server environment AND the Node development environments for the theme and blocks plugin
    • docker compose -f docker-compose.yml -f docker-compose-start.yml up -d

Tip

Swap up with down in the commands above to stop your containers. You must run both commands to start and stop the development environments.

In Your Browser

At this point you should be able to visit https://wp-dev.ucsc/wp-admin in a browser. In Google Chrome you will get a error saying "Your connection is not private", this is due to the local certificates. You can click Advanced -> proceed to wp-dev.ucsc. To login:

  • username: admin
  • password password

Tip

  • You can run WP-CLI commands with docker exec ${NAME}-cli wp <COMMAND>
  • ${NAME} is what you used in your .env file

Troubleshooting

If the error WARN[0000] Found orphan containers is encountered, use the --remove orphans flag on startup.

docker compose -f docker-compose.yml -f docker-compose-start.yml up -d --remove-orphans

VScode/Xdebug setup

The PHP Debug plugin is required. On the debug tab click Create a launch.json file and select type php.

You can replace the contents of launch.json with the following:

{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html/wp-content/plugins/ucsc-gutenberg-blocks": "${workspaceRoot}"
},
"hostname": "wp-dev.ucsc"
}
]
}

About

A Docker WordPress Local Environment with HTTPS & LDAP

Resources

Stars

3 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

Docker Environment for UCSC WordPress theme and plugins

How this environment works

This is a home-rolled Docker Compose environment for local development. It is not@wordpress/env (wp-env), notLocal (LocalWP), not ddev, and not WP Engine's local tooling. There is no framework CLI — the whole lifecycle is plain docker compose against the compose files in this repo, with WP-CLI run inside a container.

Why home-rolled: the Campus Directory block needs the PHP LDAP extension (and a UCSC VPN connection to reach the LDAP server). Off-the-shelf runtimes did not cleanly support a custom LDAP-enabled PHP image, so this repo ships its own image and compose set instead.

What's in the repo:

FileRole
DockerfileBuilds the wp service from wordpress:6.5.5-php8.1-apache, adding the PHP LDAP extension and Xdebug.
docker-compose.ymlBase stack: server (nginx 1.19), db (mysql 8.0), wp (built from Dockerfile), wpcli (wordpress:cli-php8.1).
docker-compose-start.ymlDev/watch overlay — adds the Node build/watch services for the theme and the blocks plugin.
docker-compose-install.ymlOne-shot bootstrap jobs: theme_composer_install, theme_npm_install, plugin_npm_install, wordpress_install.
setup.shClones the theme and product plugins into public/wp-content/.
.env.example.txtCopied to .env during first-time setup.
# base WordPress stack only
docker compose up -d
# base stack + Node dev/watch environments (theme + blocks plugin)
docker compose -f docker-compose.yml -f docker-compose-start.yml up -d

Important

This Docker stack is the local development environment only. The real WordPress site is production and is not this stack. Run all builds, tests, and PHP through the containers (e.g. docker compose exec wpcli wp <command>) — not host Node/PHP/Composer.

The step-by-step setup below walks through this from a clean checkout.

Prerequisites

  1. The instructions assume you have git and Docker installed. Have the docker app open while going through the steps.
  2. You need a UCSC VPN connection to use the Campus Directory block in the UCSC Gutenberg Blocks plugin.

Setup

  1. Go to your terminal and run this command to clone this repo

    • git clone https://github.com/ucsc/wp-dev.ucsc.git
    • cd into the folder cd wp-dev.ucsc
  2. Edit your hosts file by running sudo nano /etc/hosts in your terminal and add 127.0.0.1 wp-dev.ucsc

    • On Mac OS do ctrl+O to writeout and hit enter on your keyboard
    • Then hit ctrl+X to exit
    • You have now successfully edited you host file.
  3. Change .env.example.txt to .env by following these steps:

    • cd into the folder cd wp-dev.ucsc if you are not in it already
    • Run the command ls -a to see hidden files and verify there is a file called .env.example.txt
    • Run this command to change the name to .env cp .env.example.txt .env
    • Run ls -a to verify the name of the file has changed to .env
  4. In the wp-dev.ucsc directory build and start the WordPress server with HTTPS & PHP LDAP module (Allow time for this command to finish)

    • docker compose up -d to start the WordPress server environment OR
    • docker compose -f docker-compose.yml -f docker-compose-start.yml up -d to start the WordPress server environment AND the Node development environments for the theme and blocks plugin
    • Once this is finished running you should have a total of 5 docker containers up and running. You can verify this by opening up the docker app and making sure there is a green dot next to each container.
    • Troubleshooting: If there is not a green dot next to each container then here is what you should do: select all the containers in your docker app and delete them all. Once all the containers have been deleted go to your terminal in the wp-dev.ucsc directory and run docker compose up -d again. This should solve the issue and have all 5 containers up and running succesfully.

Important

Check that a wp-config.php file exists in the ./public/ folder before proceeding

  1. Run the following script to clone the theme and plugins to the correct project directories.

    • ./setup.sh
  2. Next we install WordPress, activate the theme & plugin, run composer install on the theme as well as npm install on both the plugin and the theme

    • docker compose -f docker-compose-install.yml run theme_composer_install
    • docker compose -f docker-compose-install.yml run theme_npm_install
    • docker compose -f docker-compose-install.yml run plugin_npm_install (may take up to 2 minutes to complete)
    • docker compose -f docker-compose-install.yml run wordpress_install

Your installation is now complete.

Troubleshooting: If there is not a green dot next to each container then here is what you should do: select all the containers in your docker app and delete them all. Once all the containers have been deleted go to your terminal in the wp-dev.ucsc directory and run docker compose up -d again. This should solve the issue and have all 5 containers up and running succesfully.

Running the Docker services for development

Now that WordPress is installed and the plugins and theme are built, we can start watching for changes to code and rebuild when necessary

  • Start the WordPress server environment
    • docker compose up -d OR
  • Start the WordPress server environment AND the Node development environments for the theme and blocks plugin
    • docker compose -f docker-compose.yml -f docker-compose-start.yml up -d

Tip

Swap up with down in the commands above to stop your containers. You must run both commands to start and stop the development environments.

In Your Browser

At this point you should be able to visit https://wp-dev.ucsc/wp-admin in a browser. In Google Chrome you will get a error saying "Your connection is not private", this is due to the local certificates. You can click Advanced -> proceed to wp-dev.ucsc. To login:

  • username: admin
  • password password

Tip

  • You can run WP-CLI commands with docker exec ${NAME}-cli wp <COMMAND>
  • ${NAME} is what you used in your .env file

Troubleshooting

If the error WARN[0000] Found orphan containers is encountered, use the --remove orphans flag on startup.

docker compose -f docker-compose.yml -f docker-compose-start.yml up -d --remove-orphans

VScode/Xdebug setup

The PHP Debug plugin is required. On the debug tab click Create a launch.json file and select type php.

You can replace the contents of launch.json with the following:

{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html/wp-content/plugins/ucsc-gutenberg-blocks": "${workspaceRoot}"
},
"hostname": "wp-dev.ucsc"
}
]
}

About

A Docker WordPress Local Environment with HTTPS & LDAP

Resources

Stars

3 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

Docker Environment for UCSC WordPress theme and plugins

How this environment works

This is a home-rolled Docker Compose environment for local development. It is not@wordpress/env (wp-env), notLocal (LocalWP), not ddev, and not WP Engine's local tooling. There is no framework CLI — the whole lifecycle is plain docker compose against the compose files in this repo, with WP-CLI run inside a container.

Why home-rolled: the Campus Directory block needs the PHP LDAP extension (and a UCSC VPN connection to reach the LDAP server). Off-the-shelf runtimes did not cleanly support a custom LDAP-enabled PHP image, so this repo ships its own image and compose set instead.

What's in the repo:

FileRole
DockerfileBuilds the wp service from wordpress:6.5.5-php8.1-apache, adding the PHP LDAP extension and Xdebug.
docker-compose.ymlBase stack: server (nginx 1.19), db (mysql 8.0), wp (built from Dockerfile), wpcli (wordpress:cli-php8.1).
docker-compose-start.ymlDev/watch overlay — adds the Node build/watch services for the theme and the blocks plugin.
docker-compose-install.ymlOne-shot bootstrap jobs: theme_composer_install, theme_npm_install, plugin_npm_install, wordpress_install.
setup.shClones the theme and product plugins into public/wp-content/.
.env.example.txtCopied to .env during first-time setup.
# base WordPress stack only
docker compose up -d
# base stack + Node dev/watch environments (theme + blocks plugin)
docker compose -f docker-compose.yml -f docker-compose-start.yml up -d

Important

This Docker stack is the local development environment only. The real WordPress site is production and is not this stack. Run all builds, tests, and PHP through the containers (e.g. docker compose exec wpcli wp <command>) — not host Node/PHP/Composer.

The step-by-step setup below walks through this from a clean checkout.

Prerequisites

  1. The instructions assume you have git and Docker installed. Have the docker app open while going through the steps.
  2. You need a UCSC VPN connection to use the Campus Directory block in the UCSC Gutenberg Blocks plugin.

Setup

  1. Go to your terminal and run this command to clone this repo

    • git clone https://github.com/ucsc/wp-dev.ucsc.git
    • cd into the folder cd wp-dev.ucsc
  2. Edit your hosts file by running sudo nano /etc/hosts in your terminal and add 127.0.0.1 wp-dev.ucsc

    • On Mac OS do ctrl+O to writeout and hit enter on your keyboard
    • Then hit ctrl+X to exit
    • You have now successfully edited you host file.
  3. Change .env.example.txt to .env by following these steps:

    • cd into the folder cd wp-dev.ucsc if you are not in it already
    • Run the command ls -a to see hidden files and verify there is a file called .env.example.txt
    • Run this command to change the name to .env cp .env.example.txt .env
    • Run ls -a to verify the name of the file has changed to .env
  4. In the wp-dev.ucsc directory build and start the WordPress server with HTTPS & PHP LDAP module (Allow time for this command to finish)

    • docker compose up -d to start the WordPress server environment OR
    • docker compose -f docker-compose.yml -f docker-compose-start.yml up -d to start the WordPress server environment AND the Node development environments for the theme and blocks plugin
    • Once this is finished running you should have a total of 5 docker containers up and running. You can verify this by opening up the docker app and making sure there is a green dot next to each container.
    • Troubleshooting: If there is not a green dot next to each container then here is what you should do: select all the containers in your docker app and delete them all. Once all the containers have been deleted go to your terminal in the wp-dev.ucsc directory and run docker compose up -d again. This should solve the issue and have all 5 containers up and running succesfully.

Important

Check that a wp-config.php file exists in the ./public/ folder before proceeding

  1. Run the following script to clone the theme and plugins to the correct project directories.

    • ./setup.sh
  2. Next we install WordPress, activate the theme & plugin, run composer install on the theme as well as npm install on both the plugin and the theme

    • docker compose -f docker-compose-install.yml run theme_composer_install
    • docker compose -f docker-compose-install.yml run theme_npm_install
    • docker compose -f docker-compose-install.yml run plugin_npm_install (may take up to 2 minutes to complete)
    • docker compose -f docker-compose-install.yml run wordpress_install

Your installation is now complete.

Troubleshooting: If there is not a green dot next to each container then here is what you should do: select all the containers in your docker app and delete them all. Once all the containers have been deleted go to your terminal in the wp-dev.ucsc directory and run docker compose up -d again. This should solve the issue and have all 5 containers up and running succesfully.

Running the Docker services for development

Now that WordPress is installed and the plugins and theme are built, we can start watching for changes to code and rebuild when necessary

  • Start the WordPress server environment
    • docker compose up -d OR
  • Start the WordPress server environment AND the Node development environments for the theme and blocks plugin
    • docker compose -f docker-compose.yml -f docker-compose-start.yml up -d

Tip

Swap up with down in the commands above to stop your containers. You must run both commands to start and stop the development environments.

In Your Browser

At this point you should be able to visit https://wp-dev.ucsc/wp-admin in a browser. In Google Chrome you will get a error saying "Your connection is not private", this is due to the local certificates. You can click Advanced -> proceed to wp-dev.ucsc. To login:

  • username: admin
  • password password

Tip

  • You can run WP-CLI commands with docker exec ${NAME}-cli wp <COMMAND>
  • ${NAME} is what you used in your .env file

Troubleshooting

If the error WARN[0000] Found orphan containers is encountered, use the --remove orphans flag on startup.

docker compose -f docker-compose.yml -f docker-compose-start.yml up -d --remove-orphans

VScode/Xdebug setup

The PHP Debug plugin is required. On the debug tab click Create a launch.json file and select type php.

You can replace the contents of launch.json with the following:

{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html/wp-content/plugins/ucsc-gutenberg-blocks": "${workspaceRoot}"
},
"hostname": "wp-dev.ucsc"
}
]
}

About

A Docker WordPress Local Environment with HTTPS & LDAP

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages