Sådan opretter du dit brugerdefinerede Redmine Docker-billede

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.