Skip to content

rConfig V8 Core Docker Deployment

After reading this page, you can deploy rConfig V8 Core in containers using Docker and Docker Compose, run the installation wizard, and sign in to a working instance. It also covers day-to-day operations: backups, updates, troubleshooting, and basic hardening.

Use Docker when you want a fast, repeatable rConfig V8 Core install without configuring PHP, a web server, and a database by hand. It suits lab, evaluation, and small-team deployments where everything runs on a single host.

For a traditional package-based install on a dedicated server, follow the V8 Core installation guide instead.

  • Docker Engine 20.10 or later
  • Docker Compose 2.0 or later
  • Git
  • A host with at least 2GB RAM
  • Port 8080 available, or an alternative port you can configure
Terminal window
git clone https://github.com/rconfig/rconfig8coredocker.git
cd rconfig8coredocker

Copy the bundled example and edit the values marked [EDIT]:

Terminal window
cp .env.example .env
# then edit .env

At a minimum, review these:

  • RCONFIG_VERSION: the prebuilt release to run. Pin it (for example 8.2.7) for production; it falls back to latest.
  • APP_URL: the URL users browse to, including the port if it is not 80 or 443.
  • DB_PASSWORD and MYSQL_ROOT_PASSWORD: replace the defaults with strong, unique values.
  • TIMEZONE: your local timezone.

The image is prebuilt and published on Docker Hub, so there is nothing to compile.

Terminal window
# Pull the prebuilt multi-arch image
docker compose pull
# Start all services
docker compose up -d
# Verify status
docker compose ps
Terminal window
# Execute installation wizard
docker compose exec app php artisan v8core:install
# When prompted:
# - "Add a cron entry for task scheduling?" -> yes

Open http://localhost:8080 in your browser and sign in with the default credentials:

  • Username: admin@domain.com
  • Password: admin
Terminal window
# Check all services running
docker compose exec app supervisorctl status
# Expected output:
# apache2 RUNNING
# horizon RUNNING
# redis-server RUNNING
# schedule-run_00 RUNNING

Monitor queues at http://localhost:8080/horizon. For more on queue processing, see the Horizon queue manager.

For testing and development environments, route mail to the log driver:

Terminal window
docker compose exec app bash -c "cat >> /var/www/html/rconfig/.env << 'EOF'
MAIL_MAILER=log
MAIL_FROM_ADDRESS=noreply@rconfig.local
MAIL_FROM_NAME=rConfig
EOF"
docker compose exec app php artisan config:clear
docker compose restart app
Terminal window
# Application logs
docker compose logs -f app
# Laravel logs
docker compose exec app tail -f /var/www/html/rconfig/storage/logs/laravel.log
Terminal window
docker compose exec app php artisan [command]
# Examples:
docker compose exec app php artisan config:clear
docker compose exec app php artisan cache:clear
docker compose exec app php artisan horizon:status
Terminal window
# Restart all containers
docker compose restart
# Restart specific service
docker compose exec app supervisorctl restart horizon
Terminal window
# Create backup with timestamp
docker compose exec -T db mysqldump -u root -proot_password rconfig > rconfig-backup-$(date +%Y%m%d-%H%M%S).sql
Terminal window
docker compose stop app
docker compose exec -T db mysql -u root -proot_password rconfig < rconfig-backup-20251222.sql
docker compose start app
docker compose exec app php artisan config:clear
Terminal window
docker compose exec db mysql -u root -proot_password rconfig
Terminal window
chmod +x update.sh
./update.sh

The script handles backup, pull, and migrate in sequence.

Terminal window
# Backup
docker compose exec -T db mysqldump -u root -proot_password rconfig > backup.sql
# Set RCONFIG_VERSION in .env to the release you want, then pull the new image
docker compose pull
docker compose up -d
# Apply migrations. Caches are rebuilt automatically on container start.
docker compose exec app php artisan migrate --force
docker compose exec app php artisan horizon:terminate

Set RCONFIG_VERSION in .env to the release you want, then pull:

Terminal window
# .env: RCONFIG_VERSION=8.2.7
docker compose pull
docker compose up -d
docker compose exec app php artisan migrate --force
Terminal window
# Check logs
docker compose logs app
# Check port conflicts
netstat -tulpn | grep 8080
# Fix permissions
docker compose exec app chown -R www-data:www-data /var/www/html/rconfig/storage
docker compose exec app chmod -R 775 /var/www/html/rconfig/storage
Terminal window
# Check database health
docker compose ps db
# Wait for initialization (first startup)
sleep 30 && docker compose restart app
# Recreate database
docker compose down
docker compose up -d db
sleep 30
docker compose up -d app
Terminal window
docker compose exec app chown -R www-data:www-data /var/www/html/rconfig/storage /var/www/html/rconfig/bootstrap/cache
docker compose exec app chmod -R 775 /var/www/html/rconfig/storage /var/www/html/rconfig/bootstrap/cache
docker compose exec app php artisan config:clear
docker compose exec app php artisan cache:clear
Terminal window
# Check status
docker compose exec app php artisan horizon:status
# Restart
docker compose exec app supervisorctl restart horizon
# OR
docker compose exec app php artisan horizon:terminate
Terminal window
# Clear caches
docker compose exec app php artisan optimize:clear
# Optimize
docker compose exec app php artisan optimize
# Restart
docker compose restart app

Edit docker-compose.yml:

services:
app:
ports:
- "9443:80" # External port
db:
ports:
- "127.0.0.1:3306:3306" # Localhost only
Terminal window
# Allow specific IPs only
sudo ufw allow from 10.0.0.0/8 to any port 8080
Terminal window
chmod 600 .env
echo ".env" >> .gitignore

For a broader checklist, see security hardening for rConfig V8 Core.

The container caches config, routes, and views on every start and ships an optimised autoloader, so there is nothing to run by hand. If you change .env and want the caches rebuilt, restart the app container and the entrypoint does it for you:

Terminal window
docker compose restart app
Terminal window
# 1. Backup existing
mysqldump -u root -p rconfig > migration-backup.sql
tar -czf storage-backup.tar.gz /path/to/rconfig/storage
# 2. Deploy Docker (follow the walkthrough above)
# 3. Restore database
docker compose exec -T db mysql -u root -proot_password rconfig < migration-backup.sql
# 4. Restore storage
tar -xzf storage-backup.tar.gz
docker cp storage/. rconfig_app:/var/www/html/rconfig/storage/
docker compose exec app chown -R www-data:www-data /var/www/html/rconfig/storage
# 5. Clear caches
docker compose exec app php artisan config:clear
docker compose restart app

Can I run multiple instances on the same server? Yes. Clone the repository to different directories and change the published ports in each docker-compose.yml.

How do I change the database password after install?

Terminal window
docker compose exec db mysql -u root -proot_password -e "ALTER USER 'rconfig_user'@'%' IDENTIFIED BY 'new_password';"
docker compose exec app sed -i 's/DB_PASSWORD=.*/DB_PASSWORD=new_password/' /var/www/html/rconfig/.env
docker compose exec app php artisan config:clear
docker compose restart app

Can I use an external database? Yes. Remove the db service from docker-compose.yml and update .env with your external database credentials.

How do I enable HTTPS/SSL? Follow SSL configuration in rConfig V8 Core.