# Разворачивание среды Docker

## Быстрый старт

Скачайте проект из репозитория в необходимую директорию и произведите первичные настройки.

### 1. Настройка переменных окружения

Создайте файл `.env` из `.env.example` в корне проекта со следующими переменными:

```text
# Приложение
APP_PORT=2600
APP_SSL_PORT=443
APP_URL=http://127.0.0.1:2600

# Пути к сертификатам
DB_SSL_CERT='/var/www/html/storage/app/certificates/root.crt'

#VK Team
VK_TEAMS_TOKEN=

# Database settings
DADATA_TOKEN=
DADATA_SECRET=

# CFT
CFT_LOCAL_CERT="/var/www/html/storage/app/certificates/beta.crt"
CFT_LOCAL_KEY="/var/www/html/storage/app/certificates/beta.key"

# КСЕ
CSE_LOGIN="test"
CSE_PASS="2016"

# Пользователь (для синхронизации прав)
USER=ex3mm
UID=1000
GID=1000
```

- Остальные настройки можно оставить по умолчанию
- Сертификаты можно закинуть в указанную (дефолтную) директорию

### 2. Первоначальное развертывание

#### Полная инициализация проекта через Make

```bash
  make init
```

Эта команда выполнит:
- Сборку и запуск всех контейнеров
- Установку зависимостей Composer
- Запуск тестов

#### Пошаговая инициализация проекта

1. Сборка и запуск контейнеров
    ```bash
    docker-compose up -d
    ```

    ***или через Make*** 

    ```bash
    make up
    ```

2. Установку зависимостей Composer

    ***Запуск composer внутри контейнера***
    ```bash
    docker exec -it bangara_app bash -c "composer install"
    ```

   ***или через Make***

    ```bash
    make install
    ```

3. Запуск тестов

   ***Запуск юнит-тестов внутри контейнера***
    ```bash
    docker exec -it bangara_app bash -c "vendor/bin/phpunit"
    ```

   ***или через Make***

    ```bash
    make test 
    ```

#### Импорт базы данных

1. Создайте дамп базы данных
    - Для создания дампа можно использовать скрипт на удаленном сервере: `/home/ex3mm/db/dump.sh`
    - Зайдите на удаленный сервер и выполните:
    ```shell
    cd /home/ex3mm/db/ && ./dump.sh
    ```
2. Скачайте дамп в корень проекта
   - Например, через scp: `scp 37.230.174.193:/home/ex3mm/db/dump.sql .` (Дамп будет скачен в директорию, где бла запущена команда)
3. Скопируйте дамп в контейнер c db
    ```shell
    docker cp dump.sql bangara_percona:/tmp/dump.sql
    ```
4. Запустите импорт данных внутри контейнера.
    ```shell
    docker exec bangara_percona bash -c "mysql -u root -p'123456' bangara < /tmp/dump.sql"
    ```

***или через Make***

1. Создайте дамп базы данных (см. выше)
2. Скачайте дамп в корень проекта (см. выше)
3. Запустите Make команду:
    ```bash
    make db-transfer
    ```

**Внимание!!!** Импорт данных может занять несколько минут

---

## Конфигурация

### PHP контейнер (app)

**Основа:** `php:7.2.24-apache`

**Конфигурация:**
- Локаль: `ru_RU.UTF-8`
- Часовой пояс: `UTC+3`
- Лимиты: memory_limit=512M, upload_max_filesize=500M
- Xdebug настроен для отладки (порт 9000)

**Директории:**
- Код приложения: `/var/www/html`
- Логи Apache: `/var/log/apache2`
- Логи PHP: `/var/log/php`
- DocumentRoot: `/var/www/html/html`

### База данных (mysql)

**Основа:** `percona:8.0`

**Настройки:**
- Кодировка: `utf8mb4_unicode_ci`
- SQL режим: `STRICT_ALL_TABLES`
- Автоматическое создание тестовой БД `testing`

### Дополнительные сервисы

**phpMyAdmin:**
- Доступ: `http://localhost:8082`
- Лимит загрузки: 2000MB

**Mailpit:**
- SMTP: `localhost:1025`
- Web интерфейс: `http://localhost:8025`

---

## Полезные команды

[make-commands.md](make-commands.md)

---

## Troubleshooting

### Проблемы с правами доступа

```bash
# Проверка UID/GID в .env
echo "UID=$(id -u)" >> .env
echo "GID=$(id -g)" >> .env

# Перестроение контейнеров с новыми правами
docker-compose build --no-cache app
```

### Проброс портов

1. Пробрасываем порт на локальной машине.
2. В запросах с ЦФТ используем адрес host.docker.internal это адрес нашей машины.
