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)
This commit is contained in:
@@ -1,20 +1,51 @@
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
quartapp:
|
||||
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: quartapp
|
||||
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 &&
|
||||
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 &&
|
||||
hypercorn -c hypercorn_config.toml app:app
|
||||
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:
|
||||
|
||||
Reference in New Issue
Block a user