Some checks failed
Cloud Apache Container / Build-and-Push (74) (push) Failing after 56s
Cloud Apache Container / Build-and-Push (80) (push) Failing after 36s
Cloud Apache Container / Build-and-Push (81) (push) Failing after 56s
Cloud Apache Container / Build-and-Push (82) (push) Failing after 55s
Cloud Apache Container / Build-and-Push (83) (push) Failing after 40s
Cloud Apache Container / Build-and-Push (84) (push) Failing after 57s
improve build size and speed for images.
134 lines
5.2 KiB
Markdown
134 lines
5.2 KiB
Markdown
# 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
|
||
|
||
```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)
|
||
- **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. |