Як створити свій власний образ Docker для Redmine.

6/16/2020
9 minutes
Лукаш Беньа
Redmine є одним з найпопулярніших інструментів для управління проектами та відстеження проблем. Якщо ви вже пробували його або мали досвід установки виробничого середовища, ви, напевно, знаєте, що існує офіційний образ docker, який значно спрощує установку та масштабування для високонавантажених середовищ.

Redmine до налаштування

Примітка: Нативний Docker Redmine можна знайти на https://hub.docker.com/_/redmine. Тут ви також можете знайти хороші інструкції щодо наповнення зовнішньої бази даних та монтування зовнішніх папок (для можливості встановлення плагінів).

Якщо ви, як і я, віддаєте перевагу безпосередньому перегляду коду для створення власного зображення Docker Redmine, ви можете перейти на github.com/lcofre/redmine та перевірити Dockerfile.

Зображення Docker Redmine - це хороша стартова точка, хоча ви, ймовірно, захочете налаштувати його з плагінами та темами за своїм смаком. У цьому посібнику ми створимо зображення Docker на основі офіційного, додамо деякі теми та плагіни та завантажимо його до реєстру Docker.

З метою спрощення ми не будемо використовувати зовнішню базу даних, але внутрішню базу даних в контейнері Redmine. Однак для середовища виробництва рекомендується налаштувати окремий контейнер зберігання.


Плагіни та теми

Ми вибрали кілька плагінів та тем, щоб проілюструвати різні способи їх додавання до Redmine:

  • Hide sidebar, плагін, що дозволяє отримати більше місця на екрані, особливо при написанні питань
  • Paste clipboard, для додавання знімків екрану, вставляючи з буфера обміну замість вибору файлу
  • A1 та Gitmike, дві теми для зміни вигляду користувацького інтерфейсу

Ми виключаємо плагіни, які потребують міграції бази даних, оскільки вам потрібна передбачувана база даних. Будь ласка, залиште коментар нижче, якщо вам потрібно встановити плагін, який потребує міграції, оскільки у нас є хороші ідеї для вас.


Написання Dockerfile

Dockerfile - це рецепт, як створити зображення Docker. Перша річ, яку ми дізнаємося тут, полягає в тому, що ми повинні базувати наше зображення на якомусь іншому зображенні, тому ми використовуємо офіційне зображення для Redmine

FROM Redmine

Цей перший рядок Dockerfile базує або зображення на найновішому та найкращому зображенні, 4.1.0 на момент написання. Оскільки це забере будь-яку версію, яка є найновішою, ви можете віддати перевагу використанню конкретної версії, щоб уникн

Використання Git для отримання компонентів

У більшості випадків теми та плагіни мають репозиторії Git, де ми можемо завантажити останній код. Це стосується наступних трьох компонентів.

Базовий образ Redmine поставляється без Git, але ми можемо додати його до образу таким чином:

RUN apt install -y git

Це буде виконано при побудові образу і дозволить вам використовувати Git у наступних інструкціях.

Тема Gitmike: вони рекомендують клонувати свій репозиторій безпосередньо

RUN git clone https://github.com/makotokw/redmine-theme-gitmike.git public/themes/gitmike

Цей рядок збереже клонований проект у відповідній папці public/themes

Приховати бічну панель: Той же процес можна застосувати до плагінів. Для цього потрібно лише помістити клоновану папку у папку плагінів

RUN git clone https://gitlab.com/bdemirkir/sidebar_hide.git plugins/sidebar_hide

Вставка зображення з буферу обміну: Це також здається типовим процесом, клонуйте репозиторій і ви готові до роботи

RUN git clone https://github.com/RubyClickAP/clipboard_image_paste.git plugins/clipboard_image_paste

Але якщо ви прочитаєте трохи більше, то побачите, що "рекомендується встановити гем RMagick, інакше прикріплені зображення не будуть відображатися в експортованих PDF-файлах". Як це зробити? Це повинно бути так само просто, як

RUN gem install rmagick

але ви, напевно, знаєте, що гем потрібно побудувати перед тим, як його можна буде встановити, тому вам потрібно встановити деякі пакети перед встановленням гема. Рядок, який вам дійсно потрібен, це

