Установка Ontrack на Ubuntu 22.04 с Docker Compose и Caddy

О чём эта статья
- Получение зависимостей для Ontrack
- Сборка контейнера Ontrack и настройка secret-ключей
- Настройка SSL reverse proxy через Caddy
- Создание пользователя и первой транзакции в Ontrack
Важно: предполагается, что вы используете Ubuntu LTS (22.04), у вас есть домен, и сервер доступен из интернета. Рекомендуемый минимум памяти — 2 ГБ; без swapfile и при меньшем объёме памяти сборка Docker может завершиться неудачей.
Быстрые термины
- Docker: платформа для запуска приложений в контейнерах.
- Caddy: веб-сервер с автоматическим получением TLS-сертификатов.
- SECRET_KEY_BASE / DATABASE_URL: секреты Rails/базы данных, которые нужно генерировать случайно и хранить защищённо.
1. Получение зависимостей для Ontrack
Первый шаг — установить Docker и Caddy: Docker запустит приложение в контейнере, а Caddy обеспечит HTTPS и обратный прокси.
- Добавьте GPG-ключ Docker и создайте файл ключей:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg- Создайте файл репозитория для Docker:
sudo nano /etc/apt/sources.list.d/docker.listВставьте в него строку:
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable- Добавьте ключ и репозиторий Caddy:
curl -fsSL 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -fsSL 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy.list- Обновите apt и установите пакеты:
sudo apt update && sudo apt upgrade -y
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-buildx-plugin caddy gitПримечание: если у вас проблемы с зависимостями apt, используйте apt –fix-broken install или проверьте /var/log/apt/term.log.
Важное
- Убедитесь, что пользователь, под которым вы работаете, имеет права sudo.
- Проверьте версию Docker:
docker --version.
2. Получение репозитория Ontrack и подготовка секретов
Склонируйте официальный репозиторий Ontrack и перейдите в каталог проекта:
git clone https://github.com/inoda/ontrack.git && cd ./ontrackСгенерируйте два длинных случайных ключа для SECRET_KEY_BASE и пароля базы данных:
cat /dev/urandom | tr -dc 'A-Za-z0-9' | fold -w32 | head -n 1 >> ~/random-pass.txt
cat /dev/urandom | tr -dc 'A-Za-z0-9' | fold -w32 | head -n 1 >> ~/random-pass.txtОткройте файл random-pass.txt, чтобы скопировать две строки — первая будет для SECRET_KEY_BASE, вторая — для пароля Postgres.

Откройте docker-compose.yml:
nano ./docker-compose.yml- Замените значение
SECRET_KEY_BASEна первую случайную строку. - В
DATABASE_URLзаменитеsecretна вторую случайную строку. - В
POSTGRES_PASSWORDтакже вставьте вторую случайную строку.

Обновление Dockerfile и зависимостей Node/Babel
Откройте Dockerfile:
nano ./DockerfileИзмените базовый образ на рекомендуемый Ruby-сборочный образ:
FROM ruby:3.1.2-alpine
Откройте package.json и внесите небольшие исправления зависимостей:
nano ./package.jsonНайдите строку с @babel/preset-env и под ней добавьте:
"babel-plugin-macros": "^3.0.1",В секции devDependencies после @babel/eslint-parser добавьте:
"@babel/plugin-proposal-object-rest-spread": "^7.15.4",

Настройка хоста в окружении разработки
Откройте файл окружения Rails:
nano ~/ontrack/config/environments/development.rbДобавьте сразу после Rails.application.configure do:
config.hosts = [
"SUBDOMAIN.YOUR-ROOT.DOMAIN"
]Замените SUBDOMAIN.YOUR-ROOT.DOMAIN на ваш реальный поддомен, например ontrack.example.com.

3. Сборка и запуск контейнеров Ontrack
Сохраните изменения и запустите сборку контейнеров:
sudo docker compose up --detachСборка может занимать 5–10 минут в зависимости от ресурсов сервера. На машинах с менее чем 2 ГБ ОЗУ и без swapfile Docker может завершиться с ошибкой; в таком случае добавьте swap или используйте более мощный хост.
Проверьте запущенные контейнеры:
sudo docker ps
Если контейнеры не запускаются, соберите логи:
sudo docker compose logs --follow4. Настройка SSL reverse proxy с Caddy
По умолчанию приложение слушает порт 3000 локально. Чтобы безопасно открыть его в интернет, настроим Caddy как обратный прокси с автоматическим TLS.
В панели управления DNS добавьте A‑запись для поддомена, например
ontrack.example.com, указывающую на IP вашего сервера.Создайте резервную копию оригинального Caddyfile и откройте новый:
sudo mv /etc/caddy/Caddyfile ~/Caddyfile.backup
sudo nano /etc/caddy/CaddyfileВставьте конфигурацию:
SUBDOMAIN.YOUR-ROOT.DOMAIN {
reverse_proxy :3000
}Замените SUBDOMAIN.YOUR-ROOT.DOMAIN на свой поддомен.
- Запустите или перезапустите сервис Caddy:
sudo systemctl enable --now caddy.serviceПроверьте статус Caddy:
sudo systemctl status caddy.serviceОткройте в браузере ваш поддомен и убедитесь, что сайт доступен по HTTPS.

