Hoe maak je je eigen aangepaste Redmine Docker-afbeelding.

6/16/2020
9 minutes
Lukáš Beňa.
Redmine is een van de meest populaire tools voor projectmanagement en issue tracking. Als je het hebt geprobeerd of moest installeren in een productieomgeving, weet je waarschijnlijk ook dat er een officiële docker image is die de installatie en schaalbaarheid voor high-demand omgevingen sterk vereenvoudigt.

Redmine vóór aanpassing

Let op: Redmine native docker kan worden gevonden op https://hub.docker.com/_/redmine. Hier vindt u ook goede instructies over hoe u een externe database kunt vullen en externe mappen kunt koppelen (om plug-ins te kunnen installeren).

Als u, net als ik, de code voor het bouwen van een aangepaste Redmine Docker-image direct wilt zien, kunt u naar github.com/lcofre/redmine gaan en het Dockerfile-bestand bekijken.

Het Redmine Docker-image is een goed startpunt, hoewel u het waarschijnlijk wilt aanpassen met plug-ins en thema's naar uw smaak. In deze handleiding zullen we een Docker-image bouwen op basis van de officiële versie, enkele thema's en plug-ins toevoegen en deze uploaden naar het docker-register.

Voor de eenvoud zullen we geen externe database gebruiken, maar een interne database in de Redmine-container zelf. Voor een productieomgeving is het echter raadzaam om een toegewijde opslagcontainer op te zetten.


Plug-ins en thema's

We hebben een paar plug-ins en thema's gekozen om gevarieerde manieren te illustreren om ze aan Redmine toe te voegen:

  • Verberg zijbalk, een plug-in om meer schermruimte mogelijk te maken, vooral bij het schrijven van problemen
  • Plak klembord, om schermafbeeldingen bij te voegen door te plakken vanuit het klembord in plaats van een bestand te selecteren
  • A1 en Gitmike, twee thema's om het uiterlijk van de UI te veranderen

We sluiten plug-ins uit die een database-migratie vereisen, omdat u een bestaande database nodig heeft. Laat hieronder een reactie achter als u een plug-in moet installeren die migraties nodig heeft, omdat we goede ideeën voor u hebben.


Het Dockerfile-bestand schrijven

Een Dockerfile is een recept voor het bouwen van een Docker-image. Het eerste feit dat we hier zullen leren, is dat we ons beeld moeten baseren op een ander beeld, dus we zullen het officiële beeld voor Redmine gebruiken

FROM Redmine

Deze eerste regel van het Dockerfile-bestand zal ons beeld baseren op het nieuwste en beste beeld, 4.1.0 op het moment van schrijven. Omdat dit de nieuwste versie pakt, kunt u ervoor kiezen om een specifieke versie te gebruiken om onverwachte nieuwe versies te vermijden die de bouw van dit beeld kunnen breken

FROM Redmine:4.1.0


Gebruik Git om de componenten te krijgen

In de meeste gevallen hebben thema's en plugins git-repositories waar we de nieuwste code kunnen downloaden. Dit is het geval voor de volgende drie componenten.

De basis Redmine-image wordt geleverd zonder git, maar we kunnen het op deze manier aan de image toevoegen

RUN apt install -y git

Dit wordt uitgevoerd wanneer de image wordt gebouwd en stelt u in staat om git te gebruiken in de volgende instructies.

Gitmike-thema: ze raden aan om hun repo direct te klonen

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

Deze regel slaat het gekloonde project op in de juiste map public/themes

Sidebar verbergen: Dezelfde procedure kan worden toegepast op plugins. Deze vereist niets meer dan het plaatsen van de gekloonde map in de plugins-map

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

Clipboard-afbeelding plakken: Dit lijkt ook de typische procedure te zijn, kloon de repo en je bent klaar om te gaan

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

Maar als je een beetje meer leest zul je zien dat "het aanbevolen wordt om de RMagick-gem te installeren, anders worden bijgevoegde afbeeldingen niet weergegeven in geëxporteerde PDF-bestanden". Dus hoe doen we dit? Het zou zo eenvoudig moeten zijn als

RUN gem install rmagick

maar je weet waarschijnlijk dat de gem moet worden gebouwd voordat deze kan worden geïnstalleerd, dus je moet wat pakketten installeren voordat je de gem installeert. De regel die je echt nodig hebt is

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

       && gem install rmagick

