План и чек-лист установки Redmine

Проект: DENKART
Дата создания: 2026-02-10
Целевой домен: tasks.cdto.group
Контекст: 1–2 пользователя, экономия RAM, LXD-архитектура
Версия: Redmine 6.1.1 Opale (Ruby 3.2.3)
Плагин Ганта: Easy Gantt — см. раздел «Установка Easy Gantt» ниже


Исходные данные

Параметр Значение
Пользователей 1–2 одновременных
Функции Git/SVN репозитории, диаграмма Ганта
Домен tasks.cdto.group
Доступ Внешний (SSL)
Приоритет Параллельно BBB и 1С
Ограничение Максимальная экономия RAM

Рекомендуемый способ: LXD-контейнер с нативной установкой Redmine + PostgreSQL (без Redis/Sidekiq).
Оценка RAM: ~1–1,2 GB для контейнера redmine (включая PostgreSQL).


План установки

Фаза 1. Подготовка (на хосте)

  1. Сохранение состояния — перед любыми изменениями:
    bash sudo /home/cdto/DENKART/scripts/save-state-before-migration.sh pre-redmine-install
  2. Проверка свободной RAM — убедиться, что есть запас (~1.5 GB).
  3. Создание LXD-контейнера — Ubuntu 22.04 LTS, лимиты: 1 CPU, 1.2 GB RAM.
  4. Назначение IP — статический адрес в LXD-сети (например, 10.218.14.103).
  5. Storage pool — использовать infra-pool (dir) как у других контейнеров.

Фаза 2. Базовая настройка контейнера

  1. Запуск контейнера, обновление пакетов.
  2. Установка Ruby (3.2 или 3.3), Bundler, build-essential.
  3. Установка PostgreSQL (apt).
  4. Установка ImageMagick (для экспорта Gantt в PNG).
  5. Установка Git (для SCM); при необходимости — Subversion.
  6. Создание БД и пользователя PostgreSQL для Redmine.

Фаза 3. Установка Redmine

  1. Скачивание Redmine (релиз 6.1.x).
  2. Распаковка в /opt/redmine или /var/www/redmine.
  3. Настройка config/database.yml.
  4. bundle install (без development, test, rmagick при проблемах).
  5. Генерация секрета сессий: bundle exec rake generate_secret_token.
  6. Миграции БД: RAILS_ENV=production bundle exec rake db:migrate.
  7. Загрузка дефолтных данных: RAILS_ENV=production REDMINE_LANG=ru bundle exec rake redmine:load_default_data.
  8. Права на каталоги: files, log, tmp, tmp/pdf, public/assets.
  9. Настройка веб-сервера (Nginx + Passenger или Puma).