Полезное: Caddy автоматически получает сертификаты от Let’s Encrypt. Если DNS ещё не обновился, Caddy не сможет получить TLS — дождитесь распространения записи.
5. Создание пользователя и первой транзакции
- Откройте shell контейнера Ontrack:
sudo docker exec -it ontrack sh- Откройте Rails консоль для работы с базой:
bundle exec rails c- Создайте пользователя (замените имя и пароль на свои):
User.create!(username: "YOUR-USERNAME", password: "YOUR-SECURE-PASSWORD")
- Введите
exitдля выхода из Rails консоли, затем Ctrl+D для выхода из контейнера.

- Откройте страницу Ontrack в браузере, войдите и создайте категорию расходов: нажмите Add a category.

- Заполните имя категории, цвет тега и лимит (пример: “Leisure”, красный тег, лимит $200). Фактическая валюта зависит от ваших настроек.

- Нажмите Add an expense, заполните форму и сохраните.


- Проверьте историю транзакций через ссылку History в правом верхнем углу.

Дополнительные рекомендации и проверочные списки
Критерии приёмки
- Приложение доступно по HTTPS на вашем поддомене.
- Docker контейнеры
ontrackиpostgresзапущены и стабильны. - Вы создали администратора/пользователя и добавили хотя бы одну категорию и транзакцию.
- SECRET_KEY_BASE и пароли хранятся в безопасном месте и не закоммичены в репозиторий.
Роль‑ориентированные чеклисты
Администратор сервера:
- Убедиться в наличии обновлений системы и корректных прав на файлы Caddy.
- Настроить бэкапы базы данных (см. рекомендации ниже).
Разработчик / оператор приложения:
- Проверить Dockerfile и package.json на совместимость с используемыми версиями Ruby и Node.
- Локально протестировать сборку перед деплоем на прод.
Пользователь/менеджер бюджета:
- Создать категории расходов и задать лимиты.
- Периодически экспортировать данные (если предусмотрено).
Мини‑методология безопасности секретов
- Генерируйте секреты с /dev/urandom или
openssl rand -hex 32. - Храните секреты в защищённом файле вне репозитория (например, /etc/ontrack/secrets.env с правами 600) или используйте секреты Docker/Swarm/Kubernetes.
- Периодически ротация паролей и резервного копирования.
Резервное копирование и восстановление (рекомендации)
- Организуйте ежедневный дамп PostgreSQL:
pg_dumpв зашифрованное хранилище (удалённый S3/Backblaze и т. п.). - Храните минимум 7 точек восстановления за 7 дней.
- Тестируйте восстановление раз в квартал.
Устранение распространённых ошибок
- Проблема: Caddy не получает сертификат — проверьте DNS A-запись и её распространение.
- Проблема: Docker завершает сборку без ошибок, но приложение не запускается — запустите
sudo docker compose logsи ищите stack-trace Rails/Node. - Проблема: недостаточно памяти — добавьте swap или увеличьте объём ОЗУ сервера.
- Проблема: права на ключи — убедитесь, что файлы ключей имеют корректные права и владелец root.
Безопасность и конфиденциальность
- Доступ к админ-панели должен быть ограничен сильными паролями и, при возможности, двухфакторной аутентификацией.
- Для дополнительной защиты можно ограничить доступ по IP в конфигурации Caddy.
- Обратите внимание на персональные данные: если вы храните финансовые данные пользователей, соблюдайте применимые правила хранения и обработки (локальные требования и GDPR при работе с EU‑гражданами).
Альтернативные подходы
- Nginx вместо Caddy: если у вас уже есть Nginx в инфраструктуре, можно настроить его как reverse proxy и использовать Certbot для TLS.
- Использовать готовый облачный хостинг для контейнеров (DigitalOcean App Platform, Render, Fly.io) для упрощения управления — но это уменьшает контроль над self‑hosted.
- Разворачивать в Kubernetes, если нужна масштабируемость и централизованное управление секретами.
Диаграмма принятия решения (показательно)
flowchart TD
A[Есть домен и VPS?] -->|Да| B[Установить Docker и Caddy]
A -->|Нет| C[Купить домен / арендовать VPS]
B --> D[Склонировать Ontrack]
D --> E[Сгенерировать секреты]
E --> F[Настроить docker-compose и Caddy]
F --> G[Запустить контейнеры и проверить HTTPS]
G --> H[Создать пользователя и транзакции]Частые вопросы (коротко)
- Нужно ли менять базовый образ Ruby? Рекомендуется использовать стабильный образ, совместимый с Rails версии проекта.
- Можно ли использовать SQLite? В поставляемом docker-compose используется Postgres — менять СУБД не рекомендуется без понимания последних зависимостей.
Итог и дальнейшие шаги
Установка Ontrack с Docker и Caddy обеспечивает простоту развертывания и автоматическое получение TLS. После запуска рекомендую:
- Настроить бэкапы базы и проверку логов.
- Настроить мониторинг контейнеров (Prometheus/Alertmanager или простые healthchecks).
- Регулярно обновлять образы и зависимости.
Image credit: Campaign Creators via Unsplash and Ontrack Github. Все скриншоты и изменения сделаны автором руководства.
Похожие материалы
Исправление ошибки Exception 0x800a03ec в Excel
Как играть в секретную мини‑игру Google Squid Game
Как сохранить файлы из iMessage в «Файлы»
Как исправить ошибки Avast 1316, 1638, 1603
Добавить музыку в видео на iPhone