122 lines
3.6 KiB
YAML
122 lines
3.6 KiB
YAML
#
|
|
# Службы
|
|
#
|
|
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
|