Files
hersel.it/docker-compose.yml
Claude c6425235a2 Migrate from Quart to Flask and add MariaDB dynamic database
Major Changes:
- Migrated web framework from Quart (async) to Flask (sync)
- Added MariaDB database integration with SQLAlchemy ORM
- Implemented dynamic content management for portfolio

New Features:
- Database models for Profile, Skills, Projects, ProjectTags, and SocialLinks
- RESTful API endpoints for CRUD operations on all entities
- Database initialization script (init_db.py) with sample data
- Docker Compose configuration with MariaDB service

Modified Files:
- app.py: Replaced Quart with Flask, added database initialization
- config.py: Added database configuration with environment variables
- routes/home.py: Converted async to sync, added database queries
- requirements.txt: Replaced Quart/Hypercorn with Flask/Gunicorn, added Flask-SQLAlchemy and PyMySQL
- docker-compose.yml: Added MariaDB service with health checks
- templates/: Updated all templates to use dynamic data from database with Jinja2
- .env.example: Added database configuration variables
- README.md: Complete rewrite with new setup instructions and API documentation

New Files:
- models.py: SQLAlchemy models for all database entities
- init_db.py: Database initialization script
- routes/api.py: REST API endpoints for content management

Benefits:
- Simplified architecture (sync vs async)
- Better ecosystem compatibility
- Dynamic content management via database
- Easy content updates through REST API
- Improved deployment with standard WSGI server (Gunicorn)
2025-11-13 09:16:24 +00:00

52 lines
1.3 KiB
YAML

version: "3.9"
services:
mariadb:
image: mariadb:11.2
container_name: portfolio_mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: root_password_change_me
MYSQL_DATABASE: portfolio_db
MYSQL_USER: portfolio_user
MYSQL_PASSWORD: portfolio_password
volumes:
- mariadb_data:/var/lib/mysql
ports:
- "127.0.0.1:3306:3306"
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 5
flaskapp:
image: python:3.10-slim
container_name: portfolio_flaskapp
working_dir: /app
ports:
- "127.0.0.1:5000:5000"
restart: always
depends_on:
mariadb:
condition: service_healthy
command: >
sh -c "
apt-get update &&
apt-get install -y git default-libmysqlclient-dev build-essential pkg-config &&
[ -d /app/.git ] || git clone https://github.com/BluLupo/hersel.it.git /app &&
pip install --no-cache-dir -r requirements.txt &&
python init_db.py &&
gunicorn -w 4 -b 0.0.0.0:5000 app:app
"
environment:
- PYTHONUNBUFFERED=1
- DB_HOST=mariadb
- DB_PORT=3306
- DB_USER=portfolio_user
- DB_PASSWORD=portfolio_password
- DB_NAME=portfolio_db
volumes:
mariadb_data: