61 lines
1.7 KiB
YAML
61 lines
1.7 KiB
YAML
version: '3.8'
|
||
|
||
services:
|
||
# 1. PostgreSQL - база данных
|
||
postgres:
|
||
image: postgres:15-alpine # лёгкая версия для ARM64
|
||
container_name: blog-postgres
|
||
environment:
|
||
POSTGRES_DB: blog
|
||
POSTGRES_USER: blog_user
|
||
POSTGRES_PASSWORD: blog_password
|
||
volumes:
|
||
- postgres_data:/var/lib/postgresql/data
|
||
- ./app/init.sql:/docker-entrypoint-initdb.d/init.sql # скрипт инициализации
|
||
ports:
|
||
- "5432:5432" # только для отладки, можно убрать
|
||
networks:
|
||
- blog-network
|
||
healthcheck:
|
||
test: ["CMD-SHELL", "pg_isready -U blog_user -d blog"]
|
||
interval: 5s
|
||
timeout: 5s
|
||
retries: 5
|
||
|
||
# 2. Flask-приложение (собирается из Dockerfile)
|
||
flask:
|
||
build: . # использует Dockerfile в текущей папке
|
||
container_name: blog-flask
|
||
environment:
|
||
DB_HOST: postgres
|
||
DB_NAME: blog
|
||
DB_USER: blog_user
|
||
DB_PASSWORD: blog_password
|
||
depends_on:
|
||
postgres:
|
||
condition: service_healthy
|
||
networks:
|
||
- blog-network
|
||
# Не публикуем порт 5000 наружу, только через Nginx
|
||
|
||
# 3. Nginx - обратный прокси
|
||
nginx:
|
||
image: nginx:alpine
|
||
container_name: blog-nginx
|
||
ports:
|
||
- "80:80" # основной вход в приложение
|
||
volumes:
|
||
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
|
||
depends_on:
|
||
- flask
|
||
networks:
|
||
- blog-network
|
||
|
||
# Тома для сохранения данных БД
|
||
volumes:
|
||
postgres_data:
|
||
|
||
# Сеть для всех сервисов
|
||
networks:
|
||
blog-network:
|
||
driver: bridge |