This guide provides a setup for running Froxlor with Docker Compose, offering more configuration options and flexibility compared to basic Docker containers.
Create a docker-compose.yml file with the following content:
version: '3.8'
services:
froxlor:
image: froxlor/froxlor:latest
container_name: froxlor
ports:
- "8080:80"
- "443:443"
volumes:
- ./data:/var/www/froxlor
- ./logs:/var/log/apache2
environment:
- MYSQL_ROOT_PASSWORD=your_secure_root_password
- FROXLOR_DB_HOST=mysql
- FROXLOR_DB_USER=froxlor
- FROXLOR_DB_PASS=your_froxlor_db_password
- FROXLOR_DB_NAME=froxlor
depends_on:
- mysql
restart: unless-stopped
mysql:
image: mysql:8.0
container_name: froxlor-mysql
environment:
- MYSQL_ROOT_PASSWORD=your_secure_root_password
- MYSQL_DATABASE=froxlor
- MYSQL_USER=froxlor
- MYSQL_PASSWORD=your_froxlor_db_password
volumes:
- froxlor_mysql_data:/var/lib/mysql
restart: unless-stopped
volumes:
froxlor_mysql_data:
| Variable | Description | Default |
|---|---|---|
MYSQL_ROOT_PASSWORD |
MySQL root password | Required |
FROXLOR_DB_HOST |
Database host | mysql |
FROXLOR_DB_USER |
Database user | froxlor |
FROXLOR_DB_PASS |
Database password | Required |
FROXLOR_DB_NAME |
Database name | froxlor |
APACHE_PORT |
Apache port inside container | 80 |
APACHE_SSL_PORT |
Apache SSL port inside container | 443 |
For custom configurations, mount additional volumes:
version: '3.8'
services:
froxlor:
image: froxlor/froxlor:latest
container_name: froxlor
ports:
- "8080:80"
- "443:443"
volumes:
- ./data:/var/www/froxlor
- ./logs:/var/log/apache2
- ./config:/etc/apache2/sites-available
- ./custom:/var/www/froxlor/lib/userdata.inc.php
environment:
- MYSQL_ROOT_PASSWORD=your_secure_root_password
- FROXLOR_DB_HOST=mysql
- FROXLOR_DB_USER=froxlor
- FROXLOR_DB_PASS=your_froxlor_db_password
- FROXLOR_DB_NAME=froxlor
depends_on:
- mysql
restart: unless-stopped
mysql:
image: mysql:8.0
container_name: froxlor-mysql
environment:
- MYSQL_ROOT_PASSWORD=your_secure_root_password
- MYSQL_DATABASE=froxlor
- MYSQL_USER=froxlor
- MYSQL_PASSWORD=your_froxlor_db_password
volumes:
- froxlor_mysql_data:/var/lib/mysql
- ./mysql-init:/docker-entrypoint-initdb.d
restart: unless-stopped
php-fpm:
image: php:8.1-fpm
container_name: froxlor-php-fpm
volumes:
- ./data:/var/www/froxlor
restart: unless-stopped
volumes:
froxlor_mysql_data:
If you prefer to use an external database instead of the bundled MySQL:
version: '3.8'
services:
froxlor:
image: froxlor/froxlor:latest
container_name: froxlor
ports:
- "8080:80"
- "443:443"
volumes:
- ./data:/var/www/froxlor
- ./logs:/var/log/apache2
environment:
- FROXLOR_DB_HOST=your_external_db_host
- FROXLOR_DB_USER=froxlor
- FROXLOR_DB_PASS=your_froxlor_db_password
- FROXLOR_DB_NAME=froxlor
- FROXLOR_DB_PORT=3306
restart: unless-stopped
For production environments, use a reverse proxy with SSL termination:
version: '3.8'
services:
nginx-proxy:
image: nginx:alpine
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./ssl:/etc/nginx/ssl
restart: unless-stopped
froxlor:
image: froxlor/froxlor:latest
container_name: froxlor
expose:
- "80"
- "443"
volumes:
- ./data:/var/www/froxlor
- ./logs:/var/log/apache2
environment:
- MYSQL_ROOT_PASSWORD=your_secure_root_password
- FROXLOR_DB_HOST=mysql
- FROXLOR_DB_USER=froxlor
- FROXLOR_DB_PASS=your_froxlor_db_password
- FROXLOR_DB_NAME=froxlor
depends_on:
- mysql
restart: unless-stopped
mysql:
image: mysql:8.0
container_name: froxlor-mysql
environment:
- MYSQL_ROOT_PASSWORD=your_secure_root_password
- MYSQL_DATABASE=froxlor
- MYSQL_USER=froxlor
- MYSQL_PASSWORD=your_froxlor_db_password
volumes:
- froxlor_mysql_data:/var/lib/mysql
restart: unless-stopped
volumes:
froxlor_mysql_data:
Create a backup script to regularly backup your Froxlor data:
#!/bin/bash
# Backup script for Froxlor Docker Compose setup
BACKUP_DIR="/path/to/backups"
DATE=$(date +%Y%m%d_%H%M%S)
# Create backup directory if it doesn't exist
mkdir -p $BACKUP_DIR
# Stop containers temporarily
docker-compose down
# Backup database
docker exec froxlor-mysql mysqldump -u froxlor -pyour_froxlor_db_password froxlor > $BACKUP_DIR/froxlor_db_$DATE.sql
# Backup configuration files
tar -czf $BACKUP_DIR/froxlor_config_$DATE.tar.gz -C ./data .
# Restart containers
docker-compose up -d
echo "Backup completed: $DATE"
docker-compose.yml file in your project directorydocker-compose up -d
http://localhost:8080 (or your server IP)docker-compose up -d
docker-compose down
docker-compose logs -f froxlor
docker-compose pull
docker-compose up -d
# Check running containers
docker-compose ps
# View logs for specific service
docker-compose logs mysql
# Execute commands inside container
docker-compose exec froxlor bash