|
|
|
@@ -0,0 +1,316 @@
|
|
|
|
|
# FrankenPHP Docker Environment
|
|
|
|
|
|
|
|
|
|
A modern, high-performance Docker environment for PHP applications using FrankenPHP, featuring built-in HTTP/2, HTTP/3, and automatic HTTPS support with Node.js integration.
|
|
|
|
|
|
|
|
|
|
## Features
|
|
|
|
|
|
|
|
|
|
- **FrankenPHP Server**: Modern PHP server with HTTP/2, HTTP/3, and automatic HTTPS
|
|
|
|
|
- **MariaDB Database**: Reliable database server with persistent data storage
|
|
|
|
|
- **Node.js Integration**: Full Node.js runtime for frontend tooling and build processes
|
|
|
|
|
- **Framework Support**: Optimized for OpenCart, Laravel, and Symfony
|
|
|
|
|
- **Multiple Modes**: Local development, proxy, and production configurations
|
|
|
|
|
- **Rich PHP Extensions**: Comprehensive set of PHP extensions including Redis, APCu, and ImageMagick
|
|
|
|
|
- **Composer & NPM**: PHP and JavaScript dependency management
|
|
|
|
|
- **Volume Persistence**: Persistent data for database and Caddy certificates
|
|
|
|
|
- **Hot Reload**: Automatic code reloading during development
|
|
|
|
|
|
|
|
|
|
## Requirements
|
|
|
|
|
|
|
|
|
|
- Docker
|
|
|
|
|
- Docker Compose
|
|
|
|
|
- Git (optional, for cloning)
|
|
|
|
|
|
|
|
|
|
## Quick Start
|
|
|
|
|
|
|
|
|
|
1. **Clone or download the project**
|
|
|
|
|
```bash
|
|
|
|
|
git clone <repository-url>
|
|
|
|
|
cd franken
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
2. **Configure environment variables**
|
|
|
|
|
Edit the `.env` file with your preferred settings:
|
|
|
|
|
```bash
|
|
|
|
|
# Example configuration
|
|
|
|
|
PHP_VERSION=8.2
|
|
|
|
|
FRAMEWORK=opencart # or laravel, symfony
|
|
|
|
|
MODE=proxy # or local, prod
|
|
|
|
|
PORT=80
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
3. **Start the environment**
|
|
|
|
|
```bash
|
|
|
|
|
docker-compose up -d
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
4. **Access your application**
|
|
|
|
|
- Local/Proxy mode: http://localhost:{PORT} (default: http://localhost:80)
|
|
|
|
|
- Production: https://yourdomain.com (configure DNS and SSL certificates)
|
|
|
|
|
|
|
|
|
|
## Configuration
|
|
|
|
|
|
|
|
|
|
### Environment Variables (.env)
|
|
|
|
|
|
|
|
|
|
| Variable | Description | Options/Default |
|
|
|
|
|
|----------|-------------|----------------|
|
|
|
|
|
| `PHP_VERSION` | PHP version to use | `8.0`, `8.1`, `8.2`, `8.3`, `8.4`, `8.5` (default: `8.2`) |
|
|
|
|
|
| `FRAMEWORK` | Target PHP framework | `opencart`, `laravel`, `symfony` (default: `opencart`) |
|
|
|
|
|
| `MODE` | Environment mode | `local`, `proxy`, `prod` (default: `proxy`) |
|
|
|
|
|
| `PORT` | External port for HTTP | Any available port (default: `80`) |
|
|
|
|
|
| `MYSQL_ROOT_PASSWORD` | MariaDB root password | `root` |
|
|
|
|
|
| `MYSQL_DATABASE` | Database name | `database` |
|
|
|
|
|
| `MYSQL_USER_DATABASE` | Database user | `app` |
|
|
|
|
|
| `MYSQL_PASSWORD_DATABASE` | Database user password | `secret` |
|
|
|
|
|
| `SERVER_NAME` | Domain for production | Your domain (leave empty for local/proxy) |
|
|
|
|
|
|
|
|
|
|
### Modes Explained
|
|
|
|
|
|
|
|
|
|
- **local**: Development mode with internal TLS disabled
|
|
|
|
|
- **proxy**: Proxy mode for use behind a reverse proxy or load balancer
|
|
|
|
|
- **prod**: Production mode with HTTPS and HTTP/2/3 enabled
|
|
|
|
|
|
|
|
|
|
### PHP Configuration
|
|
|
|
|
|
|
|
|
|
Custom PHP settings can be added to `php.ini`. The file is mounted as a read-only volume at `/usr/local/etc/php/php.ini`.
|
|
|
|
|
|
|
|
|
|
### Framework Support
|
|
|
|
|
|
|
|
|
|
The environment is optimized for different PHP frameworks:
|
|
|
|
|
|
|
|
|
|
#### OpenCart (Default)
|
|
|
|
|
- Container name: `opencart{PHP_VERSION}` (e.g., `opencart8.2`)
|
|
|
|
|
- Web root: `./www` → `/app/public`
|
|
|
|
|
- Optimized for e-commerce applications
|
|
|
|
|
|
|
|
|
|
#### Laravel
|
|
|
|
|
- Container name: `laravel{PHP_VERSION}`
|
|
|
|
|
- Web root: `./www` → `/app` (uncomment in docker-compose.yml)
|
|
|
|
|
- Includes storage permission fixes
|
|
|
|
|
|
|
|
|
|
#### Symfony
|
|
|
|
|
- Container name: `symfony{PHP_VERSION}`
|
|
|
|
|
- Web root: `./www` → `/app` (uncomment in docker-compose.yml)
|
|
|
|
|
- Includes storage permission fixes
|
|
|
|
|
|
|
|
|
|
### Production Mode
|
|
|
|
|
|
|
|
|
|
For production deployment:
|
|
|
|
|
|
|
|
|
|
1. Set `MODE=prod` in `.env`
|
|
|
|
|
2. Configure `SERVER_NAME` with your domain
|
|
|
|
|
3. Uncomment HTTPS ports in `docker-compose.yml`:
|
|
|
|
|
```yaml
|
|
|
|
|
ports:
|
|
|
|
|
- "443:443" # HTTPS
|
|
|
|
|
- "443:443/udp" # HTTP/3
|
|
|
|
|
```
|
|
|
|
|
4. Set up DNS to point to your server
|
|
|
|
|
5. FrankenPHP will automatically obtain SSL certificates
|
|
|
|
|
|
|
|
|
|
## Docker Services
|
|
|
|
|
|
|
|
|
|
### PHP Service (FrankenPHP)
|
|
|
|
|
- **Base Image**: `dunglas/frankenphp:php${PHP_VERSION}-alpine`
|
|
|
|
|
- **Container Name**: `{FRAMEWORK}{PHP_VERSION}` (e.g., `opencart8.2`)
|
|
|
|
|
- **Features**:
|
|
|
|
|
- HTTP/2 and HTTP/3 support
|
|
|
|
|
- Automatic HTTPS with Let's Encrypt
|
|
|
|
|
- Built-in Caddy web server
|
|
|
|
|
- PHP-FPM compatibility
|
|
|
|
|
- Node.js runtime included
|
|
|
|
|
|
|
|
|
|
### Database Service (MariaDB)
|
|
|
|
|
- **Image**: `mariadb:latest`
|
|
|
|
|
- **Features**:
|
|
|
|
|
- Persistent data storage
|
|
|
|
|
- User and database creation
|
|
|
|
|
- Optimized for web applications
|
|
|
|
|
|
|
|
|
|
## PHP Extensions Included
|
|
|
|
|
|
|
|
|
|
The environment includes a comprehensive set of PHP extensions:
|
|
|
|
|
|
|
|
|
|
- **Database**: `pdo_mysql`, `mysqli`
|
|
|
|
|
- **Image Processing**: `gd`, `imagick`, `exif`
|
|
|
|
|
- **Internationalization**: `intl`, `mbstring`, `iconv`
|
|
|
|
|
- **Data Formats**: `xml`, `dom`, `simplexml`, `zip`, `json`
|
|
|
|
|
- **Security**: `openssl`, `sodium`
|
|
|
|
|
- **Performance**: `opcache`, `apcu`, `redis`
|
|
|
|
|
- **Utilities**: `curl`, `fileinfo`, `ctype`, `tokenizer`, `bcmath`, `soap`, `sqlite3`, `xsl`
|
|
|
|
|
|
|
|
|
|
## Development Workflow
|
|
|
|
|
|
|
|
|
|
1. **Code Changes**: Edit files in the `www/` directory
|
|
|
|
|
2. **Database Access**: Connect to `localhost:3306` with configured credentials
|
|
|
|
|
3. **Node.js Usage**: Run npm/yarn commands in the container:
|
|
|
|
|
```bash
|
|
|
|
|
docker-compose exec php npm install
|
|
|
|
|
docker-compose exec php npm run build
|
|
|
|
|
```
|
|
|
|
|
4. **Logs**: View container logs with `docker-compose logs -f`
|
|
|
|
|
5. **Rebuild**: After Dockerfile changes: `docker-compose up --build`
|
|
|
|
|
|
|
|
|
|
## File Structure
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
franken/
|
|
|
|
|
├── docker-compose.yml # Docker services configuration
|
|
|
|
|
├── Dockerfile # PHP container build instructions
|
|
|
|
|
├── .env # Environment variables
|
|
|
|
|
├── php.ini # Custom PHP configuration
|
|
|
|
|
├── www/ # Web application files
|
|
|
|
|
│ └── index.php # Sample PHP file
|
|
|
|
|
└── README.md # This file
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Troubleshooting
|
|
|
|
|
|
|
|
|
|
### Common Issues
|
|
|
|
|
|
|
|
|
|
1. **Port conflicts**: Change the `PORT` variable in `.env`
|
|
|
|
|
2. **Permission issues**: Ensure proper file permissions in `www/` directory
|
|
|
|
|
3. **Database connection**: Verify credentials in `.env` match application config
|
|
|
|
|
4. **SSL issues**: Check domain configuration and DNS propagation
|
|
|
|
|
5. **Framework switching**: Update `FRAMEWORK` in `.env` and rebuild containers
|
|
|
|
|
|
|
|
|
|
### Useful Commands
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# View logs
|
|
|
|
|
docker-compose logs -f
|
|
|
|
|
|
|
|
|
|
# Access container shell
|
|
|
|
|
docker-compose exec php sh
|
|
|
|
|
|
|
|
|
|
# Run Node.js commands
|
|
|
|
|
docker-compose exec php npm install
|
|
|
|
|
docker-compose exec php npm run dev
|
|
|
|
|
|
|
|
|
|
# Restart services
|
|
|
|
|
docker-compose restart
|
|
|
|
|
|
|
|
|
|
# Rebuild and restart
|
|
|
|
|
docker-compose up --build -d
|
|
|
|
|
|
|
|
|
|
# Stop and remove containers
|
|
|
|
|
docker-compose down
|
|
|
|
|
|
|
|
|
|
# Clean up volumes (WARNING: deletes data)
|
|
|
|
|
docker-compose down -v
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Contributing
|
|
|
|
|
|
|
|
|
|
1. Fork the repository
|
|
|
|
|
2. Create a feature branch
|
|
|
|
|
3. Make your changes
|
|
|
|
|
4. Test thoroughly
|
|
|
|
|
5. Submit a pull request
|
|
|
|
|
|
|
|
|
|
## License
|
|
|
|
|
|
|
|
|
|
[Specify your license here]
|
|
|
|
|
|
|
|
|
|
## Support
|
|
|
|
|
|
|
|
|
|
For issues and questions:
|
|
|
|
|
- Check the troubleshooting section
|
|
|
|
|
- Review FrankenPHP documentation: https://frankenphp.dev/
|
|
|
|
|
- Open an issue in the repository
|
|
|
|
|
|
|
|
|
|
## Changelog
|
|
|
|
|
|
|
|
|
|
### [Latest Version]
|
|
|
|
|
- Added Node.js integration for frontend tooling
|
|
|
|
|
- Enhanced PHP extensions (Redis, APCu, ImageMagick, etc.)
|
|
|
|
|
- Framework-specific container naming
|
|
|
|
|
- Added proxy mode for reverse proxy setups
|
|
|
|
|
- Improved volume management and networking
|
|
|
|
|
- Updated configuration options and documentation
|
|
|
|
|
- **Image**: `dunglas/frankenphp:php${PHP_VERSION}-alpine`
|
|
|
|
|
- **Features**:
|
|
|
|
|
- HTTP/2 and HTTP/3 support
|
|
|
|
|
- Automatic HTTPS with Let's Encrypt
|
|
|
|
|
- Built-in Caddy web server
|
|
|
|
|
- PHP-FPM compatibility
|
|
|
|
|
|
|
|
|
|
### Database Service (MariaDB)
|
|
|
|
|
- **Image**: `mariadb:latest`
|
|
|
|
|
- **Features**:
|
|
|
|
|
- Persistent data storage
|
|
|
|
|
- User and database creation
|
|
|
|
|
- Optimized for web applications
|
|
|
|
|
|
|
|
|
|
## Development Workflow
|
|
|
|
|
|
|
|
|
|
1. **Code Changes**: Edit files in the `www/` directory
|
|
|
|
|
2. **Database Access**: Connect to `localhost:3306` with configured credentials
|
|
|
|
|
3. **Logs**: View container logs with `docker-compose logs -f`
|
|
|
|
|
4. **Rebuild**: After Dockerfile changes: `docker-compose up --build`
|
|
|
|
|
|
|
|
|
|
## File Structure
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
franken/
|
|
|
|
|
├── docker-compose.yml # Docker services configuration
|
|
|
|
|
├── Dockerfile # PHP container build instructions
|
|
|
|
|
├── .env # Environment variables
|
|
|
|
|
├── php.ini # Custom PHP configuration
|
|
|
|
|
├── www/ # Web application files
|
|
|
|
|
│ └── index.php # Sample PHP file
|
|
|
|
|
└── README.md # This file
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Troubleshooting
|
|
|
|
|
|
|
|
|
|
### Common Issues
|
|
|
|
|
|
|
|
|
|
1. **Port conflicts**: Change port mappings in `docker-compose.yml`
|
|
|
|
|
2. **Permission issues**: Ensure proper file permissions in `www/` directory
|
|
|
|
|
3. **Database connection**: Verify credentials in `.env` match application config
|
|
|
|
|
4. **SSL issues**: Check domain configuration and DNS propagation
|
|
|
|
|
|
|
|
|
|
### Useful Commands
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# View logs
|
|
|
|
|
docker-compose logs -f
|
|
|
|
|
|
|
|
|
|
# Restart services
|
|
|
|
|
docker-compose restart
|
|
|
|
|
|
|
|
|
|
# Rebuild and restart
|
|
|
|
|
docker-compose up --build -d
|
|
|
|
|
|
|
|
|
|
# Stop and remove containers
|
|
|
|
|
docker-compose down
|
|
|
|
|
|
|
|
|
|
# Clean up volumes (WARNING: deletes data)
|
|
|
|
|
docker-compose down -v
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Contributing
|
|
|
|
|
|
|
|
|
|
1. Fork the repository
|
|
|
|
|
2. Create a feature branch
|
|
|
|
|
3. Make your changes
|
|
|
|
|
4. Test thoroughly
|
|
|
|
|
5. Submit a pull request
|
|
|
|
|
|
|
|
|
|
## License
|
|
|
|
|
|
|
|
|
|
[Specify your license here]
|
|
|
|
|
|
|
|
|
|
## Support
|
|
|
|
|
|
|
|
|
|
For issues and questions:
|
|
|
|
|
- Check the troubleshooting section
|
|
|
|
|
- Review FrankenPHP documentation: https://frankenphp.dev/
|
|
|
|
|
- Open an issue in the repository
|
|
|
|
|
|
|
|
|
|
## Changelog
|
|
|
|
|
|
|
|
|
|
### [Version]
|
|
|
|
|
- Initial release with FrankenPHP and MariaDB support
|
|
|
|
|
- Support for multiple PHP frameworks
|
|
|
|
|
- Development and production mode configurations
|