Sådan opretter du dit brugerdefinerede Redmine Docker-billede

6/16/2020
8 minutes
Lukáš Beňa
Redmine er et af de mest populære værktøjer til projektstyring og fejlsporing. Hvis du har prøvet det eller har været nødt til at installere det i en produktionsmiljø, ved du sandsynligvis også, at der findes et officielt docker-billede, der i høj grad forenkler installation og skalering for miljøer med høj efterspørgsel.

Redmine før tilpasning

Bemærk: Redmine native docker kan findes på https://hub.docker.com/_/redmine. Her kan du også finde gode instruktioner om, hvordan du udfylder en ekstern database og monterer eksterne mapper (for at kunne installere plugins).

Hvis du er som mig og foretrækker at se koden direkte til opbygning af et brugerdefineret Redmine Docker-billede, kan du gå til github.com/lcofre/redmine og tjekke Dockerfilen.

Redmine Docker-billedet er et godt udgangspunkt, selvom du sandsynligvis gerne vil tilpasse det med plugins og temaer efter din smag. I denne vejledning vil vi opbygge et Docker-billede baseret på det officielle, tilføje nogle temaer og plugins og uploade det til docker-registret.

For enkelhedens skyld vil vi ikke bruge en ekstern database, men en intern database i Redmine-containeren selv. Til en produktionsmiljø anbefales det dog at oprette en dedikeret lagercontainer.


Plugins og temaer

Vi har valgt nogle plugins og temaer for at illustrere forskellige måder at tilføje dem til Redmine:

  • Skjul sidebjælke, et plugin der giver mere skærmplads, især når du skriver sager
  • Indsæt fra udklipsholder, til at vedhæfte skærmbilleder ved at indsætte fra udklipsholderen i stedet for at vælge en fil
  • A1 og Gitmike, to temaer der ændrer udseendet af brugergrænsefladen

Vi udelukker plugins, der kræver en database migration, da du har brug for en forudgående eksisterende database. Kommenter nedenfor, hvis du har brug for at installere et plugin, der kræver migrationer, da vi har gode ideer til dig.


Skriv Dockerfilen

En Dockerfil er en opskrift på, hvordan man bygger et Docker-billede. Det første faktum, vi vil lære her, er, at vi skal basere vores billede på et andet billede, så vi vil bruge det officielle til Redmine

FRA Redmine

Denne første linje i Dockerfilen vil basere vores billede på den nyeste og bedste version, 4.1.0 på skrivetidspunktet. Da dette vil hente hvilken som helst nyeste version, kan du foretrække at bruge en specifik version for at undgå uventede nye versioner, der kan bryde opbygningen af dette billede

FRA Redmine:4.1.0


Brug af Git til at hente komponenterne

I de fleste tilfælde har temaer og plugins git-repositorier, hvor vi kan downloade den nyeste kode. Dette gælder for følgende tre komponenter.

Den grundlæggende Redmine-billede kommer uden git, men vi kan tilføje det til billedet på denne måde

RUN apt install -y git

Dette vil blive udført, når billedet bygges, og vil tillade dig at bruge git i de følgende instruktioner.

Gitmike-tema: de anbefaler at klone deres repo direkte

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

Linjen vil gemme det klonede projekt i den passende mappe public/themes

Skjul sidebjælken: Den samme procedure kan anvendes på plugins. Denne kræver ikke mere end at placere den klonede mappe i plugins-mappen

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

Clipboard Billede Indsæt: Dette virker også som den typiske procedure, klon repoet, og du er klar til at gå

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

Men hvis du læser lidt mere vil du se, at "det anbefales at installere RMagick-gemmen, ellers vises vedhæftede billeder ikke i eksporterede PDF-filer". Så hvordan gør vi det? Det burde være lige så nemt som

RUN gem install rmagick

