目标
一篇 docker-compose.yml 起 web + mysql,数据和图片都持久化,新机器一条命令恢复。
1. compose 文件
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: flask_blog
MYSQL_USER: strli
MYSQL_PASSWORD: goodXY99!
volumes:
- mysql_data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 5s
retries: 20
web:
build: .
depends_on:
mysql:
condition: service_healthy
environment:
FLASK_CONFIG: production
DATABASE_URL: mysql+pymysql://strli:goodXY99!@mysql/flask_blog
SECRET_KEY: xxx
ADMIN_API_KEY: xxx
ports:
- "5000:5000"
volumes:
- ./app/static/uploads:/app/app/static/uploads
- ./app/static/thumbnails:/app/app/static/thumbnails
- ./app/static/drive:/app/app/static/drive
volumes:
mysql_data:
2. entrypoint 初始化
#!/bin/sh flask db upgrade if [ -n "$ADMIN_USER" ]; then flask create-admin "$ADMIN_USER" "$ADMIN_PASS" || true; fi exec uwsgi --http 0.0.0.0:5000 --module run:app --processes 5 --threads 2
对应你项目 run.py:create-admin 和 migrations/,避免新库没表。
3. 启动验证备份
docker compose up -d --build docker compose logs -f web docker compose exec mysql mysqldump -ustrli -pgoodXY99! flask_blog > backup.sql
检查前台列表、发文、封面缩略图 thumbnails/ 是否生成。下一篇进生产 Nginx。