diff --git a/AGENTS.md b/AGENTS.md
index e869b89bd..af40e7fa1 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -9,7 +9,6 @@ You are a highly skilled PHP system administrator tasked with maintaining open s
- S6 Overlay
- Nginx
- Apache
- - NGINX Unit
- PHP-FPM
2. Development Guidelines:
diff --git a/README.md b/README.md
index 472db29d0..d459912a2 100644
--- a/README.md
+++ b/README.md
@@ -51,12 +51,12 @@ Want to see how easy it is? Our installation guide walks you through creating yo
### Quick Example
-Here's what a complete Laravel setup with NGINX + PHP 8.4 looks like:
+Here's what a complete Laravel setup with NGINX + PHP 8.5 looks like:
```yml
services:
php:
- image: serversideup/php:8.4-fpm-nginx
+ image: serversideup/php:8.5-fpm-nginx
ports:
- "80:8080"
environment:
@@ -86,30 +86,30 @@ serversideup/php:{{version}}-{{variation-name}}
| Variation | Best For | Example |
|-----------|----------|---------|
-| **cli** | CLI scripts, cron jobs, queues | `serversideup/php:8.4-cli` |
-| **fpm** | Custom web server setup | `serversideup/php:8.4-fpm` |
-| **fpm-apache** | Apache-based deployments | `serversideup/php:8.4-fpm-apache` |
-| **fpm-nginx** | Stable and performant web server | `serversideup/php:8.4-fpm-nginx` |
-| **frankenphp** | Modern, high-performance apps with worker mode | `serversideup/php:8.4-frankenphp` |
+| **cli** | CLI scripts, cron jobs, queues | `serversideup/php:8.5-cli` |
+| **fpm** | Custom web server setup | `serversideup/php:8.5-fpm` |
+| **fpm-apache** | Apache-based deployments | `serversideup/php:8.5-fpm-apache` |
+| **fpm-nginx** | Stable and performant web server | `serversideup/php:8.5-fpm-nginx` |
+| **frankenphp** | Modern, high-performance apps with worker mode | `serversideup/php:8.5-frankenphp` |
### Supported PHP Versions & Platforms
> [!NOTE]
> All images are available on [**Docker Hub**](https://hub.docker.com/r/serversideup/php/) and [**GitHub Packages**](https://github.com/serversideup/docker-php/pkgs/container/php).
-We support **PHP 7.4 through 8.4** with both **Debian** and **Alpine** base images.
+We support **PHP 7.4 through 8.5** with both **Debian** and **Alpine** base images.
[Learn More About Choosing an Image β](https://serversideup.net/open-source/docker-php/docs/getting-started/choosing-an-image)
| βοΈ Variation | π Version |
| ------------ | ---------- |
-| cli | **Debian Based**
[](https://hub.docker.com/r/serversideup/php/tags?name=8.4-cli&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.3-cli&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.2-cli&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.1-cli&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.0-cli&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=7.4-cli&page=1&ordering=-name)
**Alpine Based**
[](https://hub.docker.com/r/serversideup/php/tags?name=8.4-cli-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.3-cli&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.2-cli-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.1-cli-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.0-cli-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=7.4-cli-alpine&page=1&ordering=-name) |
-| fpm | **Debian Based**
[](https://hub.docker.com/r/serversideup/php/tags?name=8.4-fpm&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.2-fpm&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.1-fpm&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.0-fpm&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=7.4-fpm&page=1&ordering=-name)
**Alpine Based**
[](https://hub.docker.com/r/serversideup/php/tags?name=8.4-fpm-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.2-fpm-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.1-fpm-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.0-fpm-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=7.4-fpm-alpine&page=1&ordering=-name) |
-| fpm-apache | **Debian Based**
[](https://hub.docker.com/r/serversideup/php/tags?name=8.4-fpm-apache&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm-apache&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.2-fpm-apache&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.1-fpm-apache&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.0-fpm-apache&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=7.4-fpm-apache&page=1&ordering=-name) |
-| fpm-nginx | **Debian Based**
[](https://hub.docker.com/r/serversideup/php/tags?name=8.4-fpm-nginx&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm-nginx&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.2-fpm-nginx&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.1-fpm-nginx&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.0-fpm-nginx&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=7.4-fpm-nginx&page=1&ordering=-name)
**Alpine Based**
[](https://hub.docker.com/r/serversideup/php/tags?name=8.4-fpm-nginx-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm-nginx-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.2-fpm-nginx-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.1-fpm-nginx-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.0-fpm-nginx-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=7.4-fpm-nginx-alpine&page=1&ordering=-name) |
-| frankenphp | **Debian Based**
[](https://hub.docker.com/r/serversideup/php/tags?name=8.4-frankenphp&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.3-frankenphp&page=1&ordering=-name)
**Alpine Based**
[](https://hub.docker.com/r/serversideup/php/tags?name=8.4-frankenphp-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.3-frankenphp-alpine&page=1&ordering=-name) |
-| unit (deprecated) | β οΈ NGINX is no longer maintaining NGINX Unit. It will eventually be removed from this project. [Learn more β](https://serversideup.net/open-source/docker-php/docs/image-variations/unit) |
+| cli | **Debian Based**
[](https://hub.docker.com/r/serversideup/php/tags?name=8.5-cli&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.4-cli&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.3-cli&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.2-cli&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.1-cli&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.0-cli&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=7.4-cli&page=1&ordering=-name)
**Alpine Based**
[](https://hub.docker.com/r/serversideup/php/tags?name=8.5-cli-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.4-cli-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.3-cli&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.2-cli-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.1-cli-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.0-cli-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=7.4-cli-alpine&page=1&ordering=-name) |
+| fpm | **Debian Based**
[](https://hub.docker.com/r/serversideup/php/tags?name=8.5-fpm&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.4-fpm&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.2-fpm&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.1-fpm&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.0-fpm&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=7.4-fpm&page=1&ordering=-name)
**Alpine Based**
[](https://hub.docker.com/r/serversideup/php/tags?name=8.5-fpm-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.4-fpm-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.2-fpm-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.1-fpm-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.0-fpm-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=7.4-fpm-alpine&page=1&ordering=-name) |
+| fpm-apache | **Debian Based**
[](https://hub.docker.com/r/serversideup/php/tags?name=8.5-fpm-apache&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.4-fpm-apache&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm-apache&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.2-fpm-apache&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.1-fpm-apache&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.0-fpm-apache&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=7.4-fpm-apache&page=1&ordering=-name) |
+| fpm-nginx | **Debian Based**
[](https://hub.docker.com/r/serversideup/php/tags?name=8.5-fpm-nginx&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.4-fpm-nginx&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm-nginx&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.2-fpm-nginx&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.1-fpm-nginx&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.0-fpm-nginx&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=7.4-fpm-nginx&page=1&ordering=-name)
**Alpine Based**
[](https://hub.docker.com/r/serversideup/php/tags?name=8.5-fpm-nginx-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.4-fpm-nginx-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm-nginx-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.2-fpm-nginx-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.1-fpm-nginx-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.0-fpm-nginx-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=7.4-fpm-nginx-alpine&page=1&ordering=-name) |
+| frankenphp | **Debian Based**
[](https://hub.docker.com/r/serversideup/php/tags?name=8.5-frankenphp&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.4-frankenphp&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.3-frankenphp&page=1&ordering=-name)
**Alpine Based**
[](https://hub.docker.com/r/serversideup/php/tags?name=8.5-frankenphp-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.4-frankenphp-alpine&page=1&ordering=-name)
[](https://hub.docker.com/r/serversideup/php/tags?name=8.3-frankenphp-alpine&page=1&ordering=-name) |
+| unit (deprecated) | β οΈ NGINX is no longer maintaining NGINX Unit. Updates have been removed from this project. [Learn more β](https://serversideup.net/open-source/docker-php/docs/image-variations/unit) |
## Professional Support
Need help integrating Docker with your PHP application?
diff --git a/SECURITY.md b/SECURITY.md
index cd8c266c4..a88ff762b 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -5,10 +5,11 @@ The following versions of PHP are being actively updated:
| PHP Version | Supported |
| ------- | ------------------ |
+| 8.5 | :white_check_mark: Active support |
| 8.4 | :white_check_mark: Active support |
-| 8.3 | :white_check_mark: Active support |
-| 8.2 | :white_check_mark: Active support |
-| 8.1 | :warning: Security updates only |
+| 8.3 | :warning: Security updates only |
+| 8.2 | :warning: Security updates only |
+| 8.1 | :heavy_exclamation_mark: End of life, update ASAP |
| 8.0 | :heavy_exclamation_mark: End of life, update ASAP |
| 7.4 | :heavy_exclamation_mark: End of life, update ASAP |
| 7.3 | :x: Not supported |
diff --git a/docs/content/docs/1.getting-started/2.container-basics.md b/docs/content/docs/1.getting-started/2.container-basics.md
index af5e30ff5..747f57b1a 100644
--- a/docs/content/docs/1.getting-started/2.container-basics.md
+++ b/docs/content/docs/1.getting-started/2.container-basics.md
@@ -18,8 +18,8 @@ There are some important terms to understand when working with containers:
| Term | Definition |
|------|------------|
| Container | A running instance of an image. |
-| Image | A template for a container to start with (ie. `serversideup/php:8.4-frankenphp`). |
-| Tag | A specific version of an image (ie. `8.4-frankenphp`). |
+| Image | A template for a container to start with (ie. `serversideup/php:8.5-frankenphp`). |
+| Tag | A specific version of an image (ie. `8.5-frankenphp`). |
| Registry | A repository of images. This is where users can pull images from to start a container. This can be places like [Docker Hub](https://hub.docker.com/r/serversideup/php) or [GitHub Packages](https://github.com/serversideup/docker-php/pkgs/container/php). |
| Volume | A directory on your host machine that is mounted into a container. This allows you to share files between your host machine and the container. |
| Port | Ports are virtual numbers organizing network data traffic, directing it to the correct application on a device. If you want to expose traffic to work with `http://localhost`, you would map port `80` on your host machine to port `8080` on the container. |
@@ -57,9 +57,9 @@ So although we're going to show you best practices with Docker, this means you'l
If you followed our [installation guide](/docs/getting-started/installation), you've already run containers and seen them in action. Let's break down what actually happened when you ran `docker compose up`.
### Images vs Containers
-Think of an **image** as a blueprint and a **container** as the actual running instance of that blueprint. When you specified `image: serversideup/php:8.4-fpm-nginx` in your `compose.yml`, you told Docker to:
+Think of an **image** as a blueprint and a **container** as the actual running instance of that blueprint. When you specified `image: serversideup/php:8.5-fpm-nginx` in your `compose.yml`, you told Docker to:
-1. Download the `serversideup/php:8.4-fpm-nginx` image (the blueprint)
+1. Download the `serversideup/php:8.5-fpm-nginx` image (the blueprint)
2. Create a container from that image (the running instance)
3. Start the container with your specified configuration
@@ -84,7 +84,7 @@ In your `compose.yml`, when you define a service called `php`, you're telling Do
```yml [compose.yml] {2}
services:
php:
- image: serversideup/php:8.4-fpm-nginx
+ image: serversideup/php:8.5-fpm-nginx
ports:
- 80:8080
```
diff --git a/docs/content/docs/1.getting-started/4.these-images-vs-others.md b/docs/content/docs/1.getting-started/4.these-images-vs-others.md
index 503a07fa4..253f8bfc2 100644
--- a/docs/content/docs/1.getting-started/4.these-images-vs-others.md
+++ b/docs/content/docs/1.getting-started/4.these-images-vs-others.md
@@ -91,7 +91,6 @@ Every image includes production-tuned defaults based on real-world PHP applicati
**Modern Options**
- FrankenPHP support for incredible performance gains (2-3x faster than FPM in many claims made by developers)
-- Native support for NGINX Unit
- HTTP/2 and HTTP/3 ready configurations
::tip
@@ -105,7 +104,7 @@ Stop editing config files. Stop rebuilding images for simple changes. Just set e
```yml [compose.yml] {5-9,11-12}
services:
php:
- image: serversideup/php:8.4-fpm-nginx
+ image: serversideup/php:8.5-fpm-nginx
environment:
# Change any PHP setting with environment variables
PHP_MEMORY_LIMIT: "512M"
@@ -155,7 +154,7 @@ We've done the hard work of optimizing for PHP's most popular frameworks:
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-fpm-nginx
+ image: serversideup/php:8.5-fpm-nginx
environment:
# Run migrations, storage link, caching, and more
AUTORUN_ENABLED: "true"
@@ -192,7 +191,7 @@ Unlike the official PHP images, we include tools you'll actually use:
- Handles all dependencies automatically
```dockerfile [Dockerfile]
-FROM serversideup/php:8.4-cli
+FROM serversideup/php:8.5-cli
# Switch to root to install extensions
USER root
@@ -217,7 +216,6 @@ Choose the right tool for your use case:
- [`fpm-nginx`](/docs/image-variations/fpm-nginx) - PHP-FPM + NGINX (most popular)
- [`fpm-apache`](/docs/image-variations/fpm-apache) - PHP-FPM + Apache
- [`frankenphp`](/docs/image-variations/frankenphp) - Modern, incredibly fast (2-3x FPM performance)
-- [`unit`](/docs/image-variations/unit) - NGINX Unit for high-performance applications (deprecated)
## Real-World Impact
diff --git a/docs/content/docs/1.getting-started/5.choosing-an-image.md b/docs/content/docs/1.getting-started/5.choosing-an-image.md
index 5512fed40..509634d6d 100644
--- a/docs/content/docs/1.getting-started/5.choosing-an-image.md
+++ b/docs/content/docs/1.getting-started/5.choosing-an-image.md
@@ -35,12 +35,12 @@ If you don't specify a variation, it defaults to `cli` and the latest supported
Our most popular tags include:
| βοΈ Variation | π Version |
| ------------ | ---------- |
-| cli | **Debian Based** [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.4-cli&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.3-cli&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.2-cli&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.1-cli&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.0-cli&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=7.4-cli&page=1&ordering=-name)
**Alpine Based** [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.4-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.3-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.2-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.1-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.0-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=7.4-cli-alpine&page=1&ordering=-name) |
-| fpm | **Debian Based** [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.4-fpm&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.2-fpm&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.1-fpm&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.0-fpm&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=7.4-fpm&page=1&ordering=-name)
**Alpine Based** [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.4-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.2-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.1-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.0-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=7.4-fpm-alpine&page=1&ordering=-name) |
-| fpm-apache | **Debian Based** [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.4-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.2-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.1-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.0-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=7.4-fpm-apache&page=1&ordering=-name) |
-| fpm-nginx | **Debian Based** [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.4-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.2-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.1-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.0-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=7.4-fpm-nginx&page=1&ordering=-name)
**Alpine Based** [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.4-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.2-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.1-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.0-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=7.4-fpm-nginx-alpine&page=1&ordering=-name) |
-| frankenphp | **Debian Based** [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.4-frankenphp&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.3-frankenphp&page=1&ordering=-name)
**Alpine Based**
β οΈ Some users are experiencing [known performance issues](https://frankenphp.dev/docs/known-issues/){target="_blank"} with FrankenPHP on Alpine. Consider using the Debian version.
[{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.4-frankenphp-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.3-frankenphp-alpine&page=1&ordering=-name) |
-| unit (deprecated) | NGINX stopped supporting NGINX Unit and archived the project. NGINX Unit will eventually be removed from our project. [Learn more β](/docs/image-variations/unit/) |
+| cli | **Debian Based** [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.5-cli&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.4-cli&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.3-cli&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.2-cli&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.1-cli&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.0-cli&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=7.4-cli&page=1&ordering=-name)
**Alpine Based** [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.5-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.4-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.3-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.2-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.1-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.0-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=7.4-cli-alpine&page=1&ordering=-name) |
+| fpm | **Debian Based** [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.5-fpm&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.4-fpm&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.2-fpm&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.1-fpm&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.0-fpm&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=7.4-fpm&page=1&ordering=-name)
**Alpine Based** [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.5-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.4-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.2-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.1-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.0-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=7.4-fpm-alpine&page=1&ordering=-name) |
+| fpm-apache | **Debian Based** [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.5-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.4-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.2-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.1-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.0-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=7.4-fpm-apache&page=1&ordering=-name) |
+| fpm-nginx | **Debian Based** [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.5-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.4-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.2-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.1-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.0-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=7.4-fpm-nginx&page=1&ordering=-name)
**Alpine Based** [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.5-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.4-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.3-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.2-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.1-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.0-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=7.4-fpm-nginx-alpine&page=1&ordering=-name) |
+| frankenphp | **Debian Based** [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.5-frankenphp&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.4-frankenphp&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.3-frankenphp&page=1&ordering=-name)
**Alpine Based**
β οΈ Some users are experiencing [known performance issues](https://frankenphp.dev/docs/known-issues/){target="_blank"} with FrankenPHP on Alpine. Consider using the Debian version.
[{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.5-frankenphp-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.4-frankenphp-alpine&page=1&ordering=-name) [{.h-5.w-auto :zoom=false}](https://hub.docker.com/r/serversideup/php/tags?name=8.3-frankenphp-alpine&page=1&ordering=-name) |
+| unit (deprecated) | NGINX stopped supporting NGINX Unit it has been removed from our project. [Learn more β](/docs/image-variations/unit/) |
## The full tag schema
Our tagging process is quite flexible, and it can become quite complex, but don't worry -- we've spent a ton of time applying sensible defaults to give you the best experience.
@@ -79,7 +79,6 @@ Choose from several variations to suit your needs. Each variation is optimized f
| `fpm-apache` | Combines PHP-FPM with Apache as a reverse proxy. Ideal for running WordPress with Docker. |
| `fpm-nginx` | Combines PHP-FPM with NGINX as a reverse proxy. This is the traditional setup widely adopted for modern PHP applications, including Laravel. |
| `frankenphp` | Modern application server built on Caddy that runs everything in a single process. Ideal for Laravel/Symfony applications with worker mode support, automatic HTTPS, and HTTP/2 and HTTP/3 protocols. |
-| `unit`
(deprecated) | Uses NGINX Unit as a modern application server that runs everything in a single process. Consider migrating to FrankenPHP for a modern alternative. |
### CLI
The CLI variation is a minimal image designed for running PHP from the command line only. It does not include a web server. Use this variation when you need a disposable and repeatable method for easily running PHP scripts from your terminal.
@@ -117,11 +116,9 @@ Use this variation for Laravel or Symfony applications that can benefit from wor
### Unit (deprecated)
::warning{to="https://github.com/nginx/unit?tab=readme-ov-file#nginx-unit" target="_blank"}
-In October 2025, NGINX stopped supporting NGINX Unit and archived the project. NGINX Unit will eventually be removed from our project. [See the official announcement β](https://github.com/nginx/unit?tab=readme-ov-file#nginx-unit)
+In October 2025, NGINX stopped supporting NGINX Unit and archived the project. NGINX Unit has been removed from our project. [See the official announcement β](https://github.com/nginx/unit?tab=readme-ov-file#nginx-unit)
::
-The Unit variation uses NGINX Unit as an application server that runs everything in a single process. Since NGINX Unit is no longer maintained, consider migrating to FrankenPHP for a single-process alternative.
-
## Operating Systems
Choosing an operating system comes down to a few preferences, but ultimately you need to make sure your dependencies are available for the operating system you choose.
diff --git a/docs/content/docs/1.getting-started/6.default-configurations.md b/docs/content/docs/1.getting-started/6.default-configurations.md
index eea642749..3f06a25f4 100644
--- a/docs/content/docs/1.getting-started/6.default-configurations.md
+++ b/docs/content/docs/1.getting-started/6.default-configurations.md
@@ -34,7 +34,6 @@ On Linux systems, only root can bind to ports below 1024 (like 80 and 443). Sinc
| fpm | 9000 |
| fpm-nginx | HTTP: 8080, HTTPS: 8443 |
| fpm-apache | HTTP: 8080, HTTPS: 8443 |
-| unit | HTTP: 8080, HTTPS: 8443 |
| frankenphp | HTTP: 8080, HTTPS: 8443 |
#### File permissions to be aware of
@@ -53,7 +52,7 @@ Don't worryβyou have two easy options to run your app on the standard web port
Use Docker's built-in port mapping to route traffic from port 80/443 on your host to the container's higher ports:
```bash [Terminal]
-docker run -p 80:8080 -p 443:8443 serversideup/php:8.4-fpm-nginx
+docker run -p 80:8080 -p 443:8443 serversideup/php:8.5-fpm-nginx
```
This tells Docker: "Take traffic coming to port 80 on my machine and send it to port 8080 in the container."
@@ -126,7 +125,7 @@ The following packages are installed by default:
## Health Checks
-By default, all health checks for web servers (Apache, Unit, NGINX, etc.) are located at `/healthcheck`. You should receive an `OK` response if the container is healthy.
+By default, all health checks for web servers (Apache, NGINX, FrankenPHP, etc.) are located at `/healthcheck`. You should receive an `OK` response if the container is healthy.
For our `fpm` variation, we use the [`php-fpm-healthcheck`](https://github.com/renatomefi/php-fpm-healthcheck) script to verify the health of PHP-FPM. This script is located at `/usr/local/bin/php-fpm-healthcheck`.
@@ -146,7 +145,6 @@ We also provide a few default scripts to help you get started.
| `1-log-output-level.sh` | Sets PHP log output level to match `LOG_OUTPUT_LEVEL` | all |
| `5-generate-ssl.sh` | Generates a self-signed SSL certificate and key for the container. | fpm-nginx, fpm-apache, frankenphp |
| `5-fpm-pool-user.sh` | Sets the user and group of the PHP-FPM child processes to the values of `PHP_FPM_CHILD_PROCESS_USER` and `PHP_FPM_CHILD_PROCESS_GROUP` if the container is running as root. | fpm |
-| `10-init-unit.sh` | Processes Unit templates, configures SSL (if enabled), and prepares NGINX Unit for launch | unit |
| `10-init-webserver-config.sh` | Processes web server configuration templates, configures SSL (if enabled), and prepares web server for launch | *-nginx
*-apache |
| `50-laravel-automations.sh` | If `AUTORUN_ENABLED` is set to true, and a Laravel installation is detected, the following commands will automatically execute on container start:
- `php artisan config:cache`
- `php artisan route:cache`
- `php artisan view:cache`
- `php artisan event:cache`
- `php artisan migrate --force` | all |
diff --git a/docs/content/docs/1.getting-started/7.upgrade-guide.md b/docs/content/docs/1.getting-started/7.upgrade-guide.md
index 7ebd1c973..757848aa5 100644
--- a/docs/content/docs/1.getting-started/7.upgrade-guide.md
+++ b/docs/content/docs/1.getting-started/7.upgrade-guide.md
@@ -88,7 +88,7 @@ Simply update your image tags to the latest version. For example:
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-fpm-nginx
+ image: serversideup/php:8.5-fpm-nginx
```
No other changes are required unless you want to take advantage of new features.
@@ -99,7 +99,7 @@ No other changes are required unless you want to take advantage of new features.
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-fpm-nginx
+ image: serversideup/php:8.5-fpm-nginx
environment:
AUTORUN_ENABLED: "true"
AUTORUN_LARAVEL_OPTIMIZE: "true"
@@ -109,7 +109,7 @@ services:
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-frankenphp
+ image: serversideup/php:8.5-frankenphp
ports:
- 80:8080
- 443:8443
diff --git a/docs/content/docs/1.getting-started/99.contributing.md b/docs/content/docs/1.getting-started/99.contributing.md
index 92425ebfa..f45da79ba 100644
--- a/docs/content/docs/1.getting-started/99.contributing.md
+++ b/docs/content/docs/1.getting-started/99.contributing.md
@@ -27,24 +27,23 @@ You must have these installed on your system.
## Running things locally
To run a build, simply run `./scripts/dev.sh` (with Docker Desktop running). This will show you a help menu with all the available options.
-#### Example: Build a Unit image running PHP 8.2.12 on Debian Bookworm
+#### Example: Build a FPM-NGINX image running PHP 8.2.12 on Debian Bookworm
```bash [Terminal]
-bash scripts/dev.sh --variation unit --version 8.2.12 --os bookworm
+bash scripts/dev.sh --variation fpm-nginx --version 8.2.12 --os bookworm
```
-This will build `serversideup/php:8.2.12-unit-bookworm` locally on your machine for testing and inspection.
+This will build `serversideup/php:8.2.12-fpm-nginx-bookworm` locally on your machine for testing and inspection.
### Published Beta Images
We also have beta images that are published to our Docker Hub and GitHub Packages repositories.
-#### Debian Variations
| βοΈ Variation | π Version |
| ------------ | ---------- |
-| cli | **Debian Based** [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.4-cli&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.3-cli&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.2-cli&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.1-cli&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.0-cli&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-7.4-cli&page=1&ordering=-name)
**Alpine Based** [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.4-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.3-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.2-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.1-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.0-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-7.4-cli-alpine&page=1&ordering=-name) |
-| fpm | **Debian Based** [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.4-fpm&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.3-fpm&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.2-fpm&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.1-fpm&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.0-fpm&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-7.4-fpm&page=1&ordering=-name)
**Alpine Based** [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.4-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.3-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.2-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.1-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.0-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-7.4-fpm-alpine&page=1&ordering=-name) |
-| fpm-apache | **Debian Based** [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.4-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.3-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.2-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.1-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.0-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-7.4-fpm-apache&page=1&ordering=-name) |
-| fpm-nginx | **Debian Based** [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.4-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.3-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.2-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.1-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.0-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-7.4-fpm-nginx&page=1&ordering=-name)
**Alpine Based** [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.4-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.3-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.2-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.1-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.0-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-7.4-fpm-nginx-alpine&page=1&ordering=-name) |
-| frankenphp | **Debian Based** [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.4-frankenphp&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.3-frankenphp&page=1&ordering=-name)
**Alpine Based** [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.4-frankenphp-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.3-frankenphp-alpine&page=1&ordering=-name) |
+| cli | **Debian Based** [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.5-cli&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.4-cli&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.3-cli&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.2-cli&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.1-cli&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.0-cli&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-7.4-cli&page=1&ordering=-name)
**Alpine Based** [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.5-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.4-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.3-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.2-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.1-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.0-cli-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-7.4-cli-alpine&page=1&ordering=-name) |
+| fpm | **Debian Based** [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.5-fpm&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.4-fpm&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.3-fpm&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.2-fpm&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.1-fpm&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.0-fpm&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-7.4-fpm&page=1&ordering=-name)
**Alpine Based** [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.5-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.4-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.3-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.2-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.1-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.0-fpm-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-7.4-fpm-alpine&page=1&ordering=-name) |
+| fpm-apache | **Debian Based** [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.5-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.4-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.3-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.2-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.1-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.0-fpm-apache&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-7.4-fpm-apache&page=1&ordering=-name) |
+| fpm-nginx | **Debian Based** [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.5-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.4-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.3-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.2-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.1-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.0-fpm-nginx&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-7.4-fpm-nginx&page=1&ordering=-name)
**Alpine Based** [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.5-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.4-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.3-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.2-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.1-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.0-fpm-nginx-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-7.4-fpm-nginx-alpine&page=1&ordering=-name) |
+| frankenphp | **Debian Based** [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.5-frankenphp&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.4-frankenphp&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.3-frankenphp&page=1&ordering=-name)
**Alpine Based** [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.5-frankenphp-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.4-frankenphp-alpine&page=1&ordering=-name) [{.h-5.w-auto}](https://hub.docker.com/r/serversideup/php/tags?name=beta-8.3-frankenphp-alpine&page=1&ordering=-name) |
#### Running a test web server:
Sometimes you need to just run a test web server locally to see if your changes work. Below is a good example on how to quickly do this.
diff --git a/docs/content/docs/2.image-variations/fpm-apache.md b/docs/content/docs/2.image-variations/fpm-apache.md
index f25d3d301..194245e6c 100644
--- a/docs/content/docs/2.image-variations/fpm-apache.md
+++ b/docs/content/docs/2.image-variations/fpm-apache.md
@@ -79,7 +79,7 @@ Here are a few examples to help you get started with the FPM-Apache variation.
### Docker CLI
```bash [Terminal]
-docker run -p 80:8080 -v $(pwd):/var/www/html/public serversideup/php:8.4-fpm-apache
+docker run -p 80:8080 -v $(pwd):/var/www/html/public serversideup/php:8.5-fpm-apache
```
Your application will be available at `http://localhost`. The default document root is `/var/www/html/public`.
@@ -94,7 +94,7 @@ This is the recommended approach for local development and production deployment
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-fpm-apache
+ image: serversideup/php:8.5-fpm-apache
ports:
- "80:8080"
- "443:8443"
@@ -115,7 +115,7 @@ The FPM-Apache variation is excellent for WordPress hosting:
```yml [compose.yml]
services:
wordpress:
- image: serversideup/php:8.4-fpm-apache
+ image: serversideup/php:8.5-fpm-apache
ports:
- "80:8080"
- "443:8443"
@@ -163,7 +163,7 @@ The FPM-Apache variation includes built-in SSL support with self-signed certific
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-fpm-apache
+ image: serversideup/php:8.5-fpm-apache
ports:
- "8080:8080"
- "8443:8443"
@@ -184,7 +184,7 @@ For production, use your own SSL certificates:
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-fpm-apache
+ image: serversideup/php:8.5-fpm-apache
ports:
- "443:8443"
volumes:
diff --git a/docs/content/docs/2.image-variations/fpm-nginx.md b/docs/content/docs/2.image-variations/fpm-nginx.md
index b69b7cba3..077cb1390 100644
--- a/docs/content/docs/2.image-variations/fpm-nginx.md
+++ b/docs/content/docs/2.image-variations/fpm-nginx.md
@@ -75,7 +75,7 @@ Here are a few examples to help you get started with the FPM-NGINX variation.
### Docker CLI
```bash [Terminal]
-docker run -p 80:8080 -v $(pwd):/var/www/html/public serversideup/php:8.4-fpm-nginx
+docker run -p 80:8080 -v $(pwd):/var/www/html/public serversideup/php:8.5-fpm-nginx
```
Your application will be available at `http://localhost`. The default webroot is `/var/www/html/public`.
@@ -91,7 +91,7 @@ This is the recommended approach for local development and production deployment
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-fpm-nginx
+ image: serversideup/php:8.5-fpm-nginx
ports:
- "80:8080"
volumes:
@@ -110,7 +110,7 @@ The FPM-NGINX variation is perfectly suited for Laravel applications:
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-fpm-nginx
+ image: serversideup/php:8.5-fpm-nginx
ports:
- "80:8080"
- "443:8443"
@@ -163,7 +163,7 @@ The FPM-NGINX variation includes built-in SSL support with self-signed certifica
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-fpm-nginx
+ image: serversideup/php:8.5-fpm-nginx
ports:
- "80:8080"
- "443:8443"
@@ -184,7 +184,7 @@ For production, use your own SSL certificates:
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-fpm-nginx
+ image: serversideup/php:8.5-fpm-nginx
ports:
- "443:8443"
volumes:
@@ -249,7 +249,7 @@ If you're running an application in production, you'll likely want to package yo
services:
php:
# You'll likely replace this with your own custom image name
- image: serversideup/php:8.4-fpm-nginx
+ image: serversideup/php:8.5-fpm-nginx
environment:
# Enable OPcache for production
PHP_OPCACHE_ENABLE: "1"
@@ -264,7 +264,7 @@ services:
services:
php:
# You'll likely replace this with your own custom image name
- image: serversideup/php:8.4-fpm-nginx
+ image: serversideup/php:8.5-fpm-nginx
environment:
# NGINX Settings
NGINX_CLIENT_MAX_BODY_SIZE: "200M"
@@ -300,7 +300,7 @@ You can add custom NGINX server configuration by mounting files:
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-fpm-nginx
+ image: serversideup/php:8.5-fpm-nginx
ports:
- "80:8080"
volumes:
diff --git a/docs/content/docs/2.image-variations/fpm.md b/docs/content/docs/2.image-variations/fpm.md
index 6896e6466..5858e3577 100644
--- a/docs/content/docs/2.image-variations/fpm.md
+++ b/docs/content/docs/2.image-variations/fpm.md
@@ -67,7 +67,7 @@ This example shows a common setup with PHP-FPM in one container and NGINX in ano
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-fpm
+ image: serversideup/php:8.5-fpm
volumes:
- ./:/var/www/html
@@ -119,7 +119,7 @@ The `php-fpm-healthcheck` script can also monitor specific metrics like accepted
```yml [compose.yml]{7-10}
services:
php:
- image: serversideup/php:8.4-fpm
+ image: serversideup/php:8.5-fpm
volumes:
- ./:/var/www/html
healthcheck:
@@ -154,7 +154,7 @@ The FPM variation gives you fine-grained control over PHP process management. He
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-fpm
+ image: serversideup/php:8.5-fpm
environment:
PHP_FPM_PM_CONTROL: "static"
PHP_FPM_PM_MAX_CHILDREN: "50"
@@ -165,7 +165,7 @@ services:
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-fpm
+ image: serversideup/php:8.5-fpm
environment:
PHP_FPM_PM_CONTROL: "ondemand"
PHP_FPM_PM_MAX_CHILDREN: "10"
diff --git a/docs/content/docs/2.image-variations/frankenphp.md b/docs/content/docs/2.image-variations/frankenphp.md
index f3edba26c..40b4b8d4e 100644
--- a/docs/content/docs/2.image-variations/frankenphp.md
+++ b/docs/content/docs/2.image-variations/frankenphp.md
@@ -85,7 +85,7 @@ Health checks are critical for zero-downtime deployments, but the official image
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-frankenphp
+ image: serversideup/php:8.5-frankenphp
environment:
# Use Laravel's built-in health check
HEALTHCHECK_PATH: /up
@@ -222,7 +222,7 @@ Here are a few examples to help you get started with the FrankenPHP variation.
### Docker CLI
```bash [Terminal]
-docker run -p 80:8080 -v $(pwd):/var/www/html/public serversideup/php:8.4-frankenphp
+docker run -p 80:8080 -v $(pwd):/var/www/html/public serversideup/php:8.5-frankenphp
```
Your application will be available at `http://localhost`. The default webroot is `/var/www/html/public`.
@@ -240,7 +240,7 @@ Don't forget to create a `public` directory and put your PHP code in there.
services:
php:
# Choose our PHP version and variation
- image: serversideup/php:8.4-frankenphp
+ image: serversideup/php:8.5-frankenphp
# Expose and map HTTP and HTTPS ports
ports:
- 80:8080
@@ -292,7 +292,7 @@ See our [Configuring SSL](/docs/deployment-and-production/configuring-ssl) guide
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-frankenphp
+ image: serversideup/php:8.5-frankenphp
ports:
- "80:8080"
- "443:8443"
@@ -315,7 +315,7 @@ For local development, use the `SSL_MODE` environment variable:
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-frankenphp
+ image: serversideup/php:8.5-frankenphp
ports:
- "80:8080"
- "443:8443"
@@ -389,7 +389,7 @@ There are a few areas where you can use environment variables to customize your
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-frankenphp
+ image: serversideup/php:8.5-frankenphp
environment:
CADDY_SERVER_EXTRA_DIRECTIVES: |
# Add custom headers
diff --git a/docs/content/docs/2.image-variations/unit.md b/docs/content/docs/2.image-variations/unit.md
index 62652fa36..f31d0a3ef 100644
--- a/docs/content/docs/2.image-variations/unit.md
+++ b/docs/content/docs/2.image-variations/unit.md
@@ -8,7 +8,7 @@ description: 'NGINX Unit has been archived. This guide helps you understand what
In October 2025, NGINX officially archived the NGINX Unit project and stopped all maintenance. If you're seeing this page, you're likely using our Unit-based images and wondering what to do next.
::caution{to="https://github.com/nginx/unit?tab=readme-ov-file#nginx-unit" target="_blank"}
-**The Unit variation is deprecated and will be removed in the next major release.** [View official NGINX announcement β](https://github.com/nginx/unit?tab=readme-ov-file#nginx-unit){target="_blank"}
+**The Unit variation is deprecated and has been removed from our project.** [View official NGINX announcement β](https://github.com/nginx/unit?tab=readme-ov-file#nginx-unit){target="_blank"}
::
**The good news:** Your application will continue to work, and you have time to plan your migration. Below, we'll answer your most important questions and guide you through your options.
@@ -50,8 +50,7 @@ All of these variations are actively maintained and production-ready.
### How urgent is this migration?
**Timeline:**
-- **Now:** Unit images work but receive no updates
-- **Next release:** Unit images will be removed from our project
+- **Now:** You can still pull `serversideup/php:unit` images, but they will not receive any future feature or security updates.
**Recommendation:** Start planning your migration now. Don't rush, but don't delay indefinitely.
diff --git a/docs/content/docs/3.framework-guides/1.laravel/octane.md b/docs/content/docs/3.framework-guides/1.laravel/octane.md
index e5bb948e6..81c150815 100644
--- a/docs/content/docs/3.framework-guides/1.laravel/octane.md
+++ b/docs/content/docs/3.framework-guides/1.laravel/octane.md
@@ -36,7 +36,7 @@ By default, FrankenPHP runs in classic mode. Your compose file might look someth
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-frankenphp
+ image: serversideup/php:8.5-frankenphp
ports:
- "80:8080"
volumes:
@@ -78,7 +78,7 @@ Laravel Octane provides its own Caddyfile. This may cause some of the serverside
```yml [compose.yml]{8-13}
services:
php:
- image: serversideup/php:8.4-frankenphp
+ image: serversideup/php:8.5-frankenphp
ports:
- "80:8080"
volumes:
diff --git a/docs/content/docs/3.framework-guides/2.wordpress/4.using-wordpress-with-docker.md b/docs/content/docs/3.framework-guides/2.wordpress/4.using-wordpress-with-docker.md
index c4276d064..790ee30c5 100644
--- a/docs/content/docs/3.framework-guides/2.wordpress/4.using-wordpress-with-docker.md
+++ b/docs/content/docs/3.framework-guides/2.wordpress/4.using-wordpress-with-docker.md
@@ -91,7 +91,7 @@ Here's a proven WordPress stack running on Docker Swarm that balances containeri
**Infrastructure components:**
1. [Traefik](https://traefik.io/traefik/){target="_blank"} - Automatic SSL with Let's Encrypt and request routing
-2. [serversideup/php:8.4-fpm-apache](https://hub.docker.com/r/serversideup/php/tags?name=fpm-apache){target="_blank"} - PHP with Apache for WordPress compatibility
+2. [serversideup/php:8.5-fpm-apache](https://hub.docker.com/r/serversideup/php/tags?name=fpm-apache){target="_blank"} - PHP with Apache for WordPress compatibility
3. [MariaDB](https://hub.docker.com/_/mariadb){target="_blank"} - MySQL-compatible database without Oracle licensing
::tip
@@ -136,7 +136,7 @@ Treating containers as the runtime environment while keeping WordPress files on
```yml [compose.yml]
services:
wordpress:
- image: serversideup/php:8.4-fpm-apache
+ image: serversideup/php:8.5-fpm-apache
volumes:
- ./:/var/www/html
ports:
diff --git a/docs/content/docs/4.deployment-and-production/3.packaging-your-app-for-deployment.md b/docs/content/docs/4.deployment-and-production/3.packaging-your-app-for-deployment.md
index e28dc12b2..59c9eea8a 100644
--- a/docs/content/docs/4.deployment-and-production/3.packaging-your-app-for-deployment.md
+++ b/docs/content/docs/4.deployment-and-production/3.packaging-your-app-for-deployment.md
@@ -17,7 +17,7 @@ In the [installation guide](/docs/getting-started/installation), your `compose.y
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-fpm-nginx
+ image: serversideup/php:8.5-fpm-nginx
ports:
- 80:8080
volumes:
@@ -33,7 +33,7 @@ This works great for development because:
For production, you'll create a **custom image** that includes your application code:
```dockerfile [Dockerfile]
-FROM serversideup/php:8.4-fpm-nginx
+FROM serversideup/php:8.5-fpm-nginx
# Copy your application code into the image
COPY --chown=www-data:www-data . /var/www/html
@@ -56,7 +56,7 @@ The `Dockerfile` should live at the root of your project, in the same directory
For a simple PHP application, your Dockerfile might look like this:
```dockerfile [Dockerfile]
-FROM serversideup/php:8.4-fpm-nginx
+FROM serversideup/php:8.5-fpm-nginx
# Switch to root to install dependencies and copy files
USER root
@@ -116,7 +116,7 @@ Don't use `latest` tags in production. Use specific versions:
FROM serversideup/php:latest
# Good - explicitly versioned
-FROM serversideup/php:8.4-fpm-nginx
+FROM serversideup/php:8.5-fpm-nginx
```
### 2. Run as non-root user
diff --git a/docs/content/docs/4.deployment-and-production/4.configuring-ssl.md b/docs/content/docs/4.deployment-and-production/4.configuring-ssl.md
index 4b430c655..940688ff5 100644
--- a/docs/content/docs/4.deployment-and-production/4.configuring-ssl.md
+++ b/docs/content/docs/4.deployment-and-production/4.configuring-ssl.md
@@ -115,7 +115,7 @@ Here's an example of directly exposing FrankenPHP to the internet with automatic
```yml [compose.yml]
services:
php:
- image: serversideup/php:8.4-frankenphp
+ image: serversideup/php:8.5-frankenphp
ports:
- 80:8080
- 443:8443
@@ -164,7 +164,7 @@ Set your private key file permissions to `600` (read/write for owner only). Inco
```yml [compose.yml]{8-10,13}
services:
php:
- image: serversideup/php:8.4-fpm-nginx
+ image: serversideup/php:8.5-fpm-nginx
ports:
- 80:8080
- 443:8443
@@ -228,7 +228,7 @@ While browsers will show warnings, self-signed certificates are useful for speci
```yml [compose.yml]{7-9}
services:
php:
- image: serversideup/php:8.4-fpm-nginx
+ image: serversideup/php:8.5-fpm-nginx
ports:
- 80:8080
- 443:8443
diff --git a/docs/content/docs/5.guide/1.migrating-from-official-php-images.md b/docs/content/docs/5.guide/1.migrating-from-official-php-images.md
index 5d9dff012..3d458e54b 100644
--- a/docs/content/docs/5.guide/1.migrating-from-official-php-images.md
+++ b/docs/content/docs/5.guide/1.migrating-from-official-php-images.md
@@ -45,17 +45,17 @@ Review our [choosing an image](/docs/getting-started/choosing-an-image) guide to
#### Update your `Dockerfile` or `compose.yml` file
:::tip
-We simply change `php:8.4-apache` to `serversideup/php:8.4-fpm-apache`
+We simply change `php:8.5-apache` to `serversideup/php:8.5-fpm-apache`
:::
**Dockerfile**
:::code-group
```dockerfile [ORIGINAL: Dockerfile]{1}
-FROM php:8.4-apache
+FROM php:8.5-apache
# Rest of your Dockerfile...
```
```dockerfile [UPDATED: Dockerfile]{1}
-FROM serversideup/php:8.4-fpm-apache
+FROM serversideup/php:8.5-fpm-apache
# Rest of your Dockerfile...
```
@@ -66,7 +66,7 @@ FROM serversideup/php:8.4-fpm-apache
```yml [ORIGINAL: compose.yml]{3,5-6}
services:
php:
- image: php:8.4-apache
+ image: php:8.5-apache
ports:
- 80:80
- 443:443
@@ -74,7 +74,7 @@ services:
```yml [UPDATED: compose.yml]{3,5-6}
services:
php:
- image: serversideup/php:8.4-fpm-apache
+ image: serversideup/php:8.5-fpm-apache
ports:
- 80:8080
- 443:8443
diff --git a/docs/content/docs/5.guide/3.understanding-file-permissions.md b/docs/content/docs/5.guide/3.understanding-file-permissions.md
index 0b26b7096..30abe6585 100644
--- a/docs/content/docs/5.guide/3.understanding-file-permissions.md
+++ b/docs/content/docs/5.guide/3.understanding-file-permissions.md
@@ -27,7 +27,7 @@ It's a bummer that we can only set the user and group ID at build time, but it's
#### How it works
- By default, all our images run `www-data` as the user (`33:33` for Debian and `82:82` for Alpine)
- We provide a script that can be called at build time to change the UID and GID of `www-data` (called `docker-php-serversideup-set-id`)
-- If you need to update permissions of service files (example: NGINX, Apache, Unit, etc), you can run the `docker-php-serversideup-set-file-permissions` at build. This will automatically detect the service and update the file permissions accordingly.
+- If you need to update permissions of service files (example: NGINX, Apache, FrankenPHP, etc), you can run the `docker-php-serversideup-set-file-permissions` at build. This will automatically detect the service and update the file permissions accordingly.
- We will use a multi-stage build to ensure that the `docker-php-serversideup-set-id` script is not executed in the construction of the final image
## Example
@@ -38,7 +38,7 @@ Here's an example of ensuring our UID/GID of `www-data` will match the developme
############################################
# Base Image
############################################
-FROM serversideup/php:8.4-fpm-nginx-bookworm AS base
+FROM serversideup/php:8.5-fpm-nginx-bookworm AS base
############################################
# Development Image
diff --git a/docs/content/docs/6.customizing-the-image/1.changing-common-php-settings.md b/docs/content/docs/6.customizing-the-image/1.changing-common-php-settings.md
index 4a060d5e6..08cc6ddc0 100644
--- a/docs/content/docs/6.customizing-the-image/1.changing-common-php-settings.md
+++ b/docs/content/docs/6.customizing-the-image/1.changing-common-php-settings.md
@@ -19,7 +19,7 @@ Here are a few examples on how you can change common PHP settings.
```yml [compose.yml] {4-6}
services:
php:
- image: serversideup/php:8.2.12-unit-bookworm
+ image: serversideup/php:8.2.12-fpm-nginx-bookworm
environment:
PHP_POST_MAX_SIZE: "500M"
PHP_UPLOAD_MAX_FILE_SIZE: "500M"
@@ -53,7 +53,7 @@ opcache.log_verbosity_level = 3
Then in our Dockerfile, we can copy this file to the `/usr/local/etc/php/conf.d/` directory:
```dockerfile [Dockerfile]
-FROM serversideup/php:8.4-fpm-nginx-bookworm
+FROM serversideup/php:8.5-fpm-nginx-bookworm
COPY zzz-custom-php.ini /usr/local/etc/php/conf.d/
```
@@ -61,7 +61,7 @@ COPY zzz-custom-php.ini /usr/local/etc/php/conf.d/
If you prefer to remove the default `php.ini` file, you can do so by adding the following line to your Dockerfile:
```dockerfile [Dockerfile]
-FROM serversideup/php:8.4-fpm-nginx-bookworm
+FROM serversideup/php:8.5-fpm-nginx-bookworm
RUN rm /usr/local/etc/php/conf.d/serversideup-docker-php.ini
COPY zzz-custom-php.ini /usr/local/etc/php/conf.d/
diff --git a/docs/content/docs/6.customizing-the-image/2.installing-additional-php-extensions.md b/docs/content/docs/6.customizing-the-image/2.installing-additional-php-extensions.md
index 85165a062..f89170436 100644
--- a/docs/content/docs/6.customizing-the-image/2.installing-additional-php-extensions.md
+++ b/docs/content/docs/6.customizing-the-image/2.installing-additional-php-extensions.md
@@ -33,7 +33,7 @@ If you're not familiar with the concept of packaging your application for deploy
```dockerfile [Dockerfile]
# Choose our base image
-FROM serversideup/php:8.4-fpm-nginx
+FROM serversideup/php:8.5-fpm-nginx
# Switch to root so we can do root things
USER root
@@ -52,7 +52,7 @@ Here's a simple example with Docker Compose that builds an image with the `intl`
```dockerfile [Dockerfile]
# Choose our base image
-FROM serversideup/php:8.4-fpm-nginx
+FROM serversideup/php:8.5-fpm-nginx
# Switch to root so we can do root things
USER root
diff --git a/docs/content/docs/6.customizing-the-image/3.adding-your-own-start-up-scripts.md b/docs/content/docs/6.customizing-the-image/3.adding-your-own-start-up-scripts.md
index 90d4ee26c..60b6a0e4d 100644
--- a/docs/content/docs/6.customizing-the-image/3.adding-your-own-start-up-scripts.md
+++ b/docs/content/docs/6.customizing-the-image/3.adding-your-own-start-up-scripts.md
@@ -46,7 +46,7 @@ echo "π Hello, world!"
```
```dockerfile [Dockerfile]
-FROM serversideup/php:8.4-fpm-nginx
+FROM serversideup/php:8.5-fpm-nginx
# Copy our scripts as executable
COPY --chmod=755 ./entrypoint.d/ /etc/entrypoint.d/
@@ -96,7 +96,7 @@ php-1 | β
NGINX + PHP-FPM is running correctly.
```
::
-You can see our `π Hello, world!` is executing *after* the initialization of `10-init-unit.sh`.
+You can see our `π Hello, world!` is executing *after* the initialization of `10-init-webserver-config.sh`.
## Running Custom Artisan Commands
If you need to run a custom artisan command at start up, you could update your `entrypoint.d/99-my-script.sh` file to look like this:
@@ -129,7 +129,7 @@ You can change the name of your file to whatever you want, but we recommend usin
If you want to customize an image that uses S6 Overlay (`fpm-nginx` or `fpm-apache`), you may have an advanced scenario where you have a custom S6 service that needs to be executed after one of our entrypoint scripts. In order to do this, you'll need to move all our scripts from the `/etc/entrypoint.d` directory to the `/etc/s6-overlay/scripts` directory. This would be a very time consuming scenario if you did this manually, but thankfully you can use our `docker-php-serversideup-s6-init` script to do this for you.
```dockerfile [Dockerfile]
-FROM serversideup/php:8.4-fpm-nginx
+FROM serversideup/php:8.5-fpm-nginx
# Set the user to root for our build steps
USER root
diff --git a/docs/content/docs/7.troubleshooting/1.common-issues.md b/docs/content/docs/7.troubleshooting/1.common-issues.md
index c9a4b68b4..28ff2dc19 100644
--- a/docs/content/docs/7.troubleshooting/1.common-issues.md
+++ b/docs/content/docs/7.troubleshooting/1.common-issues.md
@@ -18,7 +18,7 @@ By default, these images run as a non-root user (`www-data`) for security. When
If your command is failing during build, then you likely need to switch to root to perform root tasks.
```dockerfile [Dockerfile]
-FROM serversideup/php:8.4-fpm-nginx
+FROM serversideup/php:8.5-fpm-nginx
USER root
@@ -64,7 +64,7 @@ netstat -ano | findstr :80
```yaml [compose.yml] {4-6}
services:
php:
- image: serversideup/php:8.4-fpm-nginx
+ image: serversideup/php:8.5-fpm-nginx
ports:
- "8080:8080" # Use port 8080 instead
- "8443:8443"
diff --git a/docs/content/docs/8.reference/1.environment-variable-specification.md b/docs/content/docs/8.reference/1.environment-variable-specification.md
index bd1a53ffd..a9789ef62 100644
--- a/docs/content/docs/8.reference/1.environment-variable-specification.md
+++ b/docs/content/docs/8.reference/1.environment-variable-specification.md
@@ -27,7 +27,7 @@ Setting environment variables all depends on what method you're using to run you
`APACHE_START_SERVERS`
*Default: "2"*|Sets the number of child server processes created on startup.(Official docs)|fpm-apache
`APACHE_THREAD_LIMIT`
*Default: "64"*|Set the maximum configured value for ThreadsPerChild for the lifetime of the Apache httpd process. (Official docs)|fpm-apache
`APACHE_THREADS_PER_CHILD`
*Default: "25"*|This directive sets the number of threads created by each child process. (Official docs)|fpm-apache
-`APP_BASE_DIR`
*Default: "/var/www/html"*|Change this only if you mount your application to a different directory within the container. βΉοΈ Be sure to change `NGINX_WEBROOT`, `APACHE_DOCUMENT_ROOT`, `UNIT_WEBROOT`, etc if it applies to your use case as well.|all
+`APP_BASE_DIR`
*Default: "/var/www/html"*|Change this only if you mount your application to a different directory within the container. βΉοΈ Be sure to change `NGINX_WEBROOT`, `APACHE_DOCUMENT_ROOT`, or `CADDY_SERVER_ROOT` if it applies to your use case as well.|all
`AUTORUN_DEBUG`
*Default: "false"*|Enable debug mode for the Laravel automations. | all
`AUTORUN_ENABLED`
*Default: "false"*|Enable or disable all automations. It's advised to set this to `false` in certain CI environments (especially during a composer install). If this is set to `false`, all `AUTORUN_*` behaviors will also be disabled.| all
`AUTORUN_LARAVEL_OPTIMIZE`
*Default: "true"*|Automatically run "php artisan optimize" on container, attempting to `--except` in Laravel > `v11.38.0` (Official docs)
βΉοΈ Requires `AUTORUN_ENABLED = true` to run. | all
@@ -117,13 +117,5 @@ Setting environment variables all depends on what method you're using to run you
`S6_VERBOSITY`
*Default: "1"*|Set the verbosity of "S6 Overlay" (the init system these images are based on). The default is "1" (print warnings and errors). The scale goes from 1 to 5, but the output will quickly become very noisy. If you're having issues, start here. You can also customize many other variables. (Official docs)|fpm-nginx,
fpm-apache
`SHOW_WELCOME_MESSAGE`
*Default: "true"*|Show a helpful welcome message showing container information when the container starts.|all
`SSL_CERTIFICATE_FILE`
*Default: "/etc/ssl/private/self-signed-web.crt"*|Path to public certificate file for HTTPS. You must provide this file otherwise a self-signed key pair will be generated for you.|fpm-nginx,
fpm-apache
-`SSL_MODE`
*Default: "off"*|Configure how you would like to handle SSL. This can be "off" (HTTP only), "mixed" (HTTP + HTTPS), or "full" (HTTPS only). If you use HTTP, you may need to also change `PHP_SESSION_COOKIE_SECURE`.|fpm-nginx,
fpm-apache,
unit
-`SSL_PRIVATE_KEY_FILE`
*Default: "/etc/ssl/private/self-signed-web.key"*|Path to private key file for HTTPS. You must provide this file otherwise a self-signed key pair will be generated for you.|fpm-nginx,
fpm-apache,
frankenphp
-`UNIT_CERTIFICATE_NAME`
*Default: "self-signed-web-bundle"*| Name of your certificate bundle. This is used to configure HTTPS. (Official Docs)| unit
-`UNIT_CONFIG_DIRECTORY`
*Default: "/etc/unit/config.d"*|Path to the Unit configuration directory. Any *.json, *.js, and *.pem files will be loaded into Unit on initialization.| unit
-`UNIT_CONFIG_FILE`
*Default: "/etc/unit/config.d/config.json"*|Path to the Unit configuration file. One will be generated automatically by default. (Official Docs)| unit
-`UNIT_PROCESSES_IDLE_TIMEOUT`
*Default: "30"*|The maximum time in seconds that an idle process will be kept alive. (Official Docs)| unit
-`UNIT_PROCESSES_MAX`
*Default: "20"*|The maximum number of application processes that can be started. (Official Docs)| unit
-`UNIT_PROCESSES_SPARE`
*Default: "2"*|Minimum number of idle processes that Unit tries to maintain for an app. (Official Docs)| unit
-`UNIT_WEBROOT`
*Default: "/var/www/html/public"*|Base directory of the appβs file structure. All URI paths are relative to it. (Official Docs)| unit
-`UNIT_MAX_BODY_SIZE`
*Default: "104857600"* (100MB) | Sets maximum number of bytes in the body of a clientβs request. (Official docs) | unit
+`SSL_MODE`
*Default: "off"*|Configure how you would like to handle SSL. This can be "off" (HTTP only), "mixed" (HTTP + HTTPS), or "full" (HTTPS only). If you use HTTP, you may need to also change `PHP_SESSION_COOKIE_SECURE`.|fpm-nginx,
fpm-apache,
frankenphp
+`SSL_PRIVATE_KEY_FILE`
*Default: "/etc/ssl/private/self-signed-web.key"*|Path to private key file for HTTPS. You must provide this file otherwise a self-signed key pair will be generated for you.|fpm-nginx,
fpm-apache,
frankenphp
\ No newline at end of file
diff --git a/docs/content/index.md b/docs/content/index.md
index 56e86017f..de44ae7c6 100644
--- a/docs/content/index.md
+++ b/docs/content/index.md
@@ -14,7 +14,7 @@ orientation: vertical
Supercharge your PHP experience, [in seconds.]{.text-green-500}
#description
-Built upon the official PHP images, our production-ready serversideup/php images take your Docker PHP experience to the next level. Enjoy variable-first configurations, nginx-unit variation, native CloudFlare support, and more.
+Built upon the official PHP images, our production-ready serversideup/php images take your Docker PHP experience to the next level. Enjoy variable-first configurations, FrankenPHP, native CloudFlare support, and more.
#links
:::u-button
diff --git a/scripts/conf/php-versions-base-config.yml b/scripts/conf/php-versions-base-config.yml
index 03b726212..373f0897d 100644
--- a/scripts/conf/php-versions-base-config.yml
+++ b/scripts/conf/php-versions-base-config.yml
@@ -14,11 +14,6 @@ php_variations:
- "8.0"
- "8.1"
- "8.2"
- - name: unit
- supported_os: # Alpine with Unit is not supported yet. Submit a PR if you can help (https://github.com/serversideup/docker-php/issues/233)
- - bullseye
- - bookworm
- - trixie
php_versions:
- major: "7"
@@ -68,16 +63,14 @@ php_versions:
- name: trixie
patch_versions:
# - 8.4.1 # Pull latest from Official PHP source
- # PHP 8.5-rc has a blocking bug in a dependency that is not yet fixed.
- #
- # - minor: "8.5-rc"
- # base_os:
- # - name: alpine3.21
- # - name: alpine3.22
- # - name: bookworm
- # - name: trixie
- # patch_versions:
- # - 8.5-rc
+ - minor: "8.5"
+ base_os:
+ - name: alpine3.21
+ - name: alpine3.22
+ - name: bookworm
+ - name: trixie
+ patch_versions:
+ # - 8.5.0 # Pull latest from Official PHP source
operating_systems:
- family: alpine
diff --git a/src/common/usr/local/bin/docker-php-serversideup-entrypoint b/src/common/usr/local/bin/docker-php-serversideup-entrypoint
index b678f29ee..03546fc98 100644
--- a/src/common/usr/local/bin/docker-php-serversideup-entrypoint
+++ b/src/common/usr/local/bin/docker-php-serversideup-entrypoint
@@ -16,11 +16,6 @@ case "$1" in
"/init" | "php-fpm")
SERVERSIDEUP_DEFAULT_COMMAND="true"
;;
- "unitd")
- if [ "$2" = "--no-daemon" ]; then
- SERVERSIDEUP_DEFAULT_COMMAND="true"
- fi
- ;;
esac
# Check if S6 overlay is initialized
@@ -71,13 +66,5 @@ if [ "${1#-}" != "$1" ]; then
set -- php "$@"
fi
-# Some scripts may need to change the CMD based on the log level. If this file is set, execute the contents of that file instead of the Dockerfile CMD.
-if [ -f /tmp/docker_cmd_override ]; then
- docker_cmd_override=$(cat /tmp/docker_cmd_override)
- rm /tmp/docker_cmd_override
- set -- $docker_cmd_override # Perform word splitting by not quoting the commands
- exec "$@"
-else
- # Execute the CMD passed in from the Dockerfile
- exec "$@"
-fi
+# Execute the CMD passed in from the Dockerfile
+exec "$@"
diff --git a/src/common/usr/local/bin/docker-php-serversideup-set-file-permissions b/src/common/usr/local/bin/docker-php-serversideup-set-file-permissions
index 4a1de23a5..ad43ff641 100644
--- a/src/common/usr/local/bin/docker-php-serversideup-set-file-permissions
+++ b/src/common/usr/local/bin/docker-php-serversideup-set-file-permissions
@@ -20,7 +20,7 @@ usage() {
echo "Options:"
echo " --owner USER:GROUP Set the owner (required)"
echo " --service SERVICE Specify service type (optional, auto-detected if not provided)"
- echo " Valid services: cli, fpm, apache, fpm-apache, nginx, fpm-nginx, unit, frankenphp"
+ echo " Valid services: cli, fpm, apache, fpm-apache, nginx, fpm-nginx, frankenphp"
echo " --dir PATH Additional directory to change ownership (can be used multiple times)"
}
@@ -33,12 +33,6 @@ detect_service() {
return 0
fi
- # Check for NGINX Unit
- if [ -d "/etc/unit" ] || command -v unitd >/dev/null 2>&1; then
- echo "unit"
- return 0
- fi
-
# Check for Apache (with PHP-FPM config indicates fpm-apache)
if command -v apache2 >/dev/null 2>&1 || command -v httpd >/dev/null 2>&1; then
if [ -f "/usr/local/etc/php-fpm.conf" ] || command -v php-fpm >/dev/null 2>&1; then
@@ -196,17 +190,6 @@ case "$OS" in
/var/www
$PHP_INI_DIR/conf.d/zzz-serversideup-docker-php-debug.ini"
;;
- unit)
- DIRS="
- /composer
- /etc/unit
- /etc/ssl/private
- /var/lib/unit
- /var/log/unit
- /var/run/unit
- /var/www
- $PHP_INI_DIR/conf.d/zzz-serversideup-docker-php-debug.ini"
- ;;
frankenphp)
DIRS="
/composer
@@ -263,17 +246,6 @@ case "$OS" in
/var/www/
$PHP_INI_DIR/conf.d/zzz-serversideup-docker-php-debug.ini"
;;
- unit)
- DIRS="
- /composer
- /etc/unit
- /etc/ssl/private
- /var/lib/unit
- /var/log/unit
- /var/run/unit
- /var/www
- $PHP_INI_DIR/conf.d/zzz-serversideup-docker-php-debug.ini"
- ;;
frankenphp)
DIRS="
/composer
diff --git a/src/variations/cli/Dockerfile b/src/variations/cli/Dockerfile
index f7fa19a6d..9e64137f5 100644
--- a/src/variations/cli/Dockerfile
+++ b/src/variations/cli/Dockerfile
@@ -1,5 +1,5 @@
ARG BASE_OS_VERSION='bookworm'
-ARG PHP_VERSION='8.4'
+ARG PHP_VERSION='8.5'
ARG PHP_VARIATION='cli'
##########
@@ -77,7 +77,7 @@ RUN docker-php-serversideup-dep-install-alpine "${DEPENDENCY_PACKAGES_ALPINE}" &
chown -R www-data:www-data "${COMPOSER_HOME}" && \
\
# Install default PHP extensions
- install-php-extensions "${DEPENDENCY_PHP_EXTENSIONS}"
+ install-php-extensions ${DEPENDENCY_PHP_EXTENSIONS}
# install composer from Composer's official Docker image
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
diff --git a/src/variations/fpm-apache/Dockerfile b/src/variations/fpm-apache/Dockerfile
index cfa4bf592..3d4e52f55 100644
--- a/src/variations/fpm-apache/Dockerfile
+++ b/src/variations/fpm-apache/Dockerfile
@@ -1,6 +1,6 @@
# check=skip=SecretsUsedInArgOrEnv
ARG BASE_OS_VERSION='bookworm'
-ARG PHP_VERSION='8.4'
+ARG PHP_VERSION='8.5'
ARG PHP_VARIATION='fpm-apache'
ARG BASE_IMAGE="php:${PHP_VERSION}-fpm-${BASE_OS_VERSION}"
@@ -128,7 +128,7 @@ RUN docker-php-serversideup-dep-install-debian "${DEPENDENCY_PACKAGES_DEBIAN}"
chown -R www-data:www-data "${COMPOSER_HOME}" && \
\
# Install default PHP extensions
- install-php-extensions "${DEPENDENCY_PHP_EXTENSIONS}" && \
+ install-php-extensions ${DEPENDENCY_PHP_EXTENSIONS} && \
\
# redirect logs to STDOUT and STERR
ln -sf /dev/stdout /var/log/apache2/access.log && \
diff --git a/src/variations/fpm-nginx/Dockerfile b/src/variations/fpm-nginx/Dockerfile
index e83ca365c..83518d33d 100644
--- a/src/variations/fpm-nginx/Dockerfile
+++ b/src/variations/fpm-nginx/Dockerfile
@@ -1,6 +1,6 @@
# check=skip=SecretsUsedInArgOrEnv
ARG BASE_OS_VERSION='bookworm'
-ARG PHP_VERSION='8.4'
+ARG PHP_VERSION='8.5'
ARG BASE_IMAGE="php:${PHP_VERSION}-fpm-${BASE_OS_VERSION}"
##########
@@ -214,7 +214,7 @@ RUN docker-php-serversideup-dep-install-alpine "${DEPENDENCY_PACKAGES_ALPINE} ng
chown -R www-data:www-data /var/cache/nginx/ && \
\
# Install default PHP extensions
- install-php-extensions "${DEPENDENCY_PHP_EXTENSIONS}" && \
+ install-php-extensions ${DEPENDENCY_PHP_EXTENSIONS} && \
\
# clear all php provided fpm configurations
rm -rf /usr/local/etc/php-fpm.d/*.conf && \
diff --git a/src/variations/fpm/Dockerfile b/src/variations/fpm/Dockerfile
index 36ce52f86..33294b908 100644
--- a/src/variations/fpm/Dockerfile
+++ b/src/variations/fpm/Dockerfile
@@ -1,5 +1,5 @@
ARG BASE_OS_VERSION='bookworm'
-ARG PHP_VERSION='8.4'
+ARG PHP_VERSION='8.5'
ARG PHP_VARIATION='fpm'
##########
@@ -92,7 +92,7 @@ RUN rm -rf /usr/local/etc/php-fpm.d/*.conf && \
chmod +x /usr/local/bin/php-fpm-healthcheck && \
\
# Install default PHP extensions
- install-php-extensions "${DEPENDENCY_PHP_EXTENSIONS}"
+ install-php-extensions ${DEPENDENCY_PHP_EXTENSIONS}
# copy our fpm configurations
COPY src/php-fpm.d/ /
diff --git a/src/variations/frankenphp/Dockerfile b/src/variations/frankenphp/Dockerfile
index 911a6c0e8..6a7f3020d 100644
--- a/src/variations/frankenphp/Dockerfile
+++ b/src/variations/frankenphp/Dockerfile
@@ -1,6 +1,6 @@
# check=skip=SecretsUsedInArgOrEnv
ARG BASE_OS_VERSION='trixie'
-ARG PHP_VERSION='8.4'
+ARG PHP_VERSION='8.5'
ARG BASE_IMAGE="php:${PHP_VERSION}-zts-${BASE_OS_VERSION}"
ARG FRANKENPHP_VERSION='1.9.1'
ARG GOLANG_VERSION='1.25'
@@ -209,7 +209,7 @@ RUN \
# Install PHP Extension installer
docker-php-serversideup-install-php-ext-installer; \
# Install default PHP extensions
- install-php-extensions "${DEPENDENCY_PHP_EXTENSIONS}"; \
+ install-php-extensions ${DEPENDENCY_PHP_EXTENSIONS}; \
# Ensure permissions are set for www-data
docker-php-serversideup-set-file-permissions --owner www-data:www-data --service frankenphp
diff --git a/src/variations/unit/Dockerfile b/src/variations/unit/Dockerfile
deleted file mode 100644
index 00bd788b2..000000000
--- a/src/variations/unit/Dockerfile
+++ /dev/null
@@ -1,178 +0,0 @@
-# check=skip=SecretsUsedInArgOrEnv
-ARG BASE_OS_VERSION='bookworm'
-ARG PHP_VERSION='8.4'
-ARG PHP_VARIATION='unit'
-ARG BASE_IMAGE="php:${PHP_VERSION}-cli-${BASE_OS_VERSION}"
-
-##########
-# Unit Build
-##########
-FROM ${BASE_IMAGE} AS build
-ARG DEPENDENCY_PACKAGES_ALPINE='build-base curl tar git openssl-dev pcre2-dev shadow'
-ARG DEPENDENCY_PACKAGES_DEBIAN='ca-certificates git build-essential libssl-dev libpcre2-dev curl pkg-config'
-ARG NGINX_UNIT_VERSION='1.34.2'
-
-# copy our scripts
-COPY --chmod=755 src/common/ /
-
-# Download and untar the Nginx Unit source code
-RUN set -ex && \
- docker-php-serversideup-dep-install-alpine "${DEPENDENCY_PACKAGES_ALPINE}" && \
- docker-php-serversideup-dep-install-debian "${DEPENDENCY_PACKAGES_DEBIAN}" && \
- mkdir -p /usr/lib/unit/modules /usr/lib/unit/debug-modules && \
- cd /usr/src/ && \
- git clone --depth 1 -b ${NGINX_UNIT_VERSION} https://github.com/nginx/unit && \
- cd unit && \
- NCPU="$(getconf _NPROCESSORS_ONLN)" && \
- DEB_HOST_MULTIARCH="$(dpkg-architecture -q DEB_HOST_MULTIARCH)" && \
- CC_OPT="$(DEB_BUILD_MAINT_OPTIONS="hardening=+all,-pie" DEB_CFLAGS_MAINT_APPEND="-Wp,-D_FORTIFY_SOURCE=2 -fPIC" dpkg-buildflags --get CFLAGS)" && \
- LD_OPT="$(DEB_BUILD_MAINT_OPTIONS="hardening=+all,-pie" DEB_LDFLAGS_MAINT_APPEND="-Wl,--as-needed -pie" dpkg-buildflags --get LDFLAGS)" && \
- CONFIGURE_ARGS_MODULES="--prefix=/usr \
- --statedir=/var/lib/unit \
- --control=unix:/var/run/unit/control.unit.sock \
- --runstatedir=/var/run \
- --pid=/var/run/unit/unit.pid \
- --logdir=/var/log \
- --log=/dev/stdout \
- --tmpdir=/var/tmp \
- --openssl \
- --libdir=/usr/lib/$DEB_HOST_MULTIARCH" && \
- CONFIGURE_ARGS="$CONFIGURE_ARGS_MODULES --njs" && \
- make -j $NCPU -C pkg/contrib .njs && \
- export PKG_CONFIG_PATH=$(pwd)/pkg/contrib/njs/build && \
- ./configure $CONFIGURE_ARGS --cc-opt="$CC_OPT" --ld-opt="$LD_OPT" --modulesdir=/usr/lib/unit/debug-modules --debug && \
- make -j $NCPU unitd && \
- install -pm755 build/sbin/unitd /usr/sbin/unitd-debug && \
- make clean && \
- ./configure $CONFIGURE_ARGS --cc-opt="$CC_OPT" --ld-opt="$LD_OPT" --modulesdir=/usr/lib/unit/modules && \
- make -j $NCPU unitd && \
- install -pm755 build/sbin/unitd /usr/sbin/unitd && \
- make clean && \
- /bin/true && \
- ./configure $CONFIGURE_ARGS_MODULES --cc-opt="$CC_OPT" --modulesdir=/usr/lib/unit/debug-modules --debug && \
- ./configure php && \
- make -j $NCPU php-install && \
- make clean && \
- ./configure $CONFIGURE_ARGS_MODULES --cc-opt="$CC_OPT" --modulesdir=/usr/lib/unit/modules && \
- ./configure php && \
- make -j $NCPU php-install && \
- mkdir -p /var/lib/unit/
-
-##########
-# Unit: Main Image
-##########
-FROM ${BASE_IMAGE}
-
-ARG DEPENDENCY_PACKAGES_ALPINE='gettext'
-ARG DEPENDENCY_PACKAGES_DEBIAN='gettext-base procps zip'
-ARG DEPENDENCY_PHP_EXTENSIONS='opcache pcntl pdo_mysql pdo_pgsql redis zip'
-ARG REPOSITORY_BUILD_VERSION='dev'
-
-LABEL org.opencontainers.image.title="serversideup/php (unit)" \
- org.opencontainers.image.description="Supercharge your PHP experience. Based off the official PHP images, serversideup/php includes pre-configured PHP extensions and settings for enhanced performance and security. Optimized for Laravel and WordPress." \
- org.opencontainers.image.url="https://serversideup.net/open-source/docker-php/" \
- org.opencontainers.image.source="https://github.com/serversideup/docker-php" \
- org.opencontainers.image.documentation="https://serversideup.net/open-source/docker-php/docs/" \
- org.opencontainers.image.vendor="ServerSideUp" \
- org.opencontainers.image.authors="Jay Rogers (@jaydrogers)" \
- org.opencontainers.image.version="${REPOSITORY_BUILD_VERSION}" \
- org.opencontainers.image.licenses="GPL-3.0-or-later"
-
-ENV APP_BASE_DIR=/var/www/html \
- COMPOSER_ALLOW_SUPERUSER=1 \
- COMPOSER_HOME=/composer \
- COMPOSER_MAX_PARALLEL_HTTP=24 \
- DISABLE_DEFAULT_CONFIG=false \
- HEALTHCHECK_PATH="/healthcheck" \
- LOG_OUTPUT_LEVEL=warn \
- PHP_DATE_TIMEZONE="UTC" \
- PHP_DISPLAY_ERRORS=Off \
- PHP_DISPLAY_STARTUP_ERRORS=Off \
- PHP_ERROR_LOG="/dev/stderr" \
- PHP_ERROR_REPORTING="22527" \
- PHP_MAX_EXECUTION_TIME="99" \
- PHP_MAX_INPUT_TIME="-1" \
- PHP_MAX_INPUT_VARS="1000" \
- PHP_MEMORY_LIMIT="256M" \
- PHP_OPCACHE_ENABLE="0" \
- PHP_OPCACHE_FORCE_RESTART_TIMEOUT="180" \
- PHP_OPCACHE_INTERNED_STRINGS_BUFFER="8" \
- PHP_OPCACHE_JIT="off" \
- PHP_OPCACHE_JIT_BUFFER_SIZE="0" \
- PHP_OPCACHE_MAX_ACCELERATED_FILES="10000" \
- PHP_OPCACHE_MEMORY_CONSUMPTION="128" \
- PHP_OPCACHE_REVALIDATE_FREQ="2" \
- PHP_OPCACHE_SAVE_COMMENTS="1" \
- PHP_OPCACHE_VALIDATE_TIMESTAMPS="1" \
- PHP_OPEN_BASEDIR="" \
- PHP_POST_MAX_SIZE="100M" \
- PHP_SESSION_COOKIE_SECURE=false \
- PHP_UPLOAD_MAX_FILE_SIZE="100M" \
- SHOW_WELCOME_MESSAGE=true \
- SSL_CERT_BUNDLE_FILE=/etc/ssl/certs/private/bundle.pem \
- SSL_MODE=off \
- UNIT_CERTIFICATE_NAME=self-signed-web \
- UNIT_CONFIG_DIRECTORY=/etc/unit/config.d \
- UNIT_CONFIG_FILE=/etc/unit/config.d/config.json \
- UNIT_PROCESSES_IDLE_TIMEOUT=30 \
- UNIT_PROCESSES_MAX=20 \
- UNIT_PROCESSES_SPARE=2 \
- UNIT_WEBROOT=/var/www/html/public \
- UNIT_MAX_BODY_SIZE=104857600
-
-# Copy NGINX Unit binaries and modules from build stage
-COPY --from=build /usr/sbin/unitd /usr/sbin/
-COPY --from=build /usr/sbin/unitd-debug /usr/sbin/
-COPY --from=build /usr/lib/unit/ /usr/lib/unit/
-
-# Copy NGINX Unit state directory from build stage
-COPY --from=build /var/lib/unit/ /var/lib/unit/
-
-# copy our scripts
-COPY --chmod=755 src/common/ /
-COPY --chmod=755 src/variations/unit/etc/ /etc/
-
-# install composer from Composer's official Docker image
-COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
-
-# install pecl extensions, dependencies, and clean up
-RUN docker-php-serversideup-dep-install-alpine "${DEPENDENCY_PACKAGES_ALPINE}" && \
- docker-php-serversideup-dep-install-debian "${DEPENDENCY_PACKAGES_DEBIAN}" && \
- docker-php-serversideup-install-php-ext-installer && \
- \
- # Ensure default web root exists
- mkdir -p /var/www/html/public && \
- \
- # Ensure /var/www/ has the correct permissions
- chown -R www-data:www-data /var/www && \
- chmod -R 755 /var/www && \
- \
- # Set the image version
- echo "${REPOSITORY_BUILD_VERSION}" > /etc/serversideup-php-version && \
- \
- # Make composer cache directory
- mkdir -p "${COMPOSER_HOME}" && \
- chown -R www-data:www-data "${COMPOSER_HOME}" && \
- \
- # Create run directory for unit
- mkdir -p /var/run/unit /var/log/unit && \
- \
- # Install default PHP extensions
- install-php-extensions "${DEPENDENCY_PHP_EXTENSIONS}"
-
-ENTRYPOINT ["docker-php-serversideup-entrypoint"]
-
-STOPSIGNAL SIGTERM
-
-WORKDIR ${APP_BASE_DIR}
-
-RUN docker-php-serversideup-set-file-permissions --owner www-data:www-data --service unit
-
-USER www-data
-
-EXPOSE 8080 8443
-
-CMD ["unitd", "--no-daemon"]
-
-HEALTHCHECK --start-period=60s --start-interval=3s --interval=10s --timeout=3s --retries=3 \
- CMD [ "sh", "-c", "curl --insecure --silent --location --show-error --fail http://localhost:8080$HEALTHCHECK_PATH || exit 1" ]
diff --git a/src/variations/unit/etc/entrypoint.d/10-init-unit.sh b/src/variations/unit/etc/entrypoint.d/10-init-unit.sh
deleted file mode 100644
index 88c6e22b3..000000000
--- a/src/variations/unit/etc/entrypoint.d/10-init-unit.sh
+++ /dev/null
@@ -1,197 +0,0 @@
-#!/bin/sh
-###################################################
-# Usage: 10-init-unit.sh
-###################################################
-# This script processes the environment variables used in the Unit configuration template files.
-# Once the templates are processed, the script will enable the configurations and start Unit.
-# This script is executed at container initialization.
-
-set -e
-script_name="init-unit"
-
-WAITLOOPS=5
-SLEEPSEC=1
-UNIT_CONFIG_DIRECTORY=${UNIT_CONFIG_DIRECTORY:-"/etc/unit/config.d"}
-UNIT_CONFIG_FILE=${UNIT_CONFIG_FILE:-"$UNIT_CONFIG_DIRECTORY/config.json"}
-UNIT_SOCKET_LOCATION=${UNIT_SOCKET_LOCATION:-"/var/run/unit/control.unit.sock"}
-
-##########
-# Functions
-##########
-set_debug_output() {
- if [ "$LOG_OUTPUT_LEVEL" = "debug" ]; then
- echo "π $script_name: Output of $*:" >&2
- echo
- eval "$@" || { echo "Command $* failed" >&2; return 1; }
- echo
- fi
-}
-
-process_template() {
- template_file=$1
- output_file=$2
-
- if [ -f "$output_file" ]; then
- echo "$script_name (βΉοΈ NOTICE): $output_file already exists, so we'll use the existing file."
- return 0
- fi
-
- if [ ! -f "$template_file" ]; then
- echo "π ERROR ($script_name): Unable to initialize container. $output_file doesn't exist and we're unable to find a template for $template_file."
- return 1
- fi
-
- # Get all environment variables starting with 'NGINX_', 'SSL_', `LOG_`, and 'APACHE_'
- subst_vars=$(env | grep -E '^(UNIT_|SSL_|LOG_)' | cut -d= -f1 | awk '{printf "${%s},",$1}' | sed 's/,$//')
-
- # Validate that all required variables are set
- for var_name in $(echo "$subst_vars" | tr ',' ' '); do
- eval "value=\$$var_name" # Use eval to get the value of var_name
- if [ -z "$value" ]; then
- echo "π ERROR ($script_name): Environment variable $var_name is not set."
- return 1
- fi
- done
-
- echo "$script_name: Processing $template_file β $output_file..."
- envsubst "$subst_vars" < "$template_file" > "$output_file"
- set_debug_output "cat $output_file"
-}
-
-curl_put() {
- curl_option="$1"
- curl_value="$2"
- api_location="$3"
-
- if [ $curl_option = "--data-binary" ]; then
- curl_value="@$curl_value"
- fi
-
- curl_return=$(/usr/bin/curl -s -w '\n%{http_code}' -X PUT "$curl_option" "$curl_value" --unix-socket "$UNIT_SOCKET_LOCATION" "http://localhost/$api_location")
- return_status=$(echo "$curl_return" | tail -n1)
- return_body=$(echo "$curl_return" | head -n -1)
-
- if [ "$return_status" -ne "200" ]; then
- if echo "$return_body" | grep "Certificate already exists."; then
- echo "βΉοΈ NOTICE: Certificate already exists. Ignoring this error..."
- echo "$return_body"
- return 0 # Ignore errors of certificate already existing
- else
- echo "π ERROR: HTTP response status code is '$return_status'"
- echo "$return_body"
- return 1 # Return error for all other errors
- fi
- else
- echo "β
OK: HTTP response status code is '$return_status'"
- echo "$return_body"
- fi
- return 0
-}
-
-configure_unit() {
- echo "$script_name: Launching Unit daemon to perform initial configuration..."
- /usr/sbin/$DOCKER_CMD --control unix:"$UNIT_SOCKET_LOCATION"
-
- for i in $(/usr/bin/seq $WAITLOOPS); do
- if [ ! -S "$UNIT_SOCKET_LOCATION" ]; then
- echo "$script_name: Waiting for control socket to be created..."
- /bin/sleep $SLEEPSEC
- else
- break
- fi
- done
- # even when the control socket exists, it does not mean unit has finished initialisation
- # this curl call will get a reply once unit is fully launched
- /usr/bin/curl -s -X GET --unix-socket "$UNIT_SOCKET_LOCATION" http://localhost/
-
- echo "$script_name: Looking for certificate bundles in $UNIT_CONFIG_DIRECTORY..."
- for f in $(/usr/bin/find "$UNIT_CONFIG_DIRECTORY" -type f -name "*.pem"); do
- echo "$script_name: Uploading certificates bundle: $f"
- curl_put "--data-binary" "$f" "certificates/$(basename $f .pem)"
- done
-
- set_debug_output "/usr/bin/find $UNIT_CONFIG_DIRECTORY -type f -name \"*.pem\""
-
- echo "$script_name: Looking for JavaScript modules in $UNIT_CONFIG_DIRECTORY..."
- for f in $(/usr/bin/find $UNIT_CONFIG_DIRECTORY -type f -name "*.js"); do
- echo "$script_name: Uploading JavaScript module: $f"
- curl_put "--data-binary" "$f" "js_modules/$(basename $f .js)"
- done
-
- echo "$script_name: Looking for configuration snippets in $UNIT_CONFIG_DIRECTORY..."
- for f in $(/usr/bin/find "$UNIT_CONFIG_DIRECTORY" -type f -name "*.json"); do
- echo "$script_name: Applying configuration $f";
- curl_put "--data-binary" "$f" "config"
- done
-
- # warn on filetypes we don't know what to do with
- for f in $(/usr/bin/find "$UNIT_CONFIG_DIRECTORY" -type f -not -name "*.sh" -not -name "*.template" -not -name "*.json" -not -name "*.pem" -not -name "*.js"); do
- echo "$script_name: Ignoring $f";
- done
-
- echo "$script_name: Stopping Unit daemon after initial configuration..."
- kill -TERM "$(/bin/cat /var/run/unit/unit.pid)"
-
- for i in $(/usr/bin/seq $WAITLOOPS); do
- if [ -S "$UNIT_SOCKET_LOCATION" ]; then
- echo "$script_name: Waiting for control socket to be removed..."
- /bin/sleep $SLEEPSEC
- else
- break
- fi
- done
- if [ -S "$UNIT_SOCKET_LOCATION" ]; then
- kill -KILL "$(/bin/cat /var/run/unit/unit.pid)"
- rm -f "$UNIT_SOCKET_LOCATION"
- fi
-
- echo
- echo "$script_name: Unit initial configuration complete; ready for start up..."
- echo
-}
-
-validate_ssl(){
- available_ssl_bundles=$(/usr/bin/find "$UNIT_CONFIG_DIRECTORY" -type f -name "*.pem")
-
- if [ -n "$available_ssl_bundles" ]; then
- echo "βΉοΈ NOTICE ($script_name): SSL Certbundle already exists, so we'll use the existing files."
- return 0
- fi
-
- if [ -f "/etc/ssl/private/$UNIT_CERTIFICATE_NAME.crt" ] && [ -f "/etc/ssl/private/$UNIT_CERTIFICATE_NAME.key" ]; then
- echo "βΉοΈ NOTICE ($script_name): Custom SSL Certificate found in /etc/ssl/private, so we'll use that."
- cat "/etc/ssl/private/$UNIT_CERTIFICATE_NAME.key" "/etc/ssl/private/$UNIT_CERTIFICATE_NAME.crt" > "$UNIT_CONFIG_DIRECTORY/$UNIT_CERTIFICATE_NAME.pem"
- return 0
- fi
-
- echo "$script_name: π SSL Certbundle not found. Generating self-signed SSL bundle..."
- mkdir -p /etc/ssl/private/
- openssl req -x509 -subj "/C=US/ST=Wisconsin/L=Milwaukee/O=IT/CN=default.test" -nodes -newkey rsa:2048 -keyout "/etc/ssl/private/$UNIT_CERTIFICATE_NAME.key" -out "/etc/ssl/private/$UNIT_CERTIFICATE_NAME.crt" -days 365 >/dev/null 2>&1
- cat "/etc/ssl/private/$UNIT_CERTIFICATE_NAME.key" "/etc/ssl/private/$UNIT_CERTIFICATE_NAME.crt" > "$UNIT_CONFIG_DIRECTORY/$UNIT_CERTIFICATE_NAME.pem"
-}
-
-##########
-# Main
-##########
-DOCKER_CMD=$1
-if [ "$DISABLE_DEFAULT_CONFIG" = false ]; then
-
- # Configure Unit only if the command is "unitd" or "unitd-debug"
- if [ "$DOCKER_CMD" = "unitd" ] || [ "$DOCKER_CMD" = "unitd-debug" ]; then
- ssl_mode=$(echo "$SSL_MODE" | tr '[:upper:]' '[:lower:]')
- process_template "$UNIT_CONFIG_DIRECTORY/ssl-$ssl_mode.json.template" "$UNIT_CONFIG_DIRECTORY/config.json"
- if [ "$ssl_mode" != "off" ]; then
- validate_ssl
- fi
- configure_unit
- else
- if [ "$LOG_OUTPUT_LEVEL" = "debug" ]; then
- echo "π $script_name: DISABLE_DEFAULT_CONFIG does not equal \"false\", so no initialization will be performed."
- fi
- fi
-
- # If debug is set, write replace "unitd" with "unitd-debug" and save this file in the docker_cmd_override file for execution by the entrypoint script
- if [ "$LOG_OUTPUT_LEVEL" = "debug" ]; then
- echo "$@" | sed 's/unitd/unitd-debug/' > /tmp/docker_cmd_override
- fi
-fi
\ No newline at end of file
diff --git a/src/variations/unit/etc/entrypoint.d/2-deprecated.sh b/src/variations/unit/etc/entrypoint.d/2-deprecated.sh
deleted file mode 100644
index 9f3dc9767..000000000
--- a/src/variations/unit/etc/entrypoint.d/2-deprecated.sh
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/sh
-###################################################
-# Usage: 2-deprecated.sh
-###################################################
-# This script displays a deprecation warning for NGINX Unit.
-# NGINX Unit has been archived and is no longer maintained.
-
-: "${UNIT_SKIP_DEPRECATION_DELAY:=false}"
-
-echo '
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-β β
-β β οΈ CRITICAL DEPRECATION NOTICE β οΈ β
-β β
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-
-π NGINX UNIT HAS BEEN ARCHIVED BY NGINX
-
-In October 2025, NGINX officially archived the NGINX Unit project and
-stopped all maintenance and development. The Docker image you are
-using is deprecated and will be removed in the next release.
-
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-
-β‘ RECOMMENDED ACTION: Migrate to a different variation
-
-π Migration Guide:
- https://serversideup.net/php/unit-deprecation
-
-π Official NGINX Unit Announcement:
- https://github.com/nginx/unit
-
-βΉοΈ Need Help?
- https://serversideup.net/php/community
-
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-
-β οΈ Timeline:
- β’ Now: These images are deprecated and will not receive updates
- β’ Future: These images will be removed in the next release
-
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-'
-
-# Add a 5-second pause to ensure the message is seen
-# This pause can be disabled by setting UNIT_SKIP_DEPRECATION_DELAY=true
-if [ "$UNIT_SKIP_DEPRECATION_DELAY" != "true" ]; then
- echo "β³ Continuing in 5 seconds... (set UNIT_SKIP_DEPRECATION_DELAY=true to skip)"
- sleep 5
-fi
\ No newline at end of file
diff --git a/src/variations/unit/etc/unit/config.d/ssl-full.json.template b/src/variations/unit/etc/unit/config.d/ssl-full.json.template
deleted file mode 100644
index 38ee38f49..000000000
--- a/src/variations/unit/etc/unit/config.d/ssl-full.json.template
+++ /dev/null
@@ -1,168 +0,0 @@
-{
- "listeners": {
- "*:8080": {
- "pass": "routes/http-redirect",
- "forwarded": {
- "client_ip": "CF-Connecting-IP",
- "recursive": false,
- "source": [
- "173.245.48.0/20",
- "103.21.244.0/22",
- "103.22.200.0/22",
- "103.31.4.0/22",
- "141.101.64.0/18",
- "108.162.192.0/18",
- "190.93.240.0/20",
- "188.114.96.0/20",
- "197.234.240.0/22",
- "198.41.128.0/17",
- "162.158.0.0/15",
- "104.16.0.0/13",
- "104.24.0.0/14",
- "172.64.0.0/13",
- "131.0.72.0/22",
- "2400:cb00::/32",
- "2606:4700::/32",
- "2803:f800::/32",
- "2405:b500::/32",
- "2405:8100::/32",
- "2a06:98c0::/29",
- "2c0f:f248::/32"
- ]
- }
- },
- "*:8443": {
- "pass": "routes/app",
- "tls": {
- "certificate": "${UNIT_CERTIFICATE_NAME}"
- },
- "forwarded": {
- "client_ip": "CF-Connecting-IP",
- "recursive": false,
- "source": [
- "173.245.48.0/20",
- "103.21.244.0/22",
- "103.22.200.0/22",
- "103.31.4.0/22",
- "141.101.64.0/18",
- "108.162.192.0/18",
- "190.93.240.0/20",
- "188.114.96.0/20",
- "197.234.240.0/22",
- "198.41.128.0/17",
- "162.158.0.0/15",
- "104.16.0.0/13",
- "104.24.0.0/14",
- "172.64.0.0/13",
- "131.0.72.0/22",
- "2400:cb00::/32",
- "2606:4700::/32",
- "2803:f800::/32",
- "2405:b500::/32",
- "2405:8100::/32",
- "2a06:98c0::/29",
- "2c0f:f248::/32"
- ]
- }
- }
- },
- "routes": {
- "http-redirect": [
- {
- "match": {
- "source": ["127.0.0.1", "::1"],
- "scheme": "http"
- },
- "action": {
- "return": 301,
- "location": "https://localhost:8443$uri"
- }
- },
- {
- "match": {
- "scheme": "http"
- },
- "action": {
- "return": 301,
- "location": "https://$host$uri"
- }
- }
- ],
- "app": [
- {
- "match": {
- "uri": "/healthcheck"
- },
- "action": {
- "return": 200
- }
- },
- {
- "match": {
- "uri": [
- "!/.well-known/*",
- "/.*",
- "/.*/",
- "/.*/*",
- "/*/.*",
- "/*/.*/",
- "/*/.*/*"
- ]
- },
- "action": {
- "return": 404
- }
- },
- {
- "match": {
- "uri": [
- "/*.php",
- "/*/*.php"
- ]
- },
- "action": {
- "pass": "applications/php/direct"
- }
- },
- {
- "match": {
- "uri": "!/index.php"
- },
- "action": {
- "share": "${UNIT_WEBROOT}$uri",
- "fallback": {
- "pass": "applications/php/index"
- }
- }
- }
- ],
- },
- "settings": {
- "http": {
- "max_body_size": ${UNIT_MAX_BODY_SIZE}
- }
- },
- "applications": {
- "php": {
- "type": "php",
- "processes": {
- "max": ${UNIT_PROCESSES_MAX},
- "spare": ${UNIT_PROCESSES_SPARE},
- "idle_timeout": ${UNIT_PROCESSES_IDLE_TIMEOUT}
- },
- "targets": {
- "direct": {
- "root": "${UNIT_WEBROOT}/"
- },
- "index": {
- "root": "${UNIT_WEBROOT}/",
- "script": "index.php"
- }
- }
- }
- },
- "access_log": {
- "if": "`${uri == '/healthcheck' ? false : true}`",
- "path": "/dev/stdout"
- }
-}
diff --git a/src/variations/unit/etc/unit/config.d/ssl-mixed.json.template b/src/variations/unit/etc/unit/config.d/ssl-mixed.json.template
deleted file mode 100644
index 93c966361..000000000
--- a/src/variations/unit/etc/unit/config.d/ssl-mixed.json.template
+++ /dev/null
@@ -1,148 +0,0 @@
-{
- "listeners": {
- "*:8080": {
- "pass": "routes",
- "forwarded": {
- "client_ip": "CF-Connecting-IP",
- "recursive": false,
- "source": [
- "173.245.48.0/20",
- "103.21.244.0/22",
- "103.22.200.0/22",
- "103.31.4.0/22",
- "141.101.64.0/18",
- "108.162.192.0/18",
- "190.93.240.0/20",
- "188.114.96.0/20",
- "197.234.240.0/22",
- "198.41.128.0/17",
- "162.158.0.0/15",
- "104.16.0.0/13",
- "104.24.0.0/14",
- "172.64.0.0/13",
- "131.0.72.0/22",
- "2400:cb00::/32",
- "2606:4700::/32",
- "2803:f800::/32",
- "2405:b500::/32",
- "2405:8100::/32",
- "2a06:98c0::/29",
- "2c0f:f248::/32"
- ]
- }
- },
- "*:8443": {
- "pass": "routes",
- "tls": {
- "certificate": "${UNIT_CERTIFICATE_NAME}",
- "conf_commands": {
- "minprotocol": "TLSv1.2"
- }
- },
- "forwarded": {
- "client_ip": "CF-Connecting-IP",
- "recursive": false,
- "source": [
- "173.245.48.0/20",
- "103.21.244.0/22",
- "103.22.200.0/22",
- "103.31.4.0/22",
- "141.101.64.0/18",
- "108.162.192.0/18",
- "190.93.240.0/20",
- "188.114.96.0/20",
- "197.234.240.0/22",
- "198.41.128.0/17",
- "162.158.0.0/15",
- "104.16.0.0/13",
- "104.24.0.0/14",
- "172.64.0.0/13",
- "131.0.72.0/22",
- "2400:cb00::/32",
- "2606:4700::/32",
- "2803:f800::/32",
- "2405:b500::/32",
- "2405:8100::/32",
- "2a06:98c0::/29",
- "2c0f:f248::/32"
- ]
- }
- }
- },
- "routes": [
- {
- "match": {
- "uri": "/healthcheck"
- },
- "action": {
- "return": 200
- }
- },
- {
- "match": {
- "uri": [
- "!/.well-known/*",
- "/.*",
- "/.*/",
- "/.*/*",
- "/*/.*",
- "/*/.*/",
- "/*/.*/*"
- ]
- },
- "action": {
- "return": 404
- }
- },
- {
- "match": {
- "uri": [
- "/*.php",
- "/*/*.php"
- ]
- },
- "action": {
- "pass": "applications/php/direct"
- }
- },
- {
- "match": {
- "uri": "!/index.php"
- },
- "action": {
- "share": "${UNIT_WEBROOT}$uri",
- "fallback": {
- "pass": "applications/php/index"
- }
- }
- }
- ],
- "settings": {
- "http": {
- "max_body_size": ${UNIT_MAX_BODY_SIZE}
- }
- },
- "applications": {
- "php": {
- "type": "php",
- "processes": {
- "max": ${UNIT_PROCESSES_MAX},
- "spare": ${UNIT_PROCESSES_SPARE},
- "idle_timeout": ${UNIT_PROCESSES_IDLE_TIMEOUT}
- },
- "targets": {
- "direct": {
- "root": "${UNIT_WEBROOT}/"
- },
- "index": {
- "root": "${UNIT_WEBROOT}/",
- "script": "index.php"
- }
- }
- }
- },
- "access_log": {
- "if": "`${uri == '/healthcheck' ? false : true}`",
- "path": "/dev/stdout"
- }
-}
diff --git a/src/variations/unit/etc/unit/config.d/ssl-off.json.template b/src/variations/unit/etc/unit/config.d/ssl-off.json.template
deleted file mode 100644
index f3e8fd66d..000000000
--- a/src/variations/unit/etc/unit/config.d/ssl-off.json.template
+++ /dev/null
@@ -1,111 +0,0 @@
-{
- "listeners": {
- "*:8080": {
- "pass": "routes",
- "forwarded": {
- "client_ip": "CF-Connecting-IP",
- "recursive": false,
- "source": [
- "173.245.48.0/20",
- "103.21.244.0/22",
- "103.22.200.0/22",
- "103.31.4.0/22",
- "141.101.64.0/18",
- "108.162.192.0/18",
- "190.93.240.0/20",
- "188.114.96.0/20",
- "197.234.240.0/22",
- "198.41.128.0/17",
- "162.158.0.0/15",
- "104.16.0.0/13",
- "104.24.0.0/14",
- "172.64.0.0/13",
- "131.0.72.0/22",
- "2400:cb00::/32",
- "2606:4700::/32",
- "2803:f800::/32",
- "2405:b500::/32",
- "2405:8100::/32",
- "2a06:98c0::/29",
- "2c0f:f248::/32"
- ]
- }
- }
- },
- "routes": [
- {
- "match": {
- "uri": "/healthcheck"
- },
- "action": {
- "return": 200
- }
- },
- {
- "match": {
- "uri": [
- "!/.well-known/*",
- "/.*",
- "/.*/",
- "/.*/*",
- "/*/.*",
- "/*/.*/",
- "/*/.*/*"
- ]
- },
- "action": {
- "return": 404
- }
- },
- {
- "match": {
- "uri": [
- "/*.php",
- "/*/*.php"
- ]
- },
- "action": {
- "pass": "applications/php/direct"
- }
- },
- {
- "match": {
- "uri": "!/index.php"
- },
- "action": {
- "share": "${UNIT_WEBROOT}$uri",
- "fallback": {
- "pass": "applications/php/index"
- }
- }
- }
- ],
- "settings": {
- "http": {
- "max_body_size": ${UNIT_MAX_BODY_SIZE}
- }
- },
- "applications": {
- "php": {
- "type": "php",
- "processes": {
- "max": ${UNIT_PROCESSES_MAX},
- "spare": ${UNIT_PROCESSES_SPARE},
- "idle_timeout": ${UNIT_PROCESSES_IDLE_TIMEOUT}
- },
- "targets": {
- "direct": {
- "root": "${UNIT_WEBROOT}/"
- },
- "index": {
- "root": "${UNIT_WEBROOT}/",
- "script": "index.php"
- }
- }
- }
- },
- "access_log": {
- "if": "`${uri == '/healthcheck' ? false : true}`",
- "path": "/dev/stdout"
- }
-}