natureinpots_community/docker-compose.yml
2025-05-18 00:18:54 -05:00

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: