From 86007d4e09b70289ef59d4a1ce5878d1fa6a31ff Mon Sep 17 00:00:00 2001 From: Rorik Star Platinum Date: Tue, 4 Nov 2025 00:55:00 +0300 Subject: [PATCH] justfile and README.md --- README.md | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ justfile | 47 +++++++++++++++++ 2 files changed, 196 insertions(+) create mode 100644 README.md create mode 100644 justfile diff --git a/README.md b/README.md new file mode 100644 index 0000000..92afa76 --- /dev/null +++ b/README.md @@ -0,0 +1,149 @@ +# Multiberry Backend + +Веб-приложение для хакатона ВТБ. Backend на Rust + Axum, БД — PostgreSQL. + +## 🚀 Быстрый старт (macOS) + +### 1. Установка зависимостей + +```zsh +# Установи Homebrew, если еще не установлен +/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + +# Установи необходимые инструменты +brew install rust just docker sops age + +# Установи Docker Desktop +brew install --cask docker +# Запусти Docker Desktop (один раз) +open /Applications/Docker.app +``` + +### 2. Клонируй репозиторий + +```bash +git clone ssh://git@gitverse.ru:2222/rorikstr/multiberry-backend.git +cd multiberry-backend +``` + +### 3. Запусти проект + +Короч. Чтобы не запускать бесконечное число раз sops exec-env для вскрытия secrets.yaml +я придумал выполнять проект на Makefile 2.0: justfile + +```bash +# Посмотри все доступные команды +just + +# Запусти базу данных +just db-up + +# В новом терминале запусти бэкенд +just run + +# Проверь, что всё работает +just health +``` + +**Ожидаемый результат:** +```json +{"status":"Database connection is successful."} +``` + +✅ Готово! Бэкенд работает на `http://localhost:3000` + +## 📋 Основные команды + +| Команда | Описание | +|---------|---------| +| `just run` | Запустить бэкенд в dev режиме | +| `just db-up` | Поднять PostgreSQL | +| `just db-down` | Остановить PostgreSQL | +| `just db-reset` | Пересоздать БД (удалит все данные!) | +| `just build` | Собрать релизную версию | +| `just test` | Запустить тесты | +| `just health` | Проверить здоровье API | +| `just db-logs` | Показать логи БД | +| `just stop` | Остановить всё | + +Больше информации: `just --list` + +## 🔐 Секреты и переменные окружения + +Все секреты (пароли, API ключи) хранятся в зашифрованном файле `secrets.yaml`. + +**Как это работает:** +- `just` команды автоматически расшифровывают `secrets.yaml` перед запуском + +Если нужно **отредактировать** секреты (добавить новый API ключ и т.д.): +``` +sops secrets.yaml +``` + +## 🛠️ Разработка + +### Структура проекта + +``` +. +├── src/ +│ └── main.rs # Основной код приложения +├── Cargo.toml # Зависимости Rust +├── Cargo.lock # Зафиксированные версии зависимостей +├── compose.yaml # Описание Docker контейнера с PostgreSQL +├── secrets.yaml # Зашифрованные секреты (в Git, не редактируй вручную!) +├── .sops.yaml # Конфигурация sops (управление ключами) +├── justfile # Команды проекта +└── README.md # Этот файл +``` + +### Workflow разработки + +1. **Создай фича-ветку:** + ``` + git checkout -b feature/my-feature + ``` + +2. **Запусти проект:** + ``` + just db-up + just run + ``` + +3. **Внеси изменения в `src/main.rs`** + +4. **Тесты:** + ``` + just test + ``` + +5. **Push и создай Pull Request** + +## ❓ Troubleshooting + +### "Connection reset by peer" при запуске + +БД еще инициализируется. Подожди 5-10 секунд и попробуй снова: +``` +just run +``` + +### "password authentication failed" + +Вероятно, в `secrets.yaml` неверный пароль. Напиши Wave. + +### Docker Desktop не запускается + +Убедись, что Docker Desktop открыт: +``` +open /Applications/Docker.app +``` + +``` +just db-logs # Логи БД +docker ps # Список запущенных контейнеров +``` + +--- + +**Happy coding!** 🚀 diff --git a/justfile b/justfile new file mode 100644 index 0000000..c1ba40c --- /dev/null +++ b/justfile @@ -0,0 +1,47 @@ +# justfile для проекта + +# ========== КОНСТАНТЫ ========== +sops_run := "sops exec-env secrets.yaml" + +# ========== БАЗА ДАННЫХ ========== +db-up: + @echo "🗄️ Starting PostgreSQL..." + @{{sops_run}} 'docker compose up -d' + +db-down: + @echo "🛑 Stopping PostgreSQL..." + @docker compose down + +db-logs: + @docker compose logs -f postgres + +db-reset: + @echo "🗑️ Resetting PostgreSQL (deleting all data)..." + @docker compose down -v + @{{sops_run}} 'docker compose up -d' + +stop: + @echo "🛑 Stopping all services..." + @docker compose down + +# ========== ПРИЛОЖЕНИЕ ========== +run: + @echo "🚀 Starting backend in dev mode..." + @{{sops_run}} 'cargo run' + +build: + @echo "🔨 Building release version..." + @{{sops_run}} 'cargo build --release' + +test: + @echo "🧪 Running tests..." + @{{sops_run}} 'cargo test' + +health: + @echo "🏥 Checking health endpoint..." + @curl http://localhost:3000/api/health + +# ========== UTILITY ========== +[default] +list: + @just --list