Иногда возникает задача развернуть, например, redmine по-быстрому и без всяких премудростей, чтобы сразу приступить к своим задачам. Чтобы долго не тупить над ошибками во время установки, можно поступить проще и использовать контейнеризацию, а конкретно, многим уже известный Docker.
Информация бралась с сайта https://kostya.openyoga.ru/it-notes/установка-redmine-через-docker-compose.html, который на 28 мая 2019 уже даже не резолвился.
P.S. [2020.07.16] Актуализировал редмайн на версию 4.1. И поправил небольшие баги в тексте.
Но так как контейнеры все же в сути своей неизменяемые сущности и, просто запустив redmine и базу данных без подготовки, можно любоваться на сделанные изменения до перезапуска контейнера, то после его остановки надо всё начинать сначала. Это если в общих чертах.
Поэтому были придуманы разные способы для выноса данных, которые необходимо сохранять. Здесь я не буду упоминать слои докера и тому подобное, мысль веду к тому, что нужно вынести отдельно некоторые директории, в которых будут важные и необходимые данные.
Поэтому начнём с быстрой установки docker и затем перейдём к установке redmine через docker-compose.
Начальные условия:
- ОС: Ubuntu 18.04, но это не принципиально, просто команды указаны для Debian-like среды,
- БД — Postgresql
Ставим Docker
Обновляем список пакетов
sudo apt update
Устанавливаем требуемые компоненты
sudo apt install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common -y
Устанавливаем ключ из официального репозитория.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \ | sudo apt-key add -
Проверяем, что ключ установился:
sudo apt-key fingerprint 0EBFCD88
В выводе команды долго содержаться словосочетание «Docker release (CE deb)»
Устанавливаем репозиторий стабильной версии
sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
Обновляем систему
sudo apt update
Устанавливаем docker и docker-compose
sudo apt install -y docker-ce docker-compose
Настраиваем Docker
Добавим себя (например, пусть наш логин будет administrator) в группу docker, чтобы не писать каждый раз sudo при выполнении команд
sudo usermod -aG docker administrator
Создадим под проект папку
mkdir ~/docker && cd ~/docker
Создадим Dockerfile со следующим содержимым
nano Dockerfile
FROM redmine:4.1 RUN apt-get update
Dockerfile нам понадобится для создания кастомного образа Redmine. Например, если для какого то плагина нужно установить зависимости, мы просто дописываем команды для установки зависимостей в Dockerfile после инструкции RUN.
Создаём docker-compose.yml файл с таким содержимым:
nano docker-compose.yml
version: '3.3' services: postgres: image: postgres:10 volumes: - ./storage/postgresql-data:/var/lib/postgresql/data environment: POSTGRES_PASSWORD: "strong_pass" POSTGRES_DB: "redmine" PGDATA: "/var/lib/postgresql/data" restart: always redmine: build: context: . image: redmine:custom ports: - 80:3000 volumes: - ./storage/docker_redmine-plugins:/usr/src/redmine/plugins - ./storage/docker_redmine-themes:/usr/src/redmine/public/themes - ./storage/docker_redmine-data:/usr/src/redmine/files environment: REDMINE_DB_POSTGRES: "postgres" REDMINE_DB_USERNAME: "postgres" REDMINE_DB_PASSWORD: "strong_pass" REDMINE_DB_DATABASE: "redmine" REDMINE_SECRET_KEY_BASE: "…" restart: always
Как видите, в docker-compose.yml создаются несколько точек проброса (или volumes) в которых хранятся база данных, файлы тем, загружаемые пользователями файлы и файлы плагинов, которые всегда можно найти на https://www.redmine.org/plugins/
Все эти папки доступны в хостовой системе по пути, указанному выше: ~/docker/storage/
Теперь при запуске контейнера по пути ~/docker/storage/ будут созданы следующие папки: в папке postgresql-data будут храниться файлы базы данных, в папке docker_redmine-plugins — плагины, в docker_redmine-themes — темы (вдруг кто пользуется ими), в docker_redmine-data — файлы, прикрепляемые к задачам в redmine.
В основном всё готово. Можно выполнить docker-compose up и, дождавшись скачивания необходимых образов, увидеть строки, говорящие, что всё прошло успешно.
Запуск
docker-compose up
После запуска обязательно зайдите в Администрирование и во всплывающем сообщении нажмите Загрузить схему данных, иначе могут не работать многие функции.
Если хочется ещё и отправки уведомлений на почту, то пишем файл configuration.yml
nano ~/docker/storage/configuration.yml
с примерно таким содержимым. Настройки почты для каждого отдельного сервиса, будь то gmail, yandex или rambler свои
production: email_delivery: delivery_method: :smtp smtp_settings: enable_starttls_auto: true address: "smtp.gmail.com" port: 587 domain: "smtp.gmail.com" authentication: :plain user_name: "your_email@gmail.com" password: "password"
В файл docker-compose.yml вставляем после строк с вынесенными вовне директориями следующую строку
- ./docker/storage/configuration.yml:/usr/src/redmine/config/configuration.yml
Redmine готов к работе.
Обновлять его достаточно просто. Для обновления версии redmine нужно всего лишь выполнить две команды
docker-compose build docker-compose restart
Установка плагинов:
Плагины можно скопировать git’ом в папку docker_redmine-plugins или иным удобным способом и после выполнить docker-compose restart
В файле Dockerfile можно указать нужную версию redmine, если планируете переходить на, например, четвёртую версию.
На этом пока всё. Возможны небольшие доработки в статье
Здравствуйте! Скажите, в момент запуска docker-compose up — появляется много строк и заканчивается строчкой redmin_1………..
И у вас написано «После запуска обязательно зайдите в Администрирование и во всплывающем сообщении нажмите Загрузить схему данных, иначе могут не работать многие функции.» а как это сделать, что напечатать нужно?
Я только начинающий в линукс области, и прошу помочь:))
Спасибо.
Строки — это логи запущенного контейнера. Если не видно ошибок в них, то всё в целом сделано успешно.
Для того, чтобы зайти в Администрирование, в браузере введите IP адрес сервера на котором запущен redmine, залогиньтесь под именем admin и паролем admin, смените пароль при первом входе, сверху зайдите в Администрирование и выберите Загрузить схему данных.
Благодарю Вас за столь быстрый ответ, Администрирование нашёл, но сообщения такого нет про загрузить схему данных.
Скажите, а можно поставить точно также и новую версию redmine 5.1 или 4.1 самая стабильная?
Спасибо.
Видимо, уже делали какие-то операции. Если не жалко данных, то удалите базу и создайте заново.
Версии 5.1 и 5.0 сейчас стабильные. Статья писалась давно. Версия 4 разработчиками уже не поддерживается.
Спасибо за статью. А как собственно зайти на сам редмайн? Какой логин\пароль?
admin — admin
Потом redmine заставит поменять пароль
Доброго времени. Спасибо за подробную и понятную инструкцию. Всё получилось.
Есть вопрос есть ли такая же инструкция для rpm систем? Хочу поднять на отечественных ОС, а в нашем случае там только rpm пакеты.
Буду благодарен за подробный ответ или ссылку на таковую инструкцию.
Для RPM систем, например, той же РЕД ОС, можно поставить пакеты docker-ce и docker-compose и тогда эта инструкция будет актуальной и для rpm систем.
Ребята подскажите!
Вроде все сделал по инструкции, Redmine завелся и работает, но в настройках почты пишет
«Параметры работы с почтовым сервером не настроены и функция уведомления по email не активна.
Настроить параметры для Вашего SMTP-сервера Вы можете в файле config/configuration.yml. Для применения изменений перезапустите приложение.»
Файл по инструкции сделал:
production:
email_delivery:
delivery_method: :smtp
smtp_settings:
enable_starttls_auto: true
address: «smtp.mail.ru»
port: 587
domain: «smtp.mail.ru»
authentication: :plain
user_name: «redmine******@mail.ru»
password: «*********»
Надеюсь после того как вы положили файл, а точнее пробросили в контейнер, контейнер перезапустили, чтобы сервис подхватил настройки?
Да само собой!
В docker-compose.yml добавил строку
version: ‘3.3’
services:
postgres:
image: postgres:10
volumes:
— ./storage/postgresql-data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: «strong_pass»
POSTGRES_DB: «redmine»
PGDATA: «/var/lib/postgresql/data»
restart: always
redmine:
build:
context: .
image: redmine:custom
ports:
— 80:3000
volumes:
— ./storage/docker_redmine-plugins:/usr/src/redmine/plugins
— ./storage/docker_redmine-themes:/usr/src/redmine/public/themes
— ./storage/docker_redmine-data:/usr/src/redmine/files
— ./storage/configuration.yml:/usr/src/redmine/config/configuration.yml
environment:
REDMINE_DB_POSTGRES: «postgres»
REDMINE_DB_USERNAME: «postgres»
REDMINE_DB_PASSWORD: «strong_pass»
REDMINE_DB_DATABASE: «redmine»
REDMINE_SECRET_KEY_BASE: «…»
restart: always
Под перезапуском я понимаю остановку через «docker compose down» и запуск через «docker compose up -d»
Если что, всегда можно зайти в контейнер через docker exec -it redmine-redmine-1 bash и посмотреть есть ли в config вообще сам файл почтовой конфигурации. А там дальше смотреть что да как
Подскажите, если кто знает, как привязать доменное имя к redmine который находится в docker. Я сделал все по инструкции выше, все запускается и работает. Потом я hostland.ru купил доменное имя, но вот как теперь привязать его к redmine пока не разобрался. Что удивительно, в инете тоже путного ничего не нашел.
Всё достаточно стандартно. Нужно, чтобы можно было зайти на IP-адрес сервера на котором работает редмайн. Если это виртуалка, то адрес обычно известен и виден в панели управления. Если работает на ПК\сервере через роутер\файрвол, то нужен проброс портов до редмайна. А дальше в панели управления DNS провайдера, у которого купили доменное имя, указываете соответствие имени своего сайта IP-адресу своей виртуалки\ПК\сервера
Ещё бы про установку плагинов статейку
А что интересует в будущей статье, кроме содержания последнего абзаца в этой? Или была бы полезна статья про обычную установку плагинов, вне зависимости от типа запуска редмайн?
Лично я, если хочу развернуть редмайн таким способом, то обращаюсь к докерхабу. При этом плагины ставятся без каких-либо проблем.
Спасибо за статью! Судя по страничке redmine в docker hub, теперь нужно указывать переменную REDMINE_PLUGINS_MIGRATE=true
чтобы при старте контейнера устанавливались плагины
REDMINE_PLUGINS_MIGRATE была всегда, и она просто принудительно запускает обновление плагинов.
Как сказано на той странице — https://hub.docker.com/_/redmine
«Эта переменная позволяет вам контролировать, запускается ли процесс rake redmine:plugins:migrate при запуске контейнера. Просто установите значение переменной в 1 или true, и сценарий миграции будет автоматически запускаться при каждом запуске контейнера. Он будет запущен после операции db:migrate.
redmine:plugins:migrate не будет запускаться, если вы запускаете свой образ с чего-то другого, кроме стандартного CMD, например bash. См. текущий docker-entrypoint.sh в вашем образе для деталей.»
В стандартном образе redmine файла docker-entrypoint.sh нет, потому и необходимости в такой переменной я не вижу.
Как-то так
В стандартном redmine имэдже файл docker-entrypoint.sh есть: https://github.com/docker-library/redmine/blob/f5895d1d4bff53a590b6048e294dc96b26206883/4.1/Dockerfile#L141
Но я не проверял, устанавливаются ли плагины без этой переменной. Может быть вы и правы. Просто я знаю, что миграции необходимы при установке новых плагинов.
Спасибо за полезную статью.
Подскажите пожалуйста как настроить работу через HTTPS на официальном образе redmine ?
(как генерировать сертификаты я разобрался , но дальше не получается. Параметр REDMINE_HTTPS=true в docker-compose.yml игнорируется)
Самым предпочтительным, на мой взгляд, решением будет проксирование запросов к образу redmine через образ nginx, в котором уже можно наделать нужных сертификатов. Таким образом обеспечивается изоляция сервисов и удобство управления. Ну и плюс стандартный образ redmine запускает webrick, а для production это не есть хорошо. Можно использовать тег redmine:4-passenger, и к нему прикрутить тот же nginx.
Образы места много не занимают, а головную боль уменьшают.
Проблема — отсутсвует кнопка «новая задача» на панели задач.
p.s. Права есть, пробовал на разных пользователях, проект новый, делал по инструкции выше
у меня при добавлении почты выходит такая ошибка:
cs800671:~/redmine$ docker-compose build
postgres uses an image, skipping
Building redmine
Traceback (most recent call last):
File «bin/docker-compose», line 6, in
File «compose/cli/main.py», line 72, in main
File «compose/cli/main.py», line 128, in perform_command
File «compose/cli/main.py», line 304, in build
File «compose/project.py», line 397, in build
File «compose/project.py», line 380, in build_service
File «compose/service.py», line 1104, in build
File «site-packages/docker/api/build.py», line 160, in build
File «site-packages/docker/utils/build.py», line 30, in tar
File «site-packages/docker/utils/build.py», line 49, in exclude_paths
File «site-packages/docker/utils/build.py», line 214, in rec_walk
File «site-packages/docker/utils/build.py», line 214, in rec_walk
File «site-packages/docker/utils/build.py», line 184, in rec_walk
PermissionError: [Errno 13] Permission denied: ‘/home/artddss/redmine/storage/postgresql-data’
[53787] Failed to execute script docker-compose
Кажется, мой косяк в описании yaml-файла. Не сделал необходимые отступы после слова «async_smtp_settings».
Поправлю.
Как добавить доменное имя?
Если вы имеете в виду сделать доступ к редмайну по доменному имени, а не по IP (что в общем так и делается), то я бы сделал проксированием через nginx. nginx по идее может быть даже запущен на том же самом хосте.
Иные случаи уже тянут на целую статью и сильно «монолитят» текущую инсталляцию. Это надо и LetsEncrypt настраивать и сертификаты в виртуальные директории прокидывать. Если надо, то скажите — попробую помочь.
Но лучше через обратную проксю.
Вы мне очень помогли, большое спасибо!
а где, собственно, сам Redmine?
А сам Redmine будет доступен по адресу машины, на которой крутится docker на порту 80, если судить по конфигу файла docker-compose.yml