• v1.0.0 ae49c8f8c3

    Balance Server v1.0.0
    CI / Go (test / vet / build) (push) Successful in 27s
    CI / Rust (fmt / clippy / test / build) (push) Successful in 1m5s
    CI / Go ↔ Rust differential + SQLite takeover (push) Successful in 1m38s
    Docker publish / Build and push image (push) Successful in 1h6m5s
    Stable

    wt released 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=Strict cookies; нативные приложения используют 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.0
    

    Docker 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