name: prodman # Имя проекта, которое будет префиксом для всех контейнеров и сетей services: # --- БАЗА ДАННЫХ --- # db: # image: postgres:15-alpine # Легкий образ Postgres на базе Alpine Linux # restart: unless-stopped # Перезапускать всегда, кроме случаев, когда ты сам его выключил # environment: # # Данные тянутся из твоего файла .env # - POSTGRES_DB=${DB_NAME} # - POSTGRES_USER=${DB_USER} # - POSTGRES_PASSWORD=${DB_PASS} # volumes: # # Храним базу в именованном томе, чтобы данные не пропали при удалении контейнера # - postgres_data:/var/lib/postgresql/data # --- ПРИЛОЖЕНИЕ (DJANGO) --- web: build: . # Собирает образ из Dockerfile в текущей папке restart: unless-stopped environment: - ENV_TYPE=server env_file: - .env # Прокидывает все секреты и настройки внутрь Python volumes: # Общие папки для статики и картинок. Сюда Django их складывает. - staticfiles:/app/staticfiles - mediafiles:/app/media expose: - "8000" # Открывает порт ТОЛЬКО внутри сети Docker для Nginx # --- ВЕБ-СЕРВЕР (ФАСАД) --- nginx: image: nginx:1.25-alpine restart: unless-stopped volumes: # Основной конфиг маршрутизации - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro # Читаем статику и медиа, которые подготовил контейнер 'web' # :ro (read-only) — защита: даже если Nginx взломают, файлы не удалят - staticfiles:/app/staticfiles:ro - mediafiles:/app/media:ro ports: - "80:80" # Единственная "дырка" в мир: порт 80 сервера -> порт 80 контейнера depends_on: - web # Nginx запустится только после Django # Описание "жестких дисков" (Volumes), которые живут дольше контейнеров volumes: postgres_data: # Для данных БД staticfiles: # Для CSS, JS и картинок интерфейса (collectstatic) mediafiles: # Для загруженных тобой чертежей и фото # Подключение NFS-шары напрямую в Docker nfs_motioneye: driver: local driver_opts: type: nfs # IP адрес твоего NAS или сервера, где лежит шара o: addr=192.168.1.138,rw,nolock,soft # Путь к папке на самом NFS сервере device: ":/VideoStreaming"