jknapp c65f533dcc
Some checks failed
Cloud Apache Container / Build-and-Push (74) (push) Successful in 2m6s
Cloud Apache Container / Build-and-Push (80) (push) Successful in 1m23s
Cloud Apache Container / Build-and-Push (81) (push) Successful in 1m55s
Cloud Apache Container / Build-and-Push (82) (push) Successful in 1m39s
Cloud Apache Container / Build-and-Push (83) (push) Successful in 2m35s
Cloud Apache Container / Build-and-Push (85) (push) Has been cancelled
Cloud Apache Container / Build-FPM-Images (74) (push) Has been cancelled
Cloud Apache Container / Build-FPM-Images (80) (push) Has been cancelled
Cloud Apache Container / Build-FPM-Images (81) (push) Has been cancelled
Cloud Apache Container / Build-FPM-Images (82) (push) Has been cancelled
Cloud Apache Container / Build-FPM-Images (83) (push) Has been cancelled
Cloud Apache Container / Build-FPM-Images (84) (push) Has been cancelled
Cloud Apache Container / Build-FPM-Images (85) (push) Has been cancelled
Cloud Apache Container / Build-Shared-httpd (push) Has been cancelled
Cloud Apache Container / Build-and-Push (84) (push) Has been cancelled
Add HEIC/HEIF/AVIF support + fix MariaDB repo for AlmaLinux 10
Added ImageMagick-heic package to both Dockerfile and Dockerfile.fpm.
This is a separate EPEL subpackage that provides HEIC, HEIF, and AVIF
format support via libheif. Without it, ImageMagick is installed but
cannot process iPhone photos and modern image formats.

Also fixed MariaDB repo URL: AlmaLinux 10 uses $releasever=10 but
MariaDB mirrors don't have an 'almalinux10' directory. Changed to
'rhel10' which is the supported path for EL10 derivatives.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 15:48:58 -07:00
2025-07-28 07:29:03 -07:00

Cloud Apache Container

This is a base container for running PHP-based applications, supporting multiple PHP versions (7.4, 8.0, 8.1, 8.2, 8.3, 8.4). The default is PHP 8.3. The container is based on AlmaLinux 9 and uses Apache with mod_ssl. It is designed for both development and production use.

You must have Docker or compatible containerization software running.


What's New?

  • Optimized Image: The Dockerfile has been refactored for smaller size, faster builds, and improved security. Unnecessary files and caches are removed during build.
  • Pre-built Images for Each PHP Version: On every push, images for all supported PHP versions are built and pushed to the registry. You can pull the exact version you need (e.g., cac:php74, cac:php84, or cac:latest).
  • .dockerignore Added: The build context is now minimized, making builds faster and more secure.

Quick Start: Local Development with local-dev.sh

The easiest way to start a local development environment is with the provided local-dev.sh script. This script automates container setup, volume creation, log directories, and WordPress installation.

Usage Example

./local-dev.sh -n local-dev

Flags:

  • -n Name of the container (required)
  • -p HTTP port (default: 80)
  • -s HTTPS port (default: 443)
  • -r Root path for files and database (default: current directory)
  • -a PHP version (default: 8.3; options: 74, 80, 81, 82, 83, 84)
  • -v Enable verbose mode
  • -h Show help

The script will:

  • Create a user directory and log folders
  • Create a Docker volume for MySQL
  • Start the container with the correct environment variables
  • Generate helper scripts in your root path:
    • instance_start Start the container
    • instance_stop Stop the container
    • instance_logs Tail Apache logs
    • instance_db_info Show MySQL credentials
  • Install WordPress in your web root
  • Print MySQL credentials

Manual Docker Usage

You can also run the container manually:

mkdir -p local-development/domain.tld
cd local-development/domain.tld
mkdir user
mkdir -p user/logs/{apache,system}
docker run -d -it -p 80:80 -p 443:443 -e PHPVER=84 -e environment=DEV --mount type=bind,source="$(pwd)"/user,target=/home/myuser -v"$name-mysql":/var/lib/mysql -e uid=30001 -e user=myuser -e domain=localhost --name local-dev  repo.anhonesthost.net/cloud-hosting-platform/cac:latest

Accessing the Container

docker exec -it local-dev /bin/bash

WordPress Installation

If using local-dev.sh, WordPress is installed automatically. For manual setup:

cat /home/myuser/mysql_creds
su - myuser
cd ~/public_html
wp core download

Then visit https://localhost (accept the SSL warning) to complete setup.


Features

  • Multiple PHP Versions: 7.4, 8.0, 8.1, 8.2, 8.3, 8.4 (set with PHPVER or -a flag)
  • Pre-built Images: Pull the image for your desired PHP version directly from the registry. No need to build locally unless customizing.
  • Optimized Build: Smaller, faster, and more secure images thanks to the improved Dockerfile and .dockerignore.
  • Automatic Database Setup: MariaDB is started in DEV mode, credentials are auto-generated and stored in /home/$user/mysql_creds.
  • Database Backups: Cron job backs up the database every 15 minutes to /home/$user/_db_backups.
  • Log Management: Log rotation compresses logs older than 3 days and deletes those older than 7 days.
  • Memcached: Started automatically in DEV mode.
  • SSL: Self-signed certificate enabled by default.
  • Default Web Content: /home/$user/public_html is the web root. /ping endpoint and phpinfo.php are available for diagnostics.
  • Helper Scripts: instance_start, instance_stop, instance_logs, instance_db_info (created by local-dev.sh).

Environment Variables

Required:

  • uid User ID for file permissions
  • user Username for file permissions
  • domain Primary domain for configuration

Optional:

  • environment Set to DEV to start memcached and MySQL locally for development
  • serveralias Comma-separated list of alternative hostnames
  • PHPVER PHP version (see above)

Helpful Notes

  • To restart the instance: ./instance_start or docker start {container-name}
  • To stop: ./instance_stop or docker stop {container-name}
  • To view logs: ./instance_logs or docker logs -f {container-name}
  • To get DB credentials: ./instance_db_info or cat /home/$user/mysql_creds
  • To delete a container: docker rm {container-name} (does not delete user files or DB volume)
  • To view running containers: docker ps
  • To view all containers: docker ps --all
  • To view images: docker images

Troubleshooting

  • The first run may take several minutes as dependencies are installed.
  • If you need to change PHP version, stop and remove the container, then recreate with the desired version.
  • For advanced configuration, see the scripts in the scripts/ directory.
  • The image is optimized for size and speed, but local development in DEV mode may install additional packages (MariaDB, memcached) at runtime using microdnf.
  • The build context is minimized by the included .dockerignore file.
Description
No description provided
Readme 191 KiB
Languages
Shell 79.9%
Smarty 12.7%
Dockerfile 6.5%
PHP 0.9%