justfile and README.md

This commit is contained in:
Rorik Star Platinum 2025-11-04 00:55:00 +03:00
parent c158d1b140
commit 86007d4e09
2 changed files with 196 additions and 0 deletions

149
README.md Normal file
View file

@ -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!** 🚀

47
justfile Normal file
View file

@ -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