gighiveGigHive’s production deployment uses Docker containers that may run different Ubuntu and PHP versions than the host VM. This document explains how this works and why it’s safe.
ubuntu:24.04 (Noble Numbat)php-fpm)ansible/roles/docker/files/apache/Dockerfilemysql:8.0Docker containers are isolated environments that run their own operating system userspace. The key points:
When you run the Ansible playbook, it ensures a clean rebuild:
ansible-playbook -i ansible/inventories/inventory_bootstrap.yml \
ansible/playbooks/site.yml \
--skip-tags vbox_provision,blobfuse2,mysql_backup
ansible/roles/docker/tasks/main.yml)apacheWebServer containerbuild: always - Rebuilds from Dockerfile with latest changesThe PHP version is controlled via Ansible variables:
File: ansible/inventories/group_vars/gighive/gighive.yml
gighive_php_version: "8.3"
gighive_php_fpm_bin: "php-fpm"
File: ansible/roles/docker/files/apache/Dockerfile
ARG PHP_VERSION=8.3
Templates automatically use the correct socket path based on gighive_php_version:
/run/php/php8.3-fpm.sock/run/php/php8.3-fpm.sockThese are templated in:
ansible/roles/docker/templates/apache2.conf.j2ansible/roles/docker/templates/php-fpm.conf.j2ansible/roles/docker/templates/www.conf.j2To upgrade the container to a newer Ubuntu or PHP version:
Dockerfile base image: FROM ubuntu:24.04ARG PHP_VERSION=8.3gighive.yml: gighive_php_version: "8.3"No host OS upgrade required.
To upgrade the host VM from 22.04 to 24.04:
No container rebuild required.
| Date | Host OS | Container OS | PHP Version | Notes |
|---|---|---|---|---|
| 2025-11 | 22.04 | 24.04 | 8.3 | Current production config |
| Previous | 22.04 | 22.04 | 8.1 | Legacy configuration |
Check PHP socket path:
docker exec apacheWebServer ls -la /run/php/
Should show: php8.3-fpm.sock
Check PHP-FPM is running:
docker exec apacheWebServer ps aux | grep php-fpm
Check host OS:
cat /etc/lsb-release
Check container OS:
docker exec apacheWebServer cat /etc/lsb-release
Check container PHP version:
docker exec apacheWebServer php -v
ARG PHP_VERSION should match gighive.yml gighive_php_versionansible/roles/docker/files/apache/Dockerfileansible/roles/docker/templates/docker-compose.yml.j2ansible/inventories/group_vars/gighive/gighive.ymlansible/roles/docker/tasks/main.yml