Гид по технологиям

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

6 min read Бюджетирование Обновлено 05 Dec 2025
Установка Ontrack на Ubuntu 22.04 с Docker и Caddy
Установка Ontrack на Ubuntu 22.04 с Docker и 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 и обратный прокси.

  1. Добавьте 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
  1. Создайте файл репозитория для 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
  1. Добавьте ключ и репозиторий 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
  1. Обновите 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.

Терминал, показывающий две сгенерированные строки паролей для Ontrack.

Откройте docker-compose.yml:

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

Терминал, выделяющий второй пароль в переменной POSTGRES_PASSWORD.

Обновление Dockerfile и зависимостей Node/Babel

Откройте Dockerfile:

nano ./Dockerfile

Измените базовый образ на рекомендуемый Ruby-сборочный образ:

FROM ruby:3.1.2-alpine

Терминал, показывающий изменённую версию Ruby в Dockerfile.

Откройте 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",

Терминал, показывающий добавленную зависимость.

Терминал, показывающий вторую dev-зависимость.

Настройка хоста в окружении разработки

Откройте файл окружения 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

Терминал, показывающий два контейнера Docker, запускающие Ontrack.

Если контейнеры не запускаются, соберите логи:

sudo docker compose logs --follow

4. Настройка SSL reverse proxy с Caddy

По умолчанию приложение слушает порт 3000 локально. Чтобы безопасно открыть его в интернет, настроим Caddy как обратный прокси с автоматическим TLS.

  1. В панели управления DNS добавьте A‑запись для поддомена, например ontrack.example.com, указывающую на IP вашего сервера.

  2. Создайте резервную копию оригинального Caddyfile и откройте новый:

sudo mv /etc/caddy/Caddyfile ~/Caddyfile.backup
sudo nano /etc/caddy/Caddyfile

Вставьте конфигурацию:

SUBDOMAIN.YOUR-ROOT.DOMAIN {
    reverse_proxy :3000
}

Замените SUBDOMAIN.YOUR-ROOT.DOMAIN на свой поддомен.

  1. Запустите или перезапустите сервис Caddy:
sudo systemctl enable --now caddy.service

Проверьте статус Caddy:

sudo systemctl status caddy.service

Откройте в браузере ваш поддомен и убедитесь, что сайт доступен по HTTPS.

Скриншот, показывающий, что инстанс Ontrack работает корректно.

Полезное: Caddy автоматически получает сертификаты от Let’s Encrypt. Если DNS ещё не обновился, Caddy не сможет получить TLS — дождитесь распространения записи.


5. Создание пользователя и первой транзакции

  1. Откройте shell контейнера Ontrack:
sudo docker exec -it ontrack sh
  1. Откройте Rails консоль для работы с базой:
bundle exec rails c
  1. Создайте пользователя (замените имя и пароль на свои):
User.create!(username: "YOUR-USERNAME", password: "YOUR-SECURE-PASSWORD")

Терминал, показывающий примерные учётные данные пользователя.

  1. Введите exit для выхода из Rails консоли, затем Ctrl+D для выхода из контейнера.

Терминал, показывающий процесс выхода из контейнера Ontrack.

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

Скриншот кнопки Add a category в Ontrack.

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

Скриншот с примером категории в Ontrack.

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

Скриншот кнопки Add an expense.

Скриншот формы расходов в Ontrack.

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

Скриншот с примером транзакции в истории Ontrack.


Дополнительные рекомендации и проверочные списки

Критерии приёмки

  • Приложение доступно по 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. Все скриншоты и изменения сделаны автором руководства.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Исправление ошибки Exception 0x800a03ec в Excel
Excel

Исправление ошибки Exception 0x800a03ec в Excel

Как играть в секретную мини‑игру Google Squid Game
Развлечения

Как играть в секретную мини‑игру Google Squid Game

Как сохранить файлы из iMessage в «Файлы»
iOS

Как сохранить файлы из iMessage в «Файлы»

Как исправить ошибки Avast 1316, 1638, 1603
Безопасность ПО

Как исправить ошибки Avast 1316, 1638, 1603

Добавить музыку в видео на iPhone
Видео

Добавить музыку в видео на iPhone

Двойная загрузка Windows 11 и Ubuntu — пошагово
Руководство

Двойная загрузка Windows 11 и Ubuntu — пошагово