Установка Bitnami Redmine в 2026: Docker, AWS и VM

Бесплатный Redmine от Bitnami закончился. Ставьте Redmine из официального Docker-образа redmine с PostgreSQL. Сохраните в пустую папку файл compose.yaml:

services:
  db:
    image: postgres:18
    restart: unless-stopped
    environment:
      POSTGRES_USER: redmine
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: redmine
    volumes:
      - pgdata:/var/lib/postgresql
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -h 127.0.0.1 -U redmine -d redmine"]
      interval: 5s
      retries: 10

  redmine:
    image: redmine:7.0
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
    ports:
      - "8080:3000"
    environment:
      REDMINE_DB_POSTGRES: db
      REDMINE_DB_USERNAME: redmine
      REDMINE_DB_PASSWORD: ${DB_PASSWORD}
      REDMINE_DB_DATABASE: redmine
      SECRET_KEY_BASE: ${SECRET_KEY_BASE}
    volumes:
      - files:/usr/src/redmine/files

volumes:
  pgdata:
  files:

Сгенерируйте пароли и запустите:

printf 'DB_PASSWORD=%s\nSECRET_KEY_BASE=%s\n' "$(openssl rand -hex 16)" "$(openssl rand -hex 64)" > .env
docker compose up -d

Когда в docker compose logs redmine появится Listening on http://0.0.0.0:3000, откройте http://ваш-сервер:8080 и войдите как admin / admin. Redmine сразу попросит сменить пароль. Я проверял этот файл на Redmine 7.0.3 и PostgreSQL 18.6.

Что стало с Bitnami Redmine