men du ved nok, at gemmen skal bygges, før den kan installeres, så du skal installere nogle pakker, før du installerer gemmen. Linjen, du virkelig har brug for, er

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

       && gem install rmagick

Alt i en kommando, adskilt i to linjer for læsbarhed.

Den oprindelige forfatter af dette plugin giver ikke en version til Redmine 4, men en søgning på pluginnavnet på GitHub førte mig til et projekt, der gør det: RubyClickAP/clipboard_image_paste.


Tilføjelse af et plugin eller tema fra en downloadet kilde

A1-temaet er et godt eksempel på at illustrere tilfældene, hvor du har kilden, men ikke en URL til at downloade under bygningsprocessen. En mulighed i sådanne tilfælde er at give kilden til bygningsprocessen. På den måde tilføjes indholdet til billedet uden at downloade det

COPY a1 public/themes/a1

Dette kræver, at a1-mappen er på samme sted som Dockerfilen.

Nu er du klar til at bygge dit billede, så åbn en terminal, hvor din Dockerfil er, og udfør

docker build -t my-redmine .

Når det er bygget, kan du køre dit billede med

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

Gå videre og åbn http://localhost:3000 for at se dit tilpassede Redmine!

Redmine efter tilpasning


Nogle tips til at tilføje flere plugins

For at prøve nye plugins er det altid bedre at bruge en frisk Redmine-container. Det er sådan, jeg opdagede, at rmagick kræver, at nogle pakker installeres. Kør først en kassérbar instans af Redmine med

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

og gå derefter ind i instansen med

docker exec -it test-redmine bash

Der kan du installere OS-pakker, gems eller køre migrationer. Husk bare trinnene, så du kan tilføje dem til din Dockerfil!


Overførsel af dit brugerdefinerede billede til Docker Hub

Billedet, du lige har bygget, er kun tilgængeligt i din lokale miljø. Hvad nu hvis du vil gøre det tilgængeligt for andre, lad os sige for alle? Selvfølgelig kan du uploade Dockerfilen og relaterede filer til et git repo, og de interesserede kan bygge billedet selv. Men Docker giver dig også mulighed for at uploade det byggede billede til deres register. For at gøre det skal du oprette en konto på hub.docker.com og også oprette et repository til dit billede. Derefter logger du ind i terminalen på denne måde

docker login

Tag dit billede, så det kan uploades til dit repo

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

og push det på denne måde

docker push lcofre/redmine:latest

Docker-billedet i Docker-registret

Nu kan alle prøve dit billede ved at gøre følgende

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

Det er det! Sådan går du fra en standard Redmine-installation til en personlig version, der er tilgængelig i Docker-registret. Del gerne dine kommentarer eller spørgsmål nedenfor.


Reducer størrelsen på Docker-billedet

Du vil opdage, at Dockerfilen i repoet har slået mange linjer sammen til en. Dette er en anbefaling fra Docker for at gøre billederne mindre. Du kan finde dette råd og andre på https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

En anden anbefaling for at reducere den endelige størrelse på billedet er at bruge alpine-versionen af Redmine

FRA Redmine:alpine

Alpine er en anden Linux-distribution. I stedet for at bruge apt til at installere pakker skal du bruge apk.

Et sidste tip: De pakker, vi installerede med apt i Dockerfilen, er ikke længere nødvendige efter, at billedet er bygget. Du kan følge bedste praksis ved at bruge multi-stage builds: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#use-multi-stage-builds

Praksissen med at holde et lille Docker-billede hjælper især, når antallet af instanser skal skaleres op, men reducerer også angrebsfladen på dit billede.

Den ultimative Redmine-opgradering? Nemt.

Få alle kraftfulde værktøjer til perfekt projektplanlægning, -styring og -kontrol i en enkelt software.

Opdag Easy Redmine

Prøv Easy Redmine i en 30 dages gratis prøveperiode

Fuld funktionalitet, SSL-beskyttet, daglige backups, i din geolocation