Actual Budget на Ubuntu 24.04: пошаговая установка
Если вы устали от таблиц в Excel и от облачных бюджетных приложений, которые просят подписку и хранят ваши финансы на чужих серверах, Actual Budget — рабочая альтернатива. Это self-hosted приложение для учёта личных финансов по методу envelope budgeting, с быстрым интерфейсом и синхронизацией между устройствами. Ниже — пошаговая установка на свежую Ubuntu 24.04 на вашем VPS: от подготовки сервера до рабочего HTTPS-адреса, с которым можно заходить с телефона и ноутбука одновременно.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое Actual Budget и зачем его хостить самому
Actual Budget — открытый инструмент для бюджетирования, вдохновлённый YNAB, но без ежемесячной оплаты и без обязательной привязки к чужому облаку. Метод envelope простой: каждый рубль (или доллар) в момент поступления сразу распределяется по «конвертам» — категориям расходов, и вы тратите ровно то, что в конверте есть, а не то, что осталось на карте к концу месяца.
Официально проект предлагает hosted-версию, но self-hosted вариант даёт три вещи, которые важны, если вы ведёте семейный бюджет всерьёз:
- Данные остаются у вас. Файл бюджета — это SQLite-база, которая физически лежит на вашем сервере, а не в чужой инфраструктуре.
- Никаких лимитов и подписок. Актуально, если бюджет ведёт вся семья и нужно несколько устройств одновременно.
- Полный контроль над бэкапами. Вы сами решаете, как часто снимать снапшоты и куда их складывать.
Минус тоже есть, и его стоит проговорить сразу: обновления, бэкапы и аптайм — теперь ваша ответственность. Если это не пугает, поехали дальше.
Actual Budget — Node.js-приложение, работает как обычный HTTP-сервер на порту 5006 внутри Docker-контейнера (это официально поддерживаемый способ установки, без Docker собирать сложнее и не даёт преимуществ). Для боевого использования нужен домен с HTTPS — без него браузеры блокируют часть функциональности (Service Worker, который отвечает за офлайн-режим), а трафик между устройствами и сервером идёт открытым текстом.
Подготовка сервера
Для домашнего бюджета на 2-5 пользователей достаточно скромного VPS: 1 vCPU, 1-2 ГБ RAM, 10-15 ГБ диска с запасом под бэкапы. Actual Budget сам по себе лёгкий — тяжёлой становится история транзакций за несколько лет, но и она обычно укладывается в сотни мегабайт.
Подключаемся к серверу и обновляем систему:
ssh root@ваш_ip
apt update && apt upgrade -y
Создадим отдельного пользователя вместо работы под root — это не строго обязательно для одного Docker-контейнера, но хорошая привычка, если сервер будет расти:
adduser deploy
usermod -aG sudo deploy
su - deploy
Дальше всё выполняем от имени deploy, добавляя sudo где нужно.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстановка Docker и Docker Compose
Actual Budget официально распространяется как Docker-образ, и это самый предсказуемый способ его развернуть — обновления сводятся к смене тега образа, откат — к возврату старого.
Ставим Docker по официальному скрипту:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
После добавления в группу docker перелогиньтесь (exit и снова ssh), чтобы не писать sudo перед каждой командой docker. Проверяем, что всё встало:
docker --version
docker compose version
В современных версиях Docker compose — встроенная подкоманда, отдельный docker-compose ставить не нужно.
Docker Compose для Actual Budget
Создаём рабочую директорию и файл конфигурации:
mkdir -p ~/actual-budget/data
cd ~/actual-budget
nano docker-compose.yml
Содержимое файла:
services:
actual-server:
image: actualbudget/actual-server:latest
container_name: actual-budget
restart: unless-stopped
ports:
- "127.0.0.1:5006:5006"
volumes:
- ./data:/data
Обратите внимание: порт проброшен только на 127.0.0.1, то есть контейнер недоступен извне напрямую — снаружи к нему будет пускать только Nginx по HTTPS. Это разумная привычка для любого self-hosted сервиса на VPS: чем меньше портов торчит наружу без TLS, тем меньше поверхность атаки.
Запускаем:
docker compose up -d
Проверяем, что контейнер поднялся и слушает порт:
docker compose ps
curl -I http://127.0.0.1:5006
Если видите ответ с кодом 200 — сервер работает, дело за доменом и HTTPS.
Домен, DNS и Nginx как reverse proxy
Чтобы зайти на Actual Budget с телефона по нормальному адресу и получить рабочий HTTPS, нужен домен, указывающий на IP сервера. Если ещё не настраивали DNS-запись для этого сервера, порядок действий подробно разобран в статье про настройку домена и DNS на Ubuntu 24.04 — там же объясняется, сколько ждать распространения записи.
Дальше ставим Nginx и Certbot:
sudo apt install -y nginx certbot python3-certbot-nginx
Создаём конфиг сайта:
sudo nano /etc/nginx/sites-available/budget.example.com
server {
listen 80;
server_name budget.example.com;
location / {
proxy_pass http://127.0.0.1:5006;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Заголовки Upgrade/Connection нужны для WebSocket — Actual Budget использует их для синхронизации между открытыми клиентами в реальном времени.
Активируем конфиг и получаем сертификат:
sudo ln -s /etc/nginx/sites-available/budget.example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d budget.example.com
Certbot сам пропишет редирект на HTTPS и настроит автопродление сертификата. Если позже увидите, что сертификат не обновился сам, в статье про типичную причину этой проблемы разобраны конкретные шаги диагностики. Если вместо Nginx предпочитаете Caddy с его автоматическим HTTPS без отдельного certbot — сравнение подходов есть в статье «Caddy или Nginx: что выбрать для сервера».
Первый запуск и настройка бюджета
Открываем https://budget.example.com в браузере. При первом заходе Actual Budget попросит задать серверный пароль — это не пароль конкретного пользователя, а общий пароль доступа к серверу (в self-hosted версии система пользователей проще, чем в облачном сервисе, и рассчитана на использование одним человеком или семьёй с общим доверием).
После входа создаём новый файл бюджета — это будет ваш первый «бюджет» в интерфейсе. Дальше стандартная логика envelope-метода:
- Добавьте счета (карты, наличные, накопительный счёт) во вкладке Accounts.
- Создайте категории расходов («Продукты», «Транспорт», «Подписки» и так далее) — Actual предлагает стартовый набор, его можно смело переписать под себя.
- Занесите текущий баланс каждого счёта — это стартовая точка.
- Распределите доступные деньги по категориям на вкладке Budget — это и есть «конверты».
Для загрузки истории транзакций Actual Budget умеет импортировать CSV и OFX-выгрузки из банковских приложений — конкретный формат зависит от банка, универсального рецепта тут нет, придётся один раз аккуратно сопоставить колонки при импорте.
Синхронизация между устройствами
Ключевое преимущество self-hosted Actual Budget — несколько устройств работают с одним и тем же бюджетом через ваш сервер, без стороннего облака. Чтобы подключить второе устройство (телефон, ноутбук жены или мужа):
- Установите клиент Actual Budget (мобильное приложение или откройте тот же адрес в браузере на другом устройстве).
- В настройках синхронизации укажите адрес вашего сервера —
https://budget.example.com. - Введите серверный пароль, заданный при первом запуске.
- Выберите нужный файл бюджета из списка — он подтянется с сервера.
Синхронизация идёт через WebSocket, поэтому важно, чтобы Nginx корректно пробрасывал Upgrade-заголовки, как настроено выше — без этого клиент будет видеть сервер, но синхронизация периодически станет обрываться.
Бэкапы и обновление
Все данные Actual Budget хранятся в директории ~/actual-budget/data на хосте — это то, что нужно бэкапить регулярно, желательно на отдельное хранилище, а не только на тот же диск.
Простой скрипт для ежедневного архива:
#!/bin/bash
DATE=$(date +%Y-%m-%d)
BACKUP_DIR=~/actual-budget-backups
mkdir -p $BACKUP_DIR
tar -czf $BACKUP_DIR/actual-data-$DATE.tar.gz -C ~/actual-budget data
find $BACKUP_DIR -name "actual-data-*.tar.gz" -mtime +30 -delete
Сохраните как ~/backup-actual.sh, сделайте исполняемым (chmod +x) и добавьте в cron на ежедневный запуск ночью. Если раньше не настраивали cron-задачи на VPS, порядок действий и частые ошибки разобраны в статье про установку и настройку cron-задач.
Обновление приложения — смена тега образа и пересоздание контейнера:
cd ~/actual-budget
docker compose pull
docker compose up -d
Перед серьёзным обновлением (особенно между мажорными версиями) не лишним будет сделать свежий бэкап данных вручную — Actual Budget активно развивается, и формат базы иногда меняется вместе с миграциями схемы.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Actual Budget точно бесплатный при self-hosted установке?
Да, само приложение — открытый код, платите только за аренду сервера. Официальный hosted-план у разработчиков платный, но это отдельная опция, а не обязательное условие.
Можно обойтись без Docker?
Технически да, есть npm-сборка из исходников, но она требует ручной сборки фронтенда и слежения за версиями Node.js. Docker-образ — официально поддерживаемый и самый простой путь для VPS.
Что будет, если сервер временно недоступен?
Клиенты Actual Budget умеют работать офлайн и кэшируют последнее состояние локально, синхронизация подхватится автоматически, когда сервер снова станет доступен. Именно для этого офлайн-режима и нужен рабочий HTTPS — без него Service Worker браузер не активирует.
Сколько ресурсов сервера реально нужно?
Для одной семьи хватает минимальной конфигурации VPS — 1 vCPU и 1-2 ГБ RAM с запасом. Если на том же сервере крутятся другие сервисы, ориентируйтесь на их суммарные требования, а не только на Actual Budget.
Чем self-hosted Actual Budget отличается от Firefly III?
Оба open-source и хостятся сами, но у них разная философия: Actual — про envelope-бюджетирование и скорость ввода, Firefly III — про более детальную бухгалтерию с отчётами и множеством счетов. Подробнее об установке второго — в статье про Firefly III на Ubuntu 24.04, если хочется сравнить на практике.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →