dressed_for_succes_store/docker-compose.yml

207 lines
7.2 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

version: '3.8'
services:
# --- Backend Service ---
fastapi:
build:
context: ./backend
dockerfile: Dockerfile
# Не монтируем код в продакшене, он уже скопирован в образ
# volumes:
# - ./backend:/app
# Используем CMD из базового образа tiangolo/uvicorn-gunicorn-fastapi (Gunicorn + Uvicorn workers)
# command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload # Это для разработки
command: uvicorn app.main:app --host 0.0.0.0 --port 8000
expose:
- "8000" # Внутренний порт, доступный другим сервисам в сети
networks:
- app-network
environment:
# Переменная для подключения к MeiliSearch внутри Docker-сети
- MEILISEARCH_URL=http://meilisearch:7700
- MEILISEARCH_KEY=dNmMmxymWpqTFyWSSFyg3xaGlEY6Pn7Ld-dyrnKRMzM
# Добавьте сюда другие переменные окружения для бэкенда (ключи API, настройки БД и т.д.)
# - DATABASE_URL=...
# - SECRET_KEY=...
depends_on:
- meilisearch # Запускать после MeiliSearch
restart: unless-stopped
# --- Frontend Service ---
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
# Не монтируем исходный код в продакшене
# volumes:
# - ./frontend:/app
# Сохраняем .next для возможного ускорения перезапусков (опционально)
# volumes:
# - frontend_next:/app/.next
# Команда запускает уже собранное приложение
command: npm start
expose:
- "3000" # Внутренний порт для Next.js сервера
networks:
- app-network
environment:
# URL для API-запросов из БРАУЗЕРА (через Nginx)
# Браузер будет обращаться к /api/... на том же домене/хосте
- NEXT_PUBLIC_API_URL=/api
# URL для API-запросов со стороны СЕРВЕРА Next.js (SSR, API Routes)
# Используем внутреннее имя сервиса Docker для серверных запросов
- NEXT_SERVER_API_URL=http://fastapi/api
# URL для доступа к MinIO (для изображений)
- NEXT_PUBLIC_MINIO_URL=http://45.129.128.113:9000
# Включаем режим отладки для логирования URL изображений
- NEXT_PUBLIC_DEBUG=true
# Убедитесь, что ваш Next.js код использует INTERNAL_API_URL для серверных запросов
# и NEXT_PUBLIC_API_URL (или просто относительный путь /api) для клиентских
depends_on:
- fastapi # Желательно запускать после бэкенда
restart: unless-stopped
# --- PHP Service ---
php:
image: php:8.2-apache
volumes:
- ./php:/var/www/html # Монтируем PHP скрипты
expose:
- "80" # Apache внутри контейнера слушает порт 80
networks:
- app-network
restart: unless-stopped
# --- Nginx Reverse Proxy ---
nginx:
image: nginx:alpine
volumes:
# Монтируем наш конфиг Nginx (только для чтения)
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
# Опционально: монтируем статику, если она не раздается через Next.js/FastAPI
# - ./static:/usr/share/nginx/html/static:ro
ports:
# Единственная точка входа: порт 80 хоста -> порт 80 Nginx
- "80:80"
# Если нужен HTTPS (рекомендуется), добавьте:
# - "443:443"
# И настройте SSL в nginx.conf, монтируя сертификаты
depends_on:
- fastapi
- frontend
- php
networks:
- app-network
restart: always
# --- MeiliSearch Service ---
meilisearch:
image: getmeili/meilisearch:latest
container_name: meilisearch
hostname: meilisearch
# Не публикуем порт наружу, доступ только через FastAPI/Nginx
ports:
- "7700:7700"
expose:
- "7700" # Внутренний порт
environment:
# ВАЖНО: Используйте СВОЙ надежный мастер-ключ!
- MEILI_MASTER_KEY=dNmMmxymWpqTFyWSSFyg3xaGlEY6Pn7Ld-dyrnKRMzM
- MEILI_NO_ANALYTICS=true
- MEILI_ENV=production
volumes:
- meili_data:/data.ms # Сохранение данных MeiliSearch
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--spider", "http://localhost:7700/health"]
interval: 10s
timeout: 5s
retries: 3
start_period: 15s
restart: always
networks:
- app-network
# Алиас не обязателен, если имя сервиса совпадает с hostname
# aliases:
# - meilisearch
# --- Сеть для взаимодействия контейнеров ---
networks:
app-network:
driver: bridge
# --- Тома для сохранения данных ---
volumes:
meili_data: # Для данных MeiliSearch
driver: local
frontend_next: # Для кэша сборки Next.js (опционально)
driver: local
# version: '3.8' # Compose Specification v3.8
# services:
# fastapi:
# build:
# context: ./backend # директория с Dockerfile FastAPI
# volumes:
# - ./backend:/app # монтируем код для live-reload
# command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload # hot-reload
# ports:
# - "8000:8000"
# networks:
# - app-network
# php:
# image: php:8.2-apache # официальный PHP Apache образ
# volumes:
# - ./php:/var/www/html
# ports:
# - "8081:80"
# networks:
# - app-network
# nginx:
# image: nginx:stable
# volumes:
# - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro # монтируем конфиг NGINX
# ports:
# - "80:80"
# depends_on:
# - fastapi
# - php
# networks:
# - app-network
# meilisearch:
# image: getmeili/meilisearch:latest
# container_name: dressed-for-success-meilisearch
# hostname: meilisearch
# ports:
# - "7700:7700"
# environment:
# - MEILI_MASTER_KEY=dNmMmxymWpqTFyWSSFyg3xaGlEY6Pn7Ld-dyrnKRMzM
# - MEILI_NO_ANALYTICS=true
# - MEILI_ENV=production
# volumes:
# - meilisearch_data:/meili_data
# healthcheck:
# test: ["CMD", "wget", "--no-verbose", "--spider", "http://localhost:7700/health"]
# interval: 10s
# timeout: 5s
# retries: 3
# start_period: 15s
# restart: always
# networks:
# app-network:
# aliases:
# - meilisearch
# dns_search: .
# volumes:
# meilisearch_data:
# networks:
# app-network: # общая сеть для контейнеров
# driver: bridge