# Docker Compose

Compose-конфигурация разделена на несколько файлов в `environments`.

## Файлы

- `docker-compose.networks.yml` - `public-network` и `internal-network`.
- `docker-compose.dbs.yml` - PostgreSQL и Redis.
- `docker-compose.apps.yml` - nginx, `php84`, `php82`, `nextjs`.
- `docker-compose.dev.yml` - Node.js helper-контейнер для разработки frontend-приложений.
- `docker-compose.monitoring.yml` - node-exporter, php-fpm-exporter, Prometheus, Grafana.
- `docker-compose.jenkins.yml` - Jenkins.

## Make targets

```bash
make help
```

Основные цели:

- `make dev` - dev-режим без мониторинга;
- `make up` - prod-режим с мониторингом;
- `make down` - остановка сервисов;
- `make restart` - остановка и повторный запуск;
- `make clean` - остановка и удаление volumes;
- `make prune` - полная очистка Docker;
- `make chown-up` - выставить владельцев для мониторинга и PostgreSQL data;
- `make chown-1000` - вернуть владельца `1000:1000`;
- `make fix-certs` - поправить права сертификатов nginx;
- `make rebuild-nextjs` - пересобрать и перезапустить Next.js-контейнер.

## Ручной запуск compose

Эквивалент `make dev`:

```bash
COMPOSE_PROJECT_ENV=dev COMPOSE_NODE_ENV=development \
docker compose --env-file .env \
  -f environments/docker-compose.networks.yml \
  -f environments/docker-compose.dbs.yml \
  -f environments/docker-compose.apps.yml \
  -f environments/docker-compose.dev.yml \
  up -d
```

Эквивалент `make up`:

```bash
COMPOSE_PROJECT_ENV=prod COMPOSE_NODE_ENV=production \
docker compose --env-file .env \
  -f environments/docker-compose.networks.yml \
  -f environments/docker-compose.dbs.yml \
  -f environments/docker-compose.apps.yml \
  -f environments/docker-compose.dev.yml \
  -f environments/docker-compose.monitoring.yml \
  up -d
```

## Порты

- `80`, `443` - nginx.
- `5432` - PostgreSQL.
- `3001` - Next.js `sovamed`.
- `3000` - Grafana.
- `9090` - Prometheus.
- `8080`, `50000` - Jenkins.

## Volumes и данные

PostgreSQL хранит данные в `infrastructure/pgsql/data`, Redis - в `infrastructure/redis/data`. Эти директории игнорируются git и не должны удаляться без необходимости.

`make clean` удаляет docker volumes, а `make prune` чистит Docker глобально на машине.