RUN apt install -y build-essential imagemagick libmagickcore-dev libmagickwand-dev ruby-dev \

       && gem install rmagick

Все в одній команді, розділені на дві лінії для зручності читання.

Оригінальний автор цього плагіна не надає версії для Redmine 4, але пошук назви плагіна в GitHub привів мене до проекту, який має: RubyClickAP/clipboard_image_paste.


Додавання плагіна або теми з завантаженого джерела

Тема A1 є хорошим прикладом для ілюстрації випадків, коли у вас є джерело, але немає URL для завантаження під час процесу побудови. Один з варіантів у таких випадках - надати джерело процесу побудови. Таким чином, вміст додається до образу без завантаження його

COPY a1 public/themes/a1

Для цього потрібно, щоб папка a1 була в тому ж місці, де знаходиться Dockerfile.

Тепер ви готові побудувати свій образ, тому відкрийте термінал там, де знаходиться ваш Dockerfile, і виконайте

docker build -t my-redmine .

Після побудови ви зможете запустити свій образ за допомогою

docker run -it -p 3000:3000 --name my-redmine my-redmine

Перейдіть за адресою http://localhost:3000, щоб побачити свій власний Redmine!

Redmine після налаштування


Деякі поради щодо додавання більше плагінів

Щоб випробувати нові плагіни, завжди краще використовувати свіжий контейнер Redmine. Так я розумів, що для роботи rmagick потрібно встановити деякі пакети. Спочатку запустіть контейнер Redmine, який можна відкинути, з

docker run --rm -d -p 3000:3000 --name test-redmine redmine

а потім увійдіть до екземпляру з

docker exec -it test-redmine bash

Там ви можете встановлювати пакети ОС, геми або запускати міграції. Просто запам'ятайте кроки, щоб ви могли додати їх до свого Dockerfile!


Завантаження вашого власного зображення до Docker Hub

Зображення, яке ви щойно створили, доступне лише для вашого локального середовища. Що, якщо ви хочете зробити його доступним для інших, скажімо, для всіх? Звичайно, ви можете завантажити Dockerfile та пов'язані файли до git-репозиторію, і зацікавлені можуть створити зображення самостійно. Але Docker також дозволяє вам завантажити побудоване зображення до їх реєстру. Для цього створіть обліковий запис на hub.docker.com та створіть репозиторій для свого зображення. Потім увійдіть в термінал таким чином:

docker login

Позначте своє зображення, щоб його можна було завантажити до вашого репозиторію

docker tag my-redmine:latest lcofre/redmine:latest

і завантажте його таким чином

docker push lcofre/redmine:latest

Зображення Docker у реєстрі Docker

Тепер будь-хто може спробувати ваше зображення, виконавши

docker run -it -p 3000:3000 --name my-redmine lcofre/redmine

Це все! Ось як ви переходите від стандартної установки Redmine до персоналізованої версії, доступної в реєстрі Docker. Будь ласка, поділіться своїми коментарями або запитаннями нижче.


Зменшення розміру зображення Docker

Ви знайдете, що Dockerfile в репозиторії об'єднав багато рядків в один. Це рекомендація Docker, щоб зменшити розмір зображень. Ви можете знайти цей та інші поради на https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

Ще одна рекомендація для зменшення кінцевого розміру зображення - використовувати альпійську версію Redmine

FROM Redmine:alpine

Alpine - це інша дистрибуція Linux. Замість apt для встановлення пакетів потрібно використовувати apk.

Остання порада: пакети, які ми встановили за допомогою apt в Dockerfile, більше не потрібні після побудови зображення. Ви можете дотримуватися найкращої практики використання багатоетапних збірок: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#use-multi-stage-builds

Практика збереження невеликого розміру зображення Docker допомагає особливо при масштабуванні кількості екземплярів, а також зменшує поверхню атаки на ваше зображення.

Оновлення Redmine на вищий рівень? Легко.

Отримайте всі потужні інструменти для ідеального планування, управління та контролю проектів в одному програмному забезпеченні.

Відкрийте для себе Easy Redmine

Спробуйте Easy Redmine у 30-денній безкоштовній пробній версії

Повнофункціональний, захищений SSL, щоденне резервне копіювання, у вашій геолокації