Added a healthcheck to the container adjusted Apache limits for memory consumption switch to microdnf for improved memory usage
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.
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 containerinstance_stop
– Stop the containerinstance_logs
– Tail Apache logsinstance_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) - 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 andphpinfo.php
are available for diagnostics. - Helper Scripts:
instance_start
,instance_stop
,instance_logs
,instance_db_info
(created bylocal-dev.sh
).
Environment Variables
Required:
uid
– User ID for file permissionsuser
– Username for file permissionsdomain
– Primary domain for configuration
Optional:
environment
– Set toDEV
to start memcached and MySQL locally for developmentserveralias
– Comma-separated list of alternative hostnamesPHPVER
– PHP version (see above)
Helpful Notes
- To restart the instance:
./instance_start
ordocker start {container-name}
- To stop:
./instance_stop
ordocker stop {container-name}
- To view logs:
./instance_logs
ordocker logs -f {container-name}
- To get DB credentials:
./instance_db_info
orcat /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.