Skip to main content

Software stacks

Everything that can run on your machines, the versions on offer, and which parts you choose.

A stack is the set of services an environment runs. Some of it arrives with your project type and some of it you pick.

#What arrives with the project type

You choose a project type — Drupal, Laravel, WordPress, PHP, Go or Node.js — and the web bundle comes with it, whole:

  • the runtime for that language: PHP-FPM, a Node.js server, or your Go binary
  • Nginx, serving static files and passing requests to PHP — PHP projects only, because a Node or Go application is its own web server
  • a queue worker container — Laravel only, where the framework has one
  • OpenSMTPD, so the application can send mail

The schedule comes with it too, but not as a container. Your framework's cron runs on the machine itself, against the application that is already running there — see vallic.yaml for declaring your own jobs.

These are not tick-boxes. A stack missing any of them is not a working site, and asking somebody to tick five boxes that must all be ticked is asking them to get it wrong. They run on the machines you already pay for, at no extra charge.

Every PHP project — Drupal, Laravel, WordPress or plain PHP — runs on the same PHP-FPM image. What differs between them is not the image but what the platform sets around it: the Nginx configuration, the document root, the default cron and the directories kept between releases.

#What you choose

For Drupal, Laravel and WordPress two are required, because there is no sensible default:

  • A database. MariaDB, MySQL or PostgreSQL. Some applications want one, some another, and guessing wrong is a migration. Choosing MySQL or PostgreSQL replaces MariaDB rather than adding to it — you never run two.
  • A cache. Redis, Valkey or Memcached — one of them.

A PHP, Go or Node.js project needs neither, and gets either only by asking.

Your database, its user and its password are created for that environment alone, and your application is handed them in its environment file. You never set them and you never need to know them.

The rest are optional and cost a machine or a container each:

  • Search — Solr or Meilisearch, one at a time
  • Queue — RabbitMQ, when jobs need a real broker rather than the database
  • Proxy — Varnish, in front of the web servers
  • Build tools — Node.js for builds, for a PHP site whose theme or assets need npm. It runs only during a build, never beside the site

#Everything, with versions

The version in bold is what you get if you do not choose one. This table is built from the same catalogue the configurator reads, so it is never out of date.

Service Kind What it does Versions
Go Application A compiled Go binary serving its own HTTP. Like Node it is the web server as well as the application, and like Node it replaces PHP-FPM and nginx rather than joining them. 1.27.0, 1.26.7, 1.26.6
Node.js Application A Node application serving its own HTTP — Next.js, Nuxt, Express or anything else that listens on a port. Replaces PHP-FPM and nginx rather than joining them: it is the web server as well as the application. 26.10, 24.21, 22.23, 26.8, 24.20
PHP-FPM Application The platform's PHP-FPM image, for every PHP project: Drupal, WordPress, Laravel or anything else. Drush and wp-cli come with the release, not the image. 8.5, 8.4, 8.3, 8.2
MariaDB Database The database. Moves to its own server in the split-db topology; the service is the same either way. 11.8, 11.4, 10.11
MySQL 8 Database Oracle’s MySQL rather than MariaDB. The same wire protocol and the same driver; chosen where an application or a team is committed to MySQL itself. 8.0
PostgreSQL Database The other relational database. Chosen instead of MariaDB, never beside it. 18.6, 18.4, 18.3
Queue worker Application Laravel's queue worker. The same container again, running the worker. —
Nginx Application Serves static files and passes PHP to FPM. Joins the host edge network so the shared proxy can route to it. 1.31, 1.30, 1.29
Valkey Cache Cache and sessions. Not required for more than one web node — sessions in the database work across machines too — but faster for both. 9.0, 8.1, 8.0
Redis Cache In-memory cache. Valkey is the fork most stacks now take; this is here for what expects Redis by name. 8.6, 8.4, 8.2
Memcached Cache A simpler cache than Redis: keys and values, nothing else, and nothing kept when it restarts. 1.6, 1.5, 1.4
Meilisearch Search Search without ZooKeeper beside it. One container where Solr is two. v1.53.1, v1.53.0, v1.52.3
RabbitMQ Background work A message broker for work that outlives the request that asked for it. 4.3.5, 4.3.4, 4.3.3
Varnish Reverse proxy Varnish, as wodby now ships it. Caches whole responses in front of whatever answers for the site — nginx for a PHP application, the application itself for Node.js or Go — so a hit never reaches it at all. 8.0, 6.0
Solr Search Search. Needs zookeeper, which is added automatically. 10.0, 9.10, 9.9
ZooKeeper Search Coordination for Solr. Never selected on its own; Solr pulls it in. 3.9
OpenSMTPD Application Outbound mail relay for environments not using a hosted provider. 7.8, 7.6, 7.5
Node.js Build tools Node.js and npm for build steps — compiling a theme, bundling front-end assets. A tool the build runs in, not a container that runs beside the site: nothing of it is started, and it belongs to no machine. 26.10, 24.21, 22.23, 26.8, 24.20

Each has its own page with the full version list, which of them are on their way out, and the variables you may set on it. They are the pages under Software in the sidebar.

#Changing a version

Versions are per environment, so a runtime or database upgrade is something you try on staging first. Staging is an environment you add to a project, on either plan — see Environments. Without one, the first environment to run a new version is production.

Data on disk survives a container image changing — the database keeps its files outside the container precisely so that upgrading the image is not a restore from backup. Downgrading is a different matter: a database that has opened its files with a newer version will usually refuse an older one, so treat a major version change as one-way unless you have checked otherwise.

Next

Environments covers where these versions are set.