# 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 ```bash ./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: ```bash 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 ```bash docker exec -it local-dev /bin/bash ``` --- ## WordPress Installation If using `local-dev.sh`, WordPress is installed automatically. For manual setup: ```bash 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 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.