# Деплой на прод (master → alarm.minifinder.com)

**Document root на проді:** `/var/www/alarm.minifinder.com/www`  
**Сайт зараз:** PHP 7.4 (згідно prod-environment.md).

---

## Варіант 1: Деплой вручну на сервері

Після пушу в `master` зайти по SSH на прод-сервер і виконати:

```bash
cd /var/www/alarm.minifinder.com/www
git fetch origin
git checkout master
git pull origin master
# Залежності під PHP 7.4 (на проді зараз 7.4)
cp composer.lock.74 composer.lock
composer install --no-dev --no-interaction
```

Якщо на сервері немає `composer` глобально — використати PHP 7.4 з шляху (наприклад `/usr/bin/php7.4 /usr/local/bin/composer install ...` або встановити Composer у проєкт).

---

## Варіант 2: Однією командою з локальної машини

З машини, де є SSH-доступ до проду (ключ налаштований):

```bash
ssh USER@alarm.minifinder.com 'cd /var/www/alarm.minifinder.com/www && git fetch origin && git checkout master && git pull origin master && cp composer.lock.74 composer.lock && composer install --no-dev --no-interaction'
```

`USER` замінити на ім'я користувача на сервері.

---

## Варіант 3: Скрипт у репо (з викликом з локальної машини)

Можна використовувати універсальний скрипт `scripts/deploy.sh`, який читає налаштування з `deploy.json`. Тоді деплой зводиться до:

```bash
cp deploy.json.example deploy.json
# відредагувати deploy.json під свої хости/шляхи
./scripts/deploy.sh prod
```

(`deploy.json` не комітиться; він у `.gitignore`.)

---

## Що не потрібно після деплою

- **Apache** перезапускати не обов’язково: він віддає PHP-файли, зміни в коді підхоплюються одразу.
- **PHP-FPM** (якщо колись перейдете на 8.3 на проді) — перезапуск лише при зміні php.ini або конфігу FPM.

---

## Перед першим деплоєм

1. На проді в каталозі сайту має бути **git-репозиторій** (наприклад `git clone ...` один раз у `/var/www/alarm.minifinder.com/www`).
2. На сервері налаштований доступ до оригіналу репо (`origin` вказує на ваш GitHub/GitLab тощо).
3. Локальні/секретні файли (наприклад `.env` з паролями) на проді **не комітяться** — вони мають вже існувати на сервері або додаватися вручну після клону; у `.gitignore` мають бути `.env` і при потребі інші конфіги.

---

## Майбутнє: CI (GitHub Actions / GitLab CI)

Можна налаштувати автодеплой при пуші в `master`: job після успішного проходження (наприклад PHPStan, тести) виконує на проді `git pull` + `composer install` через SSH (наприклад за допомогою `ssh-deploy` або власного кроку з ключем у секретах репо). Окремий крок у плані міграції — «CI: pipeline».

---

# Деплой на dev

**Призначення:** окремий дев-сервер (інший хост), PHP 8.3/8.4. Деплоїться **поточна гілка** (або вказана аргументом), а не лише `master`.

**Скрипт:** `scripts/deploy-dev.sh` — виконувати з кореня проєкту.
**Актуально:** `scripts/deploy.sh dev` (а `deploy-dev.sh` лишився як сумісний wrapper).

## Підготовка дев-сервера (один раз)

Перед першим клоном репо на сервері потрібно:

- SSH-вхід під користувачем деплою без пароля (ключ у `~/.ssh/authorized_keys`).
- PHP 8.4 (або 8.3), Composer, git, веб-сервер (Apache або Nginx + PHP-FPM).
- Каталог для деплою (наприклад `/var/www/alarm-dev`): створений, власник — користувач деплою; document root веб-сервера вказує на цей каталог (або підкаталог, напр. `www/`).
- Git з сервера має доступ до репо (SSH deploy key у GitHub/GitLab тощо).
- За потреби — MySQL на сервері та база/користувач для `.env`; або БД на іншому хості (тоді лише заповнити `DB_*` в `.env`).
- Якщо потрібен vivasmarttech — окремо клон goapidev на сервері, у `.env` вказати `GOAPI_MINIFINDER_PATH=/шлях/до/goapidev.minifinder.com`.

Детальний чекліст і команди — у плані «Deploy to dev server» (розділ «Підготовка дев-сервера»).

## Ініціалізація репо на деві (один раз)

1. Зайти по SSH на дев-сервер.
2. Перейти в каталог деплою (наприклад `cd /var/www/alarm-dev`) і виконати перший клон:
   ```bash
   git clone <URL_репо> .
   ```
   Переконатися, що `origin` вказує на правильний remote.
3. Якщо використовується goapidev — клонувати його окремо (наприклад у `/var/www/goapidev.minifinder.com`), в `.env` сайту alarm вказати `GOAPI_MINIFINDER_PATH`.
4. Створити `.env`: `cp .env.example .env` і відредагувати (DB_*, APP_ENV=dev, GOAPI_* за потреби). Або скопіювати з локальної машини: `scp .env.dev USER@dev-host:/var/www/alarm-dev/.env`.

Після цього подальші оновлення — лише через скрипт деплою.

## Змінні середовища для скрипта

Скрипт читає параметри з `deploy.json` (створити з `deploy.json.example` і відредагувати).

## Виклик скрипта

Деплой **поточної гілки** (з вашої машини):

```bash
./scripts/deploy.sh dev
```

Деплой **конкретної гілки**:

```bash
./scripts/deploy.sh dev feature-branch-name
```

Якщо в `deploy.json` для `dev` вказано `envFile` (наприклад `.env.dev`) і файл існує локально, скрипт перед `git pull` завантажить його на сервер як `.env` (перезапише існуючий). Якщо `envFile` порожній або файлу немає — скрипт не чіпає `.env` на сервері.
