# Production Deploy

Проект подготовлен под production-домен `https://budjet.itcarrot.com`.

## Environment

На сервере должен лежать реальный `.env`.

В проекте уже подготовлены два варианта:

- `.env.production.example` как шаблон под production
- `.env.server` как готовая серверная заготовка для `budjet.itcarrot.com`

Ключевые значения:

- `APP_URL=https://budjet.itcarrot.com`
- `DB_CONNECTION=mysql`
- `DB_HOST=...`
- `DB_PORT=3306`
- `DB_DATABASE=budjet`
- `DB_USERNAME=...`
- `DB_PASSWORD=...`
- `ROOT_USER_EMAIL=root@budjet.itcarrot.com`
- `ROOT_USER_PASSWORD=...` для первичного создания root-пользователя
- `TELEGRAM_BOT_TOKEN=...`
- `TELEGRAM_BOT_USERNAME=budjet_itcarrot_bot`
- `TELEGRAM_MINI_APP_URL=https://budjet.itcarrot.com/telegram`

## GitHub Secrets

Для workflow `.github/workflows/deploy.yml` нужны secrets:

- `SFTP_SERVER`
- `SFTP_USERNAME`
- `SFTP_PRIVATE_KEY`
- `SFTP_DIR`

`SFTP_PRIVATE_KEY` должен быть отдельным deploy-ключом без passphrase. Публичную часть этого ключа нужно добавить на сервер в `~/.ssh/authorized_keys`.

Локально уже создана пара ключей:

- приватный ключ для GitHub secret `SFTP_PRIVATE_KEY`: `.deploy-keys/budjet_github_actions`
- публичный ключ для сервера `authorized_keys`: `.deploy-keys/budjet_github_actions.pub`

Опционально:

- `PHP_BIN`
- `COMPOSER_BIN`

## Server Requirements

- PHP 8.3+
- Composer
- MySQL
- права на запись в `storage` и `bootstrap/cache`

## Workflow Result

Workflow:

- собирает frontend в CI;
- загружает архив на сервер;
- распаковывает Laravel-приложение;
- запускает `composer install`;
- выполняет `php artisan migrate --force`;
- обновляет Laravel caches;
- создает `storage:link`.
- создает или обновляет root-пользователя через `RootUserSeeder`, если в `.env` задан `ROOT_USER_PASSWORD`.

## Root User

Первого администратора можно создать двумя способами:

```bash
php artisan db:seed --class=RootUserSeeder --force
```

или вручную через artisan-команду:

```bash
php artisan budget:create-user root@budjet.itcarrot.com --name=Root --role=root --password="strong-password"
```

После входа root увидит меню `Пользователи` и сможет создавать аккаунты для семьи.