Фаза 4. Веб-сервер и SSL

  1. Установка Nginx и Passenger (или Puma за reverse proxy).
  2. Виртуальный хост для tasks.cdto.group внутри контейнера.
  3. Проксирование с nginx-reverse-proxy (или BBB, если это единая точка входа) на контейнер redmine.
  4. SSL: выдача сертификата для tasks.cdto.group (Let's Encrypt).
  5. Добавление tasks.cdto.group в конфиг маршрутизации (config/nginx/).

Фаза 5. DNS и маршрутизация

  1. DNS: A-запись tasks.cdto.group → внешний IP (89.179.242.240).
  2. Проброс портов 80/443 (если ещё не настроен общий проброс).
  3. Добавление tasks.cdto.group в Nginx reverse proxy.

Фаза 6. Постустановка

  1. Вход admin/admin — немедленная смена пароля.
  2. Настройка SMTP (опционально, для уведомлений).
  3. Настройка SCM: пути к git/svn.
  4. Настройка attachment storage (по умолчанию files).
  5. Включение автозапуска контейнера (при необходимости).
  6. Добавление в план резервного копирования: БД + каталог files.

Чек-лист выполнения

Фаза 1. Подготовка

  • [x] Выполнен save-state-before-migration.sh pre-redmine-install
  • [ ] Сделан коммит и выгрузка в репозиторий (точка отката)
  • [x] Проверена свободная RAM: free -h — доступно ≥ 1.5 GB
  • [x] Создан LXD-контейнер (имя: redmine, образ: Ubuntu 22.04)
  • [x] Назначены лимиты: limits.memory=1228MiB, limits.cpu=1
  • [x] Настроен статический IP 10.218.14.103 (netplan + DNS в config/redmine-netplan-eth0.yaml)
  • [x] Контейнер запущен и доступен

Фаза 2. Базовая настройка контейнера

  • [x] Обновлены пакеты: apt update && apt upgrade -y
  • [x] Установлены: build-essential, libpq-dev, libmagickwand-dev, git, curl, nginx
  • [x] Установлен Ruby 3.0 (apt) — Redmine 5.1.11 совместим
  • [x] Установлен Bundler: gem install bundler
  • [x] Установлен PostgreSQL: apt install postgresql postgresql-contrib -y
  • [x] Создана БД и пользователь PostgreSQL для Redmine
  • [x] ImageMagick установлен (для Gantt в PNG)

Фаза 3. Установка Redmine

  • [x] Скачан Redmine 5.1.11 (совместим с Ruby 3.0)
  • [x] Распакован в /var/www/redmine
  • [x] Скопирован config/database.yml.exampleconfig/database.yml
  • [x] В database.yml прописаны параметры подключения к PostgreSQL
  • [x] Выполнен bundle config set --local without 'development test'
  • [x] Выполнен bundle install
  • [x] Выполнен bundle exec rake generate_secret_token
  • [x] Выполнен RAILS_ENV=production bundle exec rake db:migrate
  • [x] Выполнен RAILS_ENV=production REDMINE_LANG=ru bundle exec rake redmine:load_default_data
  • [x] Созданы каталоги: tmp, tmp/pdf, public/plugin_assets (Redmine 5.1)
  • [x] Настроены права: chown -R redmine:redmine files log tmp public/plugin_assets
  • [x] Установлен Puma, systemd-сервис redmine.service
  • [x] Redmine запущен на порту 3000, автозапуск включён

Фаза 4. Веб-сервер и SSL

  • [x] Добавлен server для tasks.cdto.group в config/nginx/nginx-reverse-proxy-routing.conf
  • [ ] Деплой конфига: если трафик идёт через nginx-reverse-proxy — скопировать конфиг в контейнер; если через BBB — добавить tasks.cdto.group в HAProxy и Nginx BBB
  • [ ] Выпущен SSL-сертификат для tasks.cdto.group (если cert denkart.cdto.group не wildcard)
  • [ ] Конфиг Nginx обновлён и перезагружен
  • [ ] Добавлена запись в config/nginx/ репозитория для tasks.cdto.group

Фаза 5. DNS и маршрутизация

  • [ ] DNS: A-запись tasks.cdto.group → 89.179.242.240
  • [ ] С хоста проверен доступ: curl -sI -H "Host: tasks.cdto.group" https://192.168.1.112/
  • [ ] Из внешней сети проверен доступ: https://tasks.cdto.group

Фаза 6. Постустановка

  • [ ] Выполнен вход admin/admin
  • [ ] Пароль администратора изменён
  • [ ] Настроен SMTP (если требуется)
  • [ ] Проверена работа Git/SVN (создан тестовый проект с репозиторием)
  • [ ] Проверен экспорт Gantt в PNG
  • [x] Контейнер redmine: автозапуск отключён (ручной режим для экономии RAM)
  • [ ] Добавлен бэкап: БД Redmine + каталог files
  • [ ] Обновлён docs/setup/services-config.md — добавлен контейнер redmine
  • [ ] Обновлён docs/host-server-passport.md — добавлен домен tasks.cdto.group
  • [ ] Выполнена синхронизация документации: sudo /home/cdto/DENKART/scripts/sync-docs-to-web.sh

Важные замечания

Экономия RAM

  • Redis и Sidekiq не устанавливаются — для 1–2 пользователей достаточно встроенного AsyncAdapter.
  • Лимит контейнера 1.2 GB; при необходимости можно уменьшить до 1 GB и мониторить.
  • PostgreSQL внутри того же контейнера — экономия на отдельном контейнере.

SCM (Git/SVN)

  • Установить git в контейнер; для SVN — subversion.
  • Репозитории можно хранить на /D или /storage (примонтировать volume в контейнер).

Резервное копирование

  • База данных: pg_dump redmine > backup.sql
  • Вложения: tar -czf files-backup.tar.gz /var/www/redmine/files
  • Включить в docs/operations/backup.md или full-backup-plan.md.

Установка Easy Gantt

Официальный плагин Easy Gantt совместим с Redmine 6.x. Свободная версия доступна по адресу: https://www.easyredmine.com/redmine-gantt-plugin

Шаги установки (в контейнере redmine):
1. Скачать плагин с сайта easyredmine.com (регистрация может потребоваться).
2. Распаковать в /var/www/redmine/plugins/ — каталог должен называться easy_gantt.
3. Выполнить: bundle install, bundle exec rake redmine:plugins:migrate RAILS_ENV=production.
4. Перезапустить Redmine: systemctl restart redmine.

Важно: Включить REST API в Administration → Settings для корректной работы плагина.

Примечание: Репозитории bencomtech/redmine_easy_gantt и imasdetres/redmine_easy_gantt на GitHub имеют проблемы совместимости (RedmineExtensions::PatchManager). Рекомендуется использовать официальный плагин с easyredmine.com.

Redmine 6 имеет встроенную диаграмму Ганта (меню проекта → Gantt), которая работает без дополнительных плагинов.

Связанные документы


Статус выполнения (2026-02-10)

✅ Установка Redmine завершена.

  • Фазы 1–5 выполнены: Redmine 6.1.1 Opale (Ruby 3.2.3), контейнер redmine (10.218.14.103:3000)
  • Маршрутизация: tasks.cdto.group добавлен в HAProxy и Nginx BBB
  • SSL: сертификат Let's Encrypt для tasks.cdto.group
  • Тема: Opale. Плагин: Easy Gantt (бесплатная версия)

Режим работы: Контейнер redmine запускается автоматически после перезагрузки хоста (boot.autostart=true). Остановка при необходимости:

lxc stop redmine

Запуск вручную (если остановлен):

lxc start redmine

Проверка Redmine (при запущенном контейнере): curl -sI http://10.218.14.103:3000/ → HTTP/1.1 200 OK


Технический директор: AI Denkart
Владелец ресурсов: CDTO Dkvark