Allemaal in één opdracht, verdeeld over twee regels voor leesbaarheid.

De oorspronkelijke auteur van deze plugin biedt geen versie voor Redmine 4, maar een zoekopdracht naar de pluginnaam in GitHub bracht me op een project dat dat wel doet: RubyClickAP/clipboard_image_paste.


Een plugin of thema toevoegen vanuit een gedownloade bron

Het A1-thema is een goed voorbeeld om de gevallen te illustreren waarin u de bron heeft, maar geen URL om tijdens het bouwproces te downloaden. Een optie in gevallen als deze is om de bron aan het bouwproces te leveren. Op die manier wordt de inhoud aan de image toegevoegd zonder deze te downloaden

COPY a1 public/themes/a1

Hierbij moet de a1-map op dezelfde plaats staan als het Dockerfile-bestand.

Nu ben je klaar om je image te bouwen, dus open een terminal waar je Dockerfile staat en voer uit

docker build -t my-redmine .

Zodra het is gebouwd, kunt u uw image uitvoeren met

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

Ga naar http://localhost:3000 om uw aangepaste Redmine te zien!

Redmine na aanpassing


Enkele tips om meer plugins toe te voegen

Om nieuwe plugins uit te proberen, is het altijd beter om een nieuwe Redmine-container te gebruiken. Zo kwam ik erachter dat rmagick enkele pakketten moest installeren. Voer eerst een wegwerpexemplaar van Redmine uit met

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

en ga vervolgens naar de instantie met

docker exec -it test-redmine bash

Daar kunt u OS-pakketten installeren, gems installeren of migraties uitvoeren. Onthoud gewoon de stappen zodat u ze aan uw Dockerfile kunt toevoegen!


Je aangepaste afbeelding uploaden naar Docker Hub

De afbeelding die je zojuist hebt gebouwd is alleen beschikbaar voor je lokale omgeving. Wat als je het beschikbaar wilt maken voor anderen, laten we zeggen voor iedereen? Natuurlijk kun je de Dockerfile en gerelateerde bestanden uploaden naar een git-repo en kunnen geïnteresseerden de afbeelding zelf bouwen. Maar Docker staat je ook toe om de gebouwde afbeelding naar hun register te uploaden. Maak daarvoor een account aan op hub.docker.com en maak ook een repository aan voor je afbeelding. Log vervolgens in op de terminal als volgt

docker login

Tag je afbeelding zodat deze kan worden geüpload naar je repo

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

en push het als volgt

docker push lcofre/redmine:latest

De Docker-afbeelding in het Docker-register

Nu kan iedereen je afbeelding uitproberen door het volgende te doen

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

Dat is het! Zo ga je van een standaard Redmine-installatie naar een gepersonaliseerde versie die toegankelijk is in het Docker-register. Deel alsjeblieft je opmerkingen of vragen hieronder.


Het formaat van de Docker-afbeelding verkleinen

Je zult merken dat de Dockerfile in de repo veel regels heeft samengevoegd tot één. Dit is een aanbeveling van Docker om kleinere afbeeldingen te maken. Je kunt dat advies en andere vinden op https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

Nog een aanbeveling om de uiteindelijke grootte van de afbeelding te verminderen, is om de alpine-versie van Redmine te gebruiken

FROM Redmine:alpine

Alpine is een andere Linux-distributie. In plaats van apt te gebruiken om pakketten te installeren, moet je apk gebruiken.

Nog een laatste tip: de pakketten die we hebben geïnstalleerd met apt in de Dockerfile zijn niet meer nodig nadat de afbeelding is gebouwd. Je kunt de best practice volgen van het gebruik van multi-stage builds: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#use-multi-stage-builds

De praktijk om een kleine Docker-afbeelding te behouden helpt vooral bij het opschalen van het aantal instanties, maar vermindert ook het aanvalsoppervlak op je afbeelding.

De ultieme Redmine-upgrade? Makkelijk.

Krijg alle krachtige tools voor perfect projectplanning, -beheer en -controle in één software.

Ontdek Easy Redmine

Probeer Easy Redmine 30 dagen gratis uit

Volledige functies, SSL-beveiligd, dagelijkse back-ups, in uw geografische locatie