# # Службы # services: # 1. База данных (Источник правды) db : image : postgres:15-alpine container_name: rack_db restart : always env_file : - .env environment : POSTGRES_DB : ${RACK_DATABASE_NAME} POSTGRES_USER : ${RACK_DATABASE_USERNAME} POSTGRES_PASSWORD: ${RACK_DATABASE_PASSWORD} ports : - "${rack_DATABASE_PORT:-5432}:5432" volumes : - postgres_data:/var/lib/postgresql/data networks : - rack-network # 2. KeyDB keydb : image : eqalpha/keydb:latest container_name: rack_keydb restart : always env_file : - .env ports : - "${RACK_KEYDB_PORT:-6379}:6379" command : keydb-server --protected-mode no --save "" volumes : - keydb_data:/data networks : - rack-network # 3. MinIO (S3 Хранилище) minio : image : minio/minio:latest # Всегда доступный и свежий образ container_name: rack_minio restart : always env_file : - .env environment : MINIO_ROOT_USER : ${rack_S3_ACCESS_KEY} MINIO_ROOT_PASSWORD: ${rack_S3_SECRET_KEY} ports : - "${rack_MINIO_API_PORT:-9000}:9000" - "${rack_MINIO_CONSOLE_PORT:-9001}:9001" volumes : - minio_data:/data command : server /data --console-address ":9001" healthcheck : test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 10s timeout: 5s retries: 5 start_period: 10s networks : - rack-network # 4. Авто-создатель бакетов minio-init: image : minio/mc:latest container_name: rack_minio_mc depends_on : minio: condition: service_healthy env_file : - .env entrypoint : > /bin/sh -c " echo 'Настройка подключения к MinIO...'; /usr/bin/mc alias set local http://minio:9000 ${rack_S3_ACCESS_KEY} ${rack_S3_SECRET_KEY}; echo 'Ожидание готовности сервера...'; while ! /usr/bin/mc ping local --count 1 > /dev/null 2>&1; do sleep 1; done; echo 'Сервер готов. Создание бакетов...'; /usr/bin/mc mb local/${rack_S3_BUCKET_PREFIX}-avatar --ignore-existing || true; /usr/bin/mc mb local/${rack_S3_BUCKET_PREFIX}-media --ignore-existing || true; echo 'Бакеты успешно проверены/созданы!'; exit 0; " networks : - rack-network # 5. Почтовый сервер (Ловушка для писем) mailpit : image : axllent/mailpit:latest container_name: rack_mail restart : always env_file : - .env ports : - "${rack_MAILPIT_UI_PORT:-8025}:8025" - "${rack_MAILPIT_SMTP_PORT:-1025}:1025" networks : - rack-network # # Тома # volumes : postgres_data: keydb_data : minio_data : # # Сеть # networks: rack-network: driver: bridge name : rack-network