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)
52 lines
1.3 KiB
YAML
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:
|