bg
Език
  • en
  • de
  • fr
  • es
  • br
  • ru
  • jp
  • kr
Превод от изкуствен интелект
  • ee
  • ae
  • cn
  • vn
  • id
  • eu
  • il
  • gr
  • no
  • fi
  • dk
  • se
  • tr
  • bg
  • nl
  • it
  • pl
  • hu
  • ro
  • ua
  • cs

Как да създадете персонализиран Docker образ на Redmine

6/16/2020
9 minutes
Лукъш Беня
Редмайн е един от най-популярните инструменти за управление на проекти и проследяване на проблеми. Ако сте го опитали или сте трябвало да го инсталирате в производствена среда, вероятно знаете, че има официален Docker образ, който значително опростява инсталирането и мащабирането за среди с високо търсене.

Redmine преди персонализация

Забележка: Можете да намерите нативния докер на Redmine на https://hub.docker.com/_/redmine. Тук можете да намерите и добри инструкции за това как да попълните външна база данни и да монтирате външни папки (за да можете да инсталирате плъгини).

Ако сте като мен и предпочитате да видите директно кода за изграждане на персонализиран Docker образ на Redmine, можете да отидете на github.com/lcofre/redmine и да проверите Dockerfile.

Образът на Redmine Docker е добро начало, въпреки че вероятно бихте искали да го персонализирате с плъгини и теми по ваш вкус. В това ръководство ще изградим Docker образ, базиран на официалния, ще добавим някои теми и плъгини и ще го качим в docker регистъра.

Заради опростяване, няма да използваме външна база данни, а вместо това вътрешна база данни в самия контейнер на Redmine. За производствена среда обаче е препоръчително да се настрои отделен контейнер за съхранение.


Плъгини и теми

Избрахме няколко плъгина и теми, за да илюстрираме различни начини за добавяне им към Redmine:

Изключваме плъгини, които изискват миграция на базата данни, тъй като ви е необходима предварително съществуваща база данни. Моля, коментирайте по-долу, ако имате нужда да инсталирате плъгин, който изисква миграции, тъй като имаме добри идеи за вас.


Написване на Dockerfile

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

FROM Redmine

Този първи ред от Dockerfile ще базира или образ на последния и най-добър образ, 4.1.0 в момента на писане. Тъй като това ще хване каквато и да е версия, която е най-нова, може да предпочетете да използвате конкретна версия, за да избегнете неочаквани нови версии, които могат да нарушат изграждането на този образ

FROM Redmine: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

Clipboard Image paste: Това също изглежда като типичната процедура, клонирайте репото и сте готови да продължите

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

Там можете да инсталирате OS пакети, гемове или да изпълните миграции. Просто запомнете стъпките, за да ги добавите към Dockerfile!


Качване на персонализирано изображение в Docker Hub

Изображението, което току-що построихте, е достъпно само за вашата локална среда. Какво ако искате да го направите достъпно за други, кажете за всички? Разбира се, можете да качите Dockerfile и свързаните файлове в git repo, и заинтересованите могат да построят изображението сами. Но 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 в repo съединява много редове в един. Това е препоръка на Docker, за да се направят по-малки изображения. Можете да намерите този съвет и други в https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

Още една препоръка за намаляване на крайния размер на изображението е да използвате алпайн версията на Redmine

FROM Redmine: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, ежедневни резервни копия, във вашата географска локация