Hosted Apache Solr now supports Drupal Search API 8.x-2.x, Solr 7.x
Earlier this year, I completely revamped Hosted Apache Solr's architecture , making it more resilient, more scalable, and better able to support having different Solr versions and configurations per customer.
Today I'm happy to officially announce support for Solr 7.x (in addition to 4.x). This means that no matter what version of Drupal you're on (6, 7, or 8), and no matter what Solr module/version you use (Apache Solr Search or Search API Solr 1

The best way to get the full PHP version string
Recently, to automate building, tagging, and pushing my geerlingguy/php-apache Docker Hub image ( see this issue ), I needed to find a way to reliably determine the PHP major.minor.release version string. You'd think this would be simple.
Well, using Docker, I would run the image and then try:
# php --versionPHP 7.3.0-1+0~20181206202713.23
Deploying a React single-page web app to Kubernetes
React seems to have taken the front-end development community by storm, and is extremely popular for web UIs.
It's development model is a breath of fresh air compared to many other tools: you just clone your app, and as long as you have Node.js installed in your environment, to start developing you run (either with npm or yarn or whatever today's most popular package manager is):
yarn installyarn serveAnd then you have a local development server running your code, which updates
Testing the 'Add user' and 'Edit account' forms in Drupal 8 with Behat
On a recent project, I needed to add some behavioral tests to cover the functionality of the Password Policy module. I seem to be a sucker for pain, because often I choose to test the things it seems there's no documentation onâlike testing the functionality of the partially-Javascript-powered password fields on the user account forms.
In this case, I was presented with two challenges:
- I needed to run one scenario where a user edits his/her own password, and must follow the
Analyzing a MySQL slow query log with pt-query-digest
There are times when you may notice your MySQL or MariaDB database server getting very slow. Usually, it's a very stressful time, as it means your site or application is also getting very slow since the underlying database is slow. And then when you dig in, you notice that logs are filling upâand in MySQL's case, the slow query log is often a canary in a coal mine which can indicate potential performance issues (or highlight active performance issues).
Butâ
Running Drupal Cron Jobs in Kubernetes
There are a number of things you have to do to make Drupal a first-class citizen inside a Kubernetes cluster, like adding a shared filesystem (e.g. PV/PVC over networked file share) for the files directory (which can contain generated files like image derivatives, generated PHP, and twig template caches), and setting up containers to use environment variables for connection details (instead of hard-coding things in settings.php).
But another thing which you should do for better performance and traceability
Nginx serving up the wrong site content for a Drupal multisite install with https
I had a 'fun' and puzzling scenario present itself recently as I finished moving more of my Drupal multisite installations over to HTTPS using Let's Encrypt certificates. I've been running this websiteâalong with six other Drupal 7 sitesâon an Nginx installation for years. A few of the multisite installs use bare domains, (e.g. jeffgeerling.com instead of www. jeffgeerling.com), and because of that, I have some http redirects on Nginx to make
Decoding Kubernetes Ingress auth Secrets
Update: In the comments, the following one-liner is suggested by Matt T if you have
jqinstalled (a handy utility if there ever was one!):
kubectl get secret my-secret -o json | jq '.data | map_values(@base64d)'
I figured it would be handy to have a quick reference for this, since I'll probably forget certain secrets many, many times in the future (I'm like that, I guess):
I
Real World DevOps
This blog post contains a written transcript of my NEDCamp 2018 keynote, Real World DevOps , edited to match the style of this blog. Accompanying resources: presentation slides , video .

I'm Jeff Geerling; you probably know that because my name appears in huge letters at the top of every page on this site, including the post you're reading right now. I currently work at Acquia as a Senior Technical Architect, building hosting infrastructure projects using some buzzword-worthy tech like Kubernetes, AWS,
Install kubectl in your Docker image, the easy way
Most of the time, when I install software on my Docker images, I add a rather hairy RUN command which does something like:
- Install some dependencies for key management.
- Add a GPG key for a new software repository.
- Install software from that new software repository.
- Clean up apt/yum/dnf caches to save a little space.
This is all well and good; and this is the most recommended way to install kubectl in most situations, but it's not without it's drawbacks:
- You have to