# Docker Deployment Guide for MerchBay Admin ## Prerequisites - Docker installed on your system - Docker Compose installed on your system ## Quick Start ### 1. Build and Start Containers ```bash docker-compose up -d --build ``` This will: - Build the application container - Start MySQL database - Start PHPMyAdmin - Set up networking between containers ### 2. Access the Application - **Application**: http://localhost:8080 - **PHPMyAdmin**: http://localhost:8081 ### 3. Run Database Migrations ```bash docker-compose exec app php artisan migrate ``` ### 4. Seed Database (if needed) ```bash docker-compose exec app php artisan db:seed ``` ## Useful Commands ### View Container Logs ```bash docker-compose logs -f app ``` ### Access Container Shell ```bash docker-compose exec app bash ``` ### Stop Containers ```bash docker-compose down ``` ### Stop and Remove Volumes (Clean Slate) ```bash docker-compose down -v ``` ### Rebuild Containers ```bash docker-compose up -d --build --force-recreate ``` ### Run Artisan Commands ```bash docker-compose exec app php artisan [command] ``` ### Clear Laravel Cache ```bash docker-compose exec app php artisan cache:clear docker-compose exec app php artisan config:clear docker-compose exec app php artisan route:clear docker-compose exec app php artisan view:clear ``` ### Install/Update Composer Dependencies ```bash docker-compose exec app composer install # or docker-compose exec app composer update ``` ## Environment Configuration Edit the `docker-compose.yml` file to customize: - Database credentials - Port mappings - Environment variables For production deployment, update the `APP_ENV` and `APP_DEBUG` values: ```yaml environment: - APP_ENV=production - APP_DEBUG=false ``` ## Database Connection The application connects to the MySQL container using these credentials (defined in docker-compose.yml): - **Host**: db - **Database**: merchbay_admin - **Username**: merchbay_user - **Password**: merchbay_password ## Troubleshooting ### Permission Issues If you encounter permission errors: ```bash docker-compose exec app chown -R www-data:www-data /var/www/html/storage docker-compose exec app chmod -R 755 /var/www/html/storage ``` ### Database Connection Issues Ensure the database container is fully started: ```bash docker-compose logs db ``` Wait a few seconds after starting containers for MySQL to initialize. ### Port Already in Use If ports 8080 or 3306 are already in use, modify the ports in `docker-compose.yml`: ```yaml ports: - "8090:80" # Change 8080 to 8090 or any available port ``` ## Production Deployment For production environments: 1. Update `.env` file with production settings 2. Set `APP_DEBUG=false` in docker-compose.yml 3. Use a secure database password 4. Consider using a reverse proxy (Nginx/Traefik) with SSL 5. Set up proper backup strategies for database volumes 6. Configure log rotation ## Volumes - `db_data`: Persistent MySQL data - `./storage`: Laravel storage (logs, cache, sessions) - `./public/uploads`: User uploaded files These volumes ensure data persists across container restarts.