80 lines
1.8 KiB
YAML
80 lines
1.8 KiB
YAML
services:
|
|
web:
|
|
build: .
|
|
ports:
|
|
- "5000:5000"
|
|
volumes:
|
|
- .:/app
|
|
environment:
|
|
- FLASK_APP=app
|
|
- FLASK_ENV=development
|
|
- USE_REMOTE_MYSQL=${USE_REMOTE_MYSQL}
|
|
- ENABLE_DB_SEEDING=${ENABLE_DB_SEEDING}
|
|
- MYSQL_DATABASE=${MYSQL_DATABASE}
|
|
- MYSQL_USER=${MYSQL_USER}
|
|
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
|
|
- MYSQL_HOST=${MYSQL_HOST}
|
|
- MYSQL_PORT=${MYSQL_PORT}
|
|
depends_on:
|
|
- db
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:5000"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 5
|
|
command: >
|
|
bash -c "
|
|
set -e
|
|
|
|
echo '[✔] Ensuring .env...'
|
|
if [ ! -f '.env' ]; then cp .env.example .env; fi
|
|
|
|
echo '[✔] Waiting for MySQL to be ready...'
|
|
until nc -z ${MYSQL_HOST} ${MYSQL_PORT}; do sleep 1; done
|
|
|
|
echo '[✔] Running DB migrations...'
|
|
flask db upgrade
|
|
|
|
if [ \"$$ENABLE_DB_SEEDING\" = \"1\" ]; then
|
|
echo '[🌱] Seeding admin user...'
|
|
flask seed-admin
|
|
else
|
|
echo '[⚠️] DB seeding skipped by config.'
|
|
fi
|
|
|
|
echo '[🚀] Starting Flask server...'
|
|
flask run --host=0.0.0.0
|
|
"
|
|
|
|
db:
|
|
image: mysql:8
|
|
restart: unless-stopped
|
|
environment:
|
|
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
|
|
MYSQL_DATABASE: ${MYSQL_DATABASE}
|
|
MYSQL_USER: ${MYSQL_USER}
|
|
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
|
|
ports:
|
|
- "3306:3306"
|
|
volumes:
|
|
- plant_price_tracker_mysql_data:/var/lib/mysql
|
|
healthcheck:
|
|
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
|
|
adminer:
|
|
image: adminer
|
|
restart: always
|
|
ports:
|
|
- 8080:8080
|
|
environment:
|
|
ADMINER_DEFAULT_SERVER: db
|
|
depends_on:
|
|
- db
|
|
|
|
volumes:
|
|
plant_price_tracker_mysql_data:
|