-
Balance Server v1.0.0
Stablereleased this
2026-10-30 07:31:57 +00:00 | -2 commits to main since this releaseПервый релиз сервера синхронизации и аккаунтов для приложений Balance (iOS, macOS, watchOS, Android) со встроенным веб-клиентом.
Основное
- Сервер на Rust — один исполняемый файл со встроенным SQLite, работает на Linux, Windows и macOS. Отдельная БД, Node.js или сборка фронтенда не нужны.
- Аккаунты и авторизация — регистрация, вход, ротация refresh-токенов, выход. Пароли хранятся как Argon2id, refresh-токены — только в виде SHA-256-хешей.
- Синхронизация (
POST /v1/sync) — транзакции, пользовательские категории и месячные бюджеты; изоляция по аккаунтам, append-only курсор изменений, last-write-wins при конфликтах, постраничный pull. - Веб-клиент (PWA) — дашборд и баланс, транзакции с поиском и фильтрами, аналитика за 1/3/12 месяцев, бюджеты, категории с иконками и цветами, светлая/тёмная тема, валюты RUB/EUR/USD/SEK, автосинхронизация.
- Безопасность браузерной сессии —
HttpOnly+SameSite=Strictcookies; нативные приложения используют Bearer-токены. - Ограничение частоты — до 30 запросов авторизации в минуту с одного IP.
- Мультиплатформенный Docker-образ —
linux/amd64,linux/arm64иlinux/arm/v7(armhf) под одним тегом.
Совместимость
Rust-сервер полностью совместим с эталонной Go-реализацией: тот же HTTP/JSON API, схема SQLite, формат JWT, refresh-сессии и курсоры синхронизации. Существующую базу Go-сервера можно подключить к Rust-серверу без миграции (и откатиться обратно). Совместимость проверяется в CI дифференциальными тестами Go ↔ Rust.
Установка
Docker-образ (amd64, arm64, armhf —
docker pullвыберет нужную платформу сам):docker pull gitea.wthome.ru/balance/balanceserver:1.0.0Docker Compose из исходников:
cp .env.example .env # задайте BALANCE_JWT_SECRET (openssl rand -base64 48) docker compose up -d curl http://localhost:8123/healthБез Docker:
cargo build --locked --release(Rust 1.90+), затем запуститьtarget/release/balance-serverс переменнойBALANCE_JWT_SECRET.Конфигурация
BALANCE_ADDR,BALANCE_DB_PATH,BALANCE_JWT_SECRET(обязательна, ≥ 32 символов),BALANCE_ALLOW_REGISTRATION,BALANCE_ACCESS_TTL,BALANCE_REFRESH_TTL,BALANCE_CORS_ORIGINS— подробности в README.Важно
- Для доступа из сети используйте HTTPS (reverse proxy, например Caddy или nginx): Apple-приложения разрешают HTTP только для
localhost. - Делайте резервную копию SQLite вместе с файлами
-wal/-shmили при остановленном сервере.
Downloads