Семейный бюджет в чужом облаке — это чужие серверы, чужие правила и подписка, которую однажды поднимут в цене. Этот гайд решает другую задачу: поставить Actual Budget — открытое приложение для учёта личных и семейных финансов — на собственный сервер и синхронизировать его с Android-телефоном, чтобы транзакции, счета и категории лежали у вас, а не у вендора. Подойдёт для любого Linux-сервера с Docker (домашний мини-ПК, NAS, VPS или просто постоянно включённый компьютер), веб-интерфейса в браузере на ПК и приложения Actual на Android. Никаких особых версий ОС не требуется — нужен лишь Docker и открытый порт.

Пример:чек-лист перед первым запуском.

1. Установите Docker и Compose. На Debian/Ubuntu это делается пакетами из репозитория:
sudo apt update
sudo apt install -y docker.io docker-compose-plugin
sudo systemctl enable --now docker
docker --version
Ожидаемый результат: вывод вида `Docker version 27.x.x, build ...` — номер версии у вас будет свой. Почему это работает: пакет ставит движок контейнеров и включает службу, чтобы контейнеры поднимались сами после перезагрузки сервера.
2. Создайте каталог и файл описания запуска:
mkdir -p ~/actual && cd ~/actual
nano docker-compose.yml
Вставьте в файл:
services:
actual:
image: actualbudget/actual-server:latest
container_name: actual
restart: unless-stopped
ports:
- "5006:5006"
volumes:
- ./actual-data:/data
Ожидаемый результат: файл `docker-compose.yml` сохранён в `~/actual`. Разбор: `image` — готовый образ сервера Actual; `ports` — какой порт сервера виден снаружи; `volumes` — куда сохраняются данные бюджета; `restart: unless-stopped` — сервер сам поднимется после сбоя или перезагрузки.
3. Запустите контейнер и посмотрите логи:
docker compose up -d
docker compose logs -f actual
Ожидаемый результат: в логах строка про прослушивание порта (например, `Listening on 0.0.0.0:5006`), а `docker compose ps` показывает статус `running`. Выход из логов — `Ctrl+C`, контейнер при этом продолжает работать. Если строки нет, а есть ошибка — она будет видна тут же, читайте её текст.
4. Проверьте веб-интерфейс с ПК в той же сети. Узнать IP сервера можно командой `ip a`, дальше откройте `http://IP-сервера:5006`.
Ожидаемый результат: страница Actual с предложением создать файл бюджета (budget file — файл, в котором лежат счета, транзакции и категории). Если страница не открывается — проблема с портом или фаерволом, смотрите раздел ниже.
5. Создайте бюджет и включите шифрование синхронизации. В настройках задайте пароль шифрования и сразу сохраните его в менеджере паролей.
Ожидаемый результат: бюджет создан, в настройках отображается, что синхронизация зашифрована. Почему это важно: сервер хранит только зашифрованные данные, поэтому даже доступ к серверу не даёт прочитать ваш бюджет без пароля.
6. Выставьте сервер наружу через домен и HTTPS. Пример минимального конфига Caddy:
budget.example.com {
reverse_proxy 127.0.0.1:5006
}
Ожидаемый результат: `https://budget.example.com` открывает тот же интерфейс, что и локальный адрес. Почему так: обратный прокси принимает защищённое соединение и передаёт запрос контейнеру — мобильное приложение за пределами домашней сети подключается к вашему серверу именно так.
7. Подключите Android. Установите приложение Actual, укажите URL сервера (например, `https://budget.example.com`), логин и пароль, затем пароль шифрования. Дождитесь первой синхронизации.
Ожидаемый результат: в приложении появился тот же бюджет, счета и категории, что и на ПК. Если приложение пишет об ошибке соединения — проверьте домен и HTTPS (раздел ниже).
8. Проверьте синхронизацию в обе стороны. Добавьте тестовую транзакцию в приложении, дождитесь окончания синхронизации и обновите веб-интерфейс на ПК.
Ожидаемый результат: транзакция появилась в веб-версии. То же самое в обратную сторону: правка на ПК видна на телефоне после синхронизации.

Нужен ли домен и HTTPS, если бюджет нужен только дома?
Нет. Внутри домашней сети достаточно адреса `http://IP-сервера:5006`. Домен и HTTPS нужны, если вы хотите синхронизировать бюджет с телефона через мобильный интернет или из другого места.
Что будет, если сервер выключится или сломается?
Синхронизация просто приостановится, ничего не потеряется мгновенно: данные лежат в томе `./actual-data` рядом с файлом `docker-compose.yml`. Настройте регулярное копирование этого каталога — тогда восстановление сведётся к возврату папки на место и повторному `docker compose up -d`.
Можно ли вести один бюджет на несколько человек?
Да. Несколько устройств подключаются к одному серверу и открывают один файл бюджета, а изменения синхронизируются между ними. Удобный семейный сценарий: один сервер, телефон одного взрослого, телефон второго и браузер на общем ноутбуке.
Можно ли поднять сервер прямо на Android-телефоне, без отдельного ПК?
Технически — да, для этого есть окружение Linux на телефоне без root. Пошаговые варианты разобраны в гайде Как запустить Linux на Android без root: Termux, PRoot и ИИ-инструменты. Практический минус: сервер должен быть включён постоянно, поэтому для семейного бюджета удобнее отдельный мини-ПК или VPS.
Как проверить приложение на Android, если телефона под рукой нет?
Разверните Android-окружение на компьютере: эмулятор или Waydroid запускают Android-приложения на ПК, и приложение Actual можно поставить и протестировать там. Сравнение подходов — в гайде [Как запускать Android-приложения и игры на ПК: эмуляторы, Waydroid и облачные сервисы](https://ai-release.org/guides/kak-zapuskat-android-prilozheniya-i-igry-na-pk-emuly