На ноябрь 2026 года:

  • У bitnami/redmine на Docker Hub не осталось публичных тегов: образ доступен только по платной подписке Bitnami Secure Images. В бесплатном наборе bitnamisecure Redmine нет.
  • bitnamilegacy/redmine — замороженная копия. Последний тег 6.0.6-debian-12-r7 от 22 августа 2025 года. Обновлений и поддержки не будет (объявление), а на странице в Docker Hub Bitnami предупреждает, что репозиторий могут удалить.
  • AWS: образы Bitnami и шаблоны Lightsail убрали 10 июня 2026 года (Broadcom). Запущенные серверы работают, но обновлений не получают. Страница в AWS Marketplace отвечает «Page not found».
  • VM и установщики: с июня 2025 года виртуалки Bitnami (OVA) скачивают только клиенты VMware (bitnami/vms#1831), а страницы Redmine на bitnami.com перекидывают на главную Bitnami Secure Images. Установщики для Windows, macOS и Linux закрыли в ноябре 2022 года.

Ваш сервер на Bitnami продолжит работать, но без заплаток. А сам Redmine уже дошёл до версий 7.0.3, 6.1.6 и 6.0.12 (загрузки).

Логин и пароль Bitnami Redmine по умолчанию

Логин — user, а не admin. Где взять пароль:

  • VM или сервер EC2: sudo cat /home/bitnami/bitnami_credentials. На EC2 пароль ещё первые сутки виден в системном логе инстанса.
  • Lightsail: cat ~/bitnami_application_password.
  • Docker-образ bitnamilegacy/redmine: bitnami1, если при первом запуске не задали REDMINE_PASSWORD.
  • MariaDB на VM от Bitnami: пользователь root, пароль тот же, что у приложения.

Забыли пароль? Сбросьте его одной командой.

Настройка почты

Настройки SMTP Redmine берёт из config/configuration.yml. Создайте его рядом с compose.yaml:

production:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: smtp.example.com
      port: 587
      enable_starttls_auto: true
      authentication: :login
      user_name: "redmine@example.com"
      password: "app-password"

Добавьте его в volumes сервиса redmine и выполните docker compose up -d:

    volumes:
      - files:/usr/src/redmine/files
      - ./configuration.yml:/usr/src/redmine/config/configuration.yml

На сервере Bitnami правьте /opt/bitnami/redmine/config/configuration.yml и перезапускайте sudo /opt/bitnami/ctlscript.sh restart.

Чтобы отправить проверочное письмо:

  1. В разделе «Моя учётная запись» укажите свой настоящий адрес. Письмо уйдёт на него, а у свежего админа там заглушка (admin@dummy.invalid в 7.0).
  2. В разделе Администрирование → Настройки → Уведомления по email заполните «Исходящий email адрес».
  3. Нажмите «Послать email для проверки».

Адрес сайта для ссылок в письмах

Ссылки в письмах Redmine собирает из настроек. Заполните «Имя компьютера» и «Протокол» в разделе Администрирование → Настройки → Общее. Или из консоли:

docker compose exec redmine bundle exec rails runner \
  'Setting.host_name = "redmine.example.com"; Setting.protocol = "https"'

Контейнер отдаёт обычный HTTP на порту 3000. HTTPS делайте на прокси перед ним: nginx, Caddy или Traefik.

Если Redmine стоит на сервере Bitnami, направьте домен на его IP и запустите sudo /opt/bitnami/bncert-tool. Утилита спросит имена доменов, получит сертификат Let's Encrypt, настроит его продление и редирект с HTTP на HTTPS. Виртуальные хосты Apache, в которых я в 2016 году прописывал ServerName и ServerAlias, теперь лежат в /opt/bitnami/apache/conf/vhosts/ (документация Bitnami).

secret_key_base: ошибка в Bitnami и разлогины

Если запустить rails или rake вручную в Bitnami Redmine, где ключа ещё нет, получите:

Missing `secret_key_base` for 'production' environment, set this string with `bin/rails credentials:edit` (ArgumentError)

Совет про credentials:edit пропустите. На виртуалке или облачном сервере Bitnami ключ создаёт задача самого Redmine:

cd /opt/bitnami/redmine
RAILS_ENV=production bundle exec rake generate_secret_token

Ключ подписывает cookie сессий, поэтому новый ключ после перезапуска разлогинит всех.

В контейнере bitnamilegacy/redmine вместо этого задайте SECRET_KEY_BASE в environment, как в compose.yaml выше. Без переменной контейнер генерирует новый ключ при каждом пересоздании. Официальный образ ведёт себя так же. Я проверил оба: с переменной сессия пережила пересоздание контейнера, без неё Redmine отправил меня на страницу входа.

Переезд с Bitnami на официальный образ

Ваши данные — база bitnami_redmine и папка files с вложениями. Дамп из MariaDB от Bitnami загружается в MySQL 8.4 после одной замены через sed, поэтому базу меняем на MySQL. В compose.yaml замените сервис db, REDMINE_DB_POSTGRES поменяйте на REDMINE_DB_MYSQL, а том pgdata переименуйте в dbdata:

  db:
    image: mysql:8.4
    restart: unless-stopped
    command: --transaction-isolation=READ-COMMITTED
    environment:
      MYSQL_DATABASE: redmine
      MYSQL_USER: redmine
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_RANDOM_ROOT_PASSWORD: "yes"
    volumes:
      - dbdata:/var/lib/mysql
    healthcheck:
      test: ["CMD-SHELL", "mysql -h 127.0.0.1 -u redmine -p$$MYSQL_PASSWORD -e 'SELECT 1' redmine"]
      interval: 5s
      retries: 20

Инструкция по установке Redmine требует для MySQL режим READ-COMMITTED.

На старом сервере:

mysqldump -u root -p bitnami_redmine > bitnami_redmine.sql
tar czf redmine_files.tar.gz -C /opt/bitnami/redmine files

mysqldump спросит пароль — он тот же, что у приложения. Нет команды mysqldump — берите mariadb-dump. Если Redmine работал в compose-проекте на bitnamilegacy/redmine:

docker compose exec -T mariadb mariadb-dump -u root bitnami_redmine > bitnami_redmine.sql
docker compose cp redmine:/bitnami/redmine/files ./files

Если у root там есть пароль, первая строка такая: docker compose exec -T mariadb sh -c 'mariadb-dump -u root -p"$MARIADB_ROOT_PASSWORD" bitnami_redmine' > bitnami_redmine.sql.

На новом сервере (tar пропустите, если папка files уже есть):

docker compose up -d --wait db
sed 's/utf8mb4_uca1400_ai_ci/utf8mb4_0900_ai_ci/g' bitnami_redmine.sql \
  | docker compose exec -T db sh -c 'mysql -u redmine -p"$MYSQL_PASSWORD" redmine'
tar xzf redmine_files.tar.gz
docker compose create redmine
docker compose cp files/. redmine:/usr/src/redmine/files/
docker compose up -d
docker compose exec redmine chown -R redmine:redmine files

sed меняет правило сортировки utf8mb4_uca1400_ai_ci, которого в MySQL нет, на utf8mb4_0900_ai_ci. Его ставит на таблицы MariaDB 11.5 и новее, в том числе bitnamilegacy/mariadb:latest. Дамп из MariaDB постарше sed оставит как есть.

При запуске образ сам обновит базу с 6.0 до 7.0. Входите под старым логином Bitnami. chown не пропускайте: docker compose cp сохраняет прежних владельцев файлов, и загрузка вложений падает с Errno::EACCES: Permission denied. Я так перенёс Redmine из bitnamilegacy/redmine:6.0.6, вложения доехали.

Плагины, которые поддерживают 7.0, положите в папку ./plugins, примонтируйте её в /usr/src/redmine/plugins и задайте REDMINE_PLUGINS_MIGRATE: "1". Подробнее — в посте про плагины Redmine.

Обновление Redmine в Docker

Сначала бэкап:

docker compose exec -T db pg_dump -U redmine redmine > redmine-$(date +%F).sql
docker compose cp redmine:/usr/src/redmine/files ./files-backup

Если переехали на MySQL, дамп снимайте так: docker compose exec -T db sh -c 'mysqldump --no-tablespaces -u redmine -p"$MYSQL_PASSWORD" redmine' > redmine-$(date +%F).sql.

Поменяйте тег, например redmine:6.1 на redmine:7.0, и выполните:

docker compose pull
docker compose up -d

Миграции запустятся сами — так я обновил 6.1.6 до 7.0.3. Тег 7.0 при каждом pull подтягивает исправления 7.0.x.

С новой мажорной версией PostgreSQL так не выйдет. postgres:19rc1 на томе от 18-й версии падает с there appears to be PostgreSQL data in: /var/lib/postgresql/18/docker. Снимите дамп, запустите новую версию на пустом томе и загрузите дамп через psql.

Частые ошибки

  • Том PostgreSQL 18 примонтирован в /var/lib/postgresql/data, как в старых инструкциях. Контейнер падает с Error: in 18+, these Docker images are configured to store database data in a format which is compatible with "pg_ctlcluster". Монтируйте /var/lib/postgresql.
  • Дамп из MariaDB 11.5 или новее загружен без sed. Импорт падает с ERROR 1273 (HY000) at line 26: Unknown collation: 'utf8mb4_uca1400_ai_ci'.
  • Healthcheck через mysqladmin ping. Он проходит даже при Access denied, а при первом запуске ему отвечает временный сервер, на котором MySQL готовит базу. --wait db возвращается раньше, чем поднимется настоящий сервер. Проверяйте вход по TCP, как в compose.yaml выше.
  • Дамп снят с --databases, как в инструкции Bitnami по обновлению. Он переключается на базу bitnami_redmine, и загрузка падает с Access denied for user 'redmine'@'%' to database 'bitnami_redmine'.
  • $ в .env: Compose читает ab$cd как ab плюс пустую переменную. Пароли из openssl rand -hex таких символов не содержат.
  • Старые пути из версии этого поста 2016 года: /opt/bitnami/apps/redmine и правка Apache, чтобы убрать префикс /redmine. Нынешние сборки Bitnami держат Redmine в /opt/bitnami/redmine и открывают его с корня сайта.
Консультирую по продукту, собираю MVP и учу делать продукты самостоятельно. Поработать со мной →