154 lines
4.3 KiB
Markdown
154 lines
4.3 KiB
Markdown
# Multiberry Backend
|
||
|
||
Веб-приложение для хакатона ВТБ. Backend на Rust + Axum, БД — PostgreSQL.
|
||
|
||
## 🚀 Быстрый старт (macOS)
|
||
|
||
### 1. Установка зависимостей
|
||
|
||
при условии что docker, sops, age уже установлены
|
||
|
||
just - это Makefile 2.0
|
||
|
||
```zsh
|
||
brew install just
|
||
|
||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
||
|
||
rustup --version
|
||
cargo --version
|
||
|
||
# если cargo ругается
|
||
rustup default stable
|
||
|
||
# если же нет, все прекрасно, curl и rustup уже сделали свое дело
|
||
```
|
||
|
||
### 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!** 🚀
|