- Update Dockerfile to copy new app/ directory structure - Fix docker-compose.yml volume paths for app/static/uploads - Add environment variable support for new config system - Update migration service to use migrate_session_changes.py - Add .dockerignore for optimized builds - Remove obsolete version field from docker-compose.yml - Create comprehensive README_DOCKER.md documentation The Docker setup now fully supports the refactored Flask application with modular structure, authentication, and like system. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
160 lines
3.6 KiB
Markdown
160 lines
3.6 KiB
Markdown
# 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 |