# Docker Setup for Pets of Powerwashing ## Updated for Refactored Architecture The Docker setup has been updated to work with the refactored Flask application structure. ## Quick Start ### 1. Build and Run ```bash # Build and start the application docker compose up --build # Or run in detached mode docker compose up --build -d ``` ### 2. Run Database Migration ```bash # Run the migration (first time setup or after schema changes) docker compose --profile migrate up migrate ``` ### 3. Access the Application - **Web Interface**: http://localhost:54321 - **Admin Login**: username: `admin`, password: `password123` ## File Structure Changes The refactored application now uses this structure: ``` app/ ├── static/uploads/ # Upload directory (mounted as volume) ├── templates/ # HTML templates ├── models/ # Database models ├── routes/ # Route handlers (blueprints) ├── utils/ # Utilities and helpers └── ... ``` ## Docker Configuration ### Environment Variables You can customize the application through environment variables: ```yaml environment: # Flask settings - FLASK_ENV=production # Application settings - UPLOAD_FOLDER=app/static/uploads - DATABASE_PATH=pet_pictures.db - ADMIN_USERNAME=admin - ADMIN_PASSWORD=password123 # Optional: Override secret key for production - SECRET_KEY=your-secret-key-here ``` ### Volume Mounts - `./app/static/uploads:/app/app/static/uploads` - Persistent file uploads - `./pet_pictures.db:/app/pet_pictures.db` - Persistent database ## Services ### Web Service (`web`) - **Port**: 54321 (maps to internal port 5000) - **Process**: Gunicorn with 4 workers - **Health Check**: HTTP check every 30 seconds - **Restart Policy**: unless-stopped ### Migration Service (`migrate`) - **Purpose**: Database schema updates - **Usage**: `docker compose --profile migrate up migrate` - **Script**: Uses `migrate_session_changes.py` ## Commands ### Development ```bash # Build only docker compose build # View logs docker compose logs -f # Stop services docker compose down # Remove everything including volumes docker compose down -v ``` ### Production ```bash # Start in production mode FLASK_ENV=production docker compose up -d # Update and restart docker compose pull docker compose up --build -d ``` ## Troubleshooting ### Common Issues **1. Permission Issues with Uploads** ```bash # Fix upload directory permissions sudo chown -R 1000:1000 ./app/static/uploads ``` **2. Database Migration Fails** ```bash # Run migration manually docker compose exec web python migrate_session_changes.py ``` **3. Build Fails** ```bash # Clean build docker compose build --no-cache ``` ### Health Check The application includes a health check that: - Tests HTTP connectivity on port 5000 - Retries 3 times with 5-second delays - Runs every 30 seconds - Allows 40 seconds for startup ## Security Notes **For Production:** 1. Change default admin credentials via environment variables 2. Set a secure `SECRET_KEY` 3. Use HTTPS reverse proxy (nginx/traefik) 4. Limit file upload sizes 5. Regular database backups ## File Locations in Container - **Application**: `/app/` - **Database**: `/app/pet_pictures.db` - **Uploads**: `/app/app/static/uploads/` - **Logs**: `/app/logs/` (if logging enabled) ## Changes from Previous Version ✅ **Updated paths** for refactored app structure ✅ **New migration script** (`migrate_session_changes.py`) ✅ **Added environment variables** for configuration ✅ **Improved .dockerignore** for smaller builds ✅ **Removed obsolete version** from docker-compose.yml ✅ **Better volume mapping** for uploads directory