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.
When to use this
Section titled “When to use this”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.
Prerequisites
Section titled “Prerequisites”- 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
Step-by-step walkthrough
Section titled “Step-by-step walkthrough”1. Clone the repository
Section titled “1. Clone the repository”git clone https://github.com/rconfig/rconfig8coredocker.gitcd rconfig8coredocker2. Configure the environment
Section titled “2. Configure the environment”Copy the bundled example and edit the values marked [EDIT]:
cp .env.example .env# then edit .envAt a minimum, review these:
RCONFIG_VERSION: the prebuilt release to run. Pin it (for example8.2.7) for production; it falls back tolatest.APP_URL: the URL users browse to, including the port if it is not 80 or 443.DB_PASSWORDandMYSQL_ROOT_PASSWORD: replace the defaults with strong, unique values.TIMEZONE: your local timezone.
3. Pull and start the containers
Section titled “3. Pull and start the containers”The image is prebuilt and published on Docker Hub, so there is nothing to compile.
# Pull the prebuilt multi-arch imagedocker compose pull
# Start all servicesdocker compose up -d
# Verify statusdocker compose ps4. Run the installation wizard
Section titled “4. Run the installation wizard”# Execute installation wizarddocker compose exec app php artisan v8core:install
# When prompted:# - "Add a cron entry for task scheduling?" -> yes5. Access the application
Section titled “5. Access the application”Open http://localhost:8080 in your browser and sign in with the default credentials:
- Username:
admin@domain.com - Password:
admin
Common gotchas
Section titled “Common gotchas”Post-installation checks
Section titled “Post-installation checks”Verify services
Section titled “Verify services”# Check all services runningdocker compose exec app supervisorctl status
# Expected output:# apache2 RUNNING# horizon RUNNING# redis-server RUNNING# schedule-run_00 RUNNINGAccess the Horizon dashboard
Section titled “Access the Horizon dashboard”Monitor queues at http://localhost:8080/horizon. For more on queue processing, see the Horizon queue manager.
Fix mail configuration errors (if needed)
Section titled “Fix mail configuration errors (if needed)”For testing and development environments, route mail to the log driver:
docker compose exec app bash -c "cat >> /var/www/html/rconfig/.env << 'EOF'MAIL_MAILER=logMAIL_FROM_ADDRESS=noreply@rconfig.localMAIL_FROM_NAME=rConfigEOF"
docker compose exec app php artisan config:cleardocker compose restart appCommon operations
Section titled “Common operations”View logs
Section titled “View logs”# Application logsdocker compose logs -f app
# Laravel logsdocker compose exec app tail -f /var/www/html/rconfig/storage/logs/laravel.logExecute Artisan commands
Section titled “Execute Artisan commands”docker compose exec app php artisan [command]
# Examples:docker compose exec app php artisan config:cleardocker compose exec app php artisan cache:cleardocker compose exec app php artisan horizon:statusRestart services
Section titled “Restart services”# Restart all containersdocker compose restart
# Restart specific servicedocker compose exec app supervisorctl restart horizonDatabase management
Section titled “Database management”Back up the database
Section titled “Back up the database”# Create backup with timestampdocker compose exec -T db mysqldump -u root -proot_password rconfig > rconfig-backup-$(date +%Y%m%d-%H%M%S).sqlRestore the database
Section titled “Restore the database”docker compose stop appdocker compose exec -T db mysql -u root -proot_password rconfig < rconfig-backup-20251222.sqldocker compose start appdocker compose exec app php artisan config:clearAccess the database
Section titled “Access the database”docker compose exec db mysql -u root -proot_password rconfigUpdates
Section titled “Updates”Automated update
Section titled “Automated update”chmod +x update.sh./update.shThe script handles backup, pull, and migrate in sequence.
Manual update
Section titled “Manual update”# Backupdocker 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 imagedocker compose pulldocker compose up -d
# Apply migrations. Caches are rebuilt automatically on container start.docker compose exec app php artisan migrate --forcedocker compose exec app php artisan horizon:terminateUpdate to a specific version
Section titled “Update to a specific version”Set RCONFIG_VERSION in .env to the release you want, then pull:
# .env: RCONFIG_VERSION=8.2.7docker compose pulldocker compose up -ddocker compose exec app php artisan migrate --forceTroubleshooting
Section titled “Troubleshooting”Container won’t start
Section titled “Container won’t start”# Check logsdocker compose logs app
# Check port conflictsnetstat -tulpn | grep 8080
# Fix permissionsdocker compose exec app chown -R www-data:www-data /var/www/html/rconfig/storagedocker compose exec app chmod -R 775 /var/www/html/rconfig/storageDatabase connection errors
Section titled “Database connection errors”# Check database healthdocker compose ps db
# Wait for initialization (first startup)sleep 30 && docker compose restart app
# Recreate databasedocker compose downdocker compose up -d dbsleep 30docker compose up -d appPermission errors (500)
Section titled “Permission errors (500)”docker compose exec app chown -R www-data:www-data /var/www/html/rconfig/storage /var/www/html/rconfig/bootstrap/cachedocker compose exec app chmod -R 775 /var/www/html/rconfig/storage /var/www/html/rconfig/bootstrap/cachedocker compose exec app php artisan config:cleardocker compose exec app php artisan cache:clearHorizon not processing
Section titled “Horizon not processing”# Check statusdocker compose exec app php artisan horizon:status
# Restartdocker compose exec app supervisorctl restart horizon# ORdocker compose exec app php artisan horizon:terminateApplication slow
Section titled “Application slow”# Clear cachesdocker compose exec app php artisan optimize:clear
# Optimizedocker compose exec app php artisan optimize
# Restartdocker compose restart appSecurity hardening
Section titled “Security hardening”Change ports
Section titled “Change ports”Edit docker-compose.yml:
services: app: ports: - "9443:80" # External port db: ports: - "127.0.0.1:3306:3306" # Localhost onlyFirewall rules
Section titled “Firewall rules”# Allow specific IPs onlysudo ufw allow from 10.0.0.0/8 to any port 8080Secure files
Section titled “Secure files”chmod 600 .envecho ".env" >> .gitignoreFor a broader checklist, see security hardening for rConfig V8 Core.
Performance optimization
Section titled “Performance optimization”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:
docker compose restart appMigration from a traditional install
Section titled “Migration from a traditional install”# 1. Backup existingmysqldump -u root -p rconfig > migration-backup.sqltar -czf storage-backup.tar.gz /path/to/rconfig/storage
# 2. Deploy Docker (follow the walkthrough above)
# 3. Restore databasedocker compose exec -T db mysql -u root -proot_password rconfig < migration-backup.sql
# 4. Restore storagetar -xzf storage-backup.tar.gzdocker 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 cachesdocker compose exec app php artisan config:cleardocker compose restart appCan 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?
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/.envdocker compose exec app php artisan config:cleardocker compose restart appCan 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.
Resources
Section titled “Resources”- GitHub: https://github.com/rconfig/rconfig
- Docker repo: https://github.com/rconfig/rconfig8coredocker
- Docs: https://v8coredocs.rconfig.com
- Support: https://github.com/rconfig/rconfig/issues