Korleis lage di eiga tilpassa Redmine Docker-bilete

6/16/2020
8 minutes
Lukáš Beňa
Redmine er eitt av dei mest populære verktøya for prosjektstyring og oppfølging av problem. Om du har prøvd det eller måtte installere det i ein produksjonsmiljø, veit du sannsynlegvis også at det finst eit offisielt Docker-bilete som gjer installasjon og skalering mykje enklare for høgtrafikkmiljø.

Redmine før tilpasning

Merk: Redmine native docker kan finnes på https://hub.docker.com/_/redmine. Her kan du også finne gode instruksjoner om hvordan du fyller en ekstern database og monterer eksterne mapper (for å kunne installere plugins).

Hvis du er som meg og foretrekker å se koden direkte for å bygge et tilpasset Redmine Docker-bilde, kan du gå til github.com/lcofre/redmine og sjekke Dockerfile.

Redmine Docker-bildet er et godt utgangspunkt, selv om du sannsynligvis vil tilpasse det med plugins og temaer du liker. I denne veiledningen vil vi bygge et Docker-bilde basert på det offisielle, legge til noen temaer og plugins, og laste det opp til docker-registret.

Av enkelhets skyld vil vi ikke bruke en ekstern database, men en intern database i Redmine-containeren selv. For et produksjonsmiljø anbefales det imidlertid å sette opp en dedikert lagringscontainer.


Plugins og temaer

Vi har valgt noen plugins og temaer for å illustrere forskjellige måter å legge dem til Redmine på:

  • Skjul sidepanelet, en plugin som gir mer skjermplass, spesielt når du skriver saker
  • Lim inn fra utklippstavlen, for å legge ved skjermbilder ved å lime inn fra utklippstavlen i stedet for å velge en fil
  • A1 og Gitmike, to temaer for å endre utseendet på brukergrensesnittet

Vi ekskluderer plugins som krever en databaseoppdatering, da du trenger en eksisterende database. Vennligst kommenter nedenfor hvis du trenger å installere en plugin som krever oppdateringer, da vi har gode ideer til deg.


Skriver Dockerfile

En Dockerfile er en oppskrift på hvordan du bygger et Docker-bilde. Det første vi vil lære her er at vi må basere bildet vårt på et annet bilde, så vi vil bruke det offisielle for Redmine

FRA Redmine

Denne første linjen i Dockerfile vil basere bildet vårt på den nyeste og beste versjonen, 4.1.0 på skrivetidspunktet. Siden dette vil hente hvilken som helst versjon som er nyeste, kan du foretrekke å bruke en spesifikk versjon for å unngå uventede nye versjoner som kan ødelegge byggingen av dette bildet

FRA Redmine:4.1.0


Å bruke Git for å få komponentene

I de fleste tilfeller har temaer og utvidelser git-repositorier der vi kan laste ned den nyeste koden. Dette gjelder for følgende tre komponenter.

Den grunnleggende Redmine-bildet kommer uten git, men vi kan legge det til bildet på denne måten

RUN apt install -y git

Dette vil bli utført når bildet bygges og vil tillate deg å bruke git i de følgende instruksjonene.

Gitmike-temaet: de anbefaler å klone repoet deres direkte

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

Linjen vil lagre det klonede prosjektet i riktig mappe public/themes

Skjul sidepanelet: Samme prosedyre kan brukes på utvidelser. Denne krever ingenting annet enn å plassere den klonede mappen i utvidelsesmappen

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

Clipboard Image paste: Dette virker også som den typiske prosedyren, klon repoet og du er klar til å gå

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

Men hvis du leser litt mer vil du se at "det anbefales å installere RMagick-gem, ellers vil vedlagte bilder ikke vises i eksporterte PDF-filer". Så hvordan gjør vi dette? Det burde være like enkelt som

RUN gem install rmagick

men du vet sannsynligvis at gem må bygges før det kan installeres, så du må installere noen pakker før du installerer gem. Linjen du virkelig trenger er

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

       && gem install rmagick

Alt i en kommando, delt i to linjer for lesbarhet.

Den opprinnelige forfatteren av denne utvidelsen gir ikke en versjon for Redmine 4, men en søk etter utvidelsesnavnet på GitHub førte meg til et prosjekt som gjør det: RubyClickAP/clipboard_image_paste.


Legge til en utvidelse eller et tema fra en nedlastet kilde

A1-temaet er et godt eksempel for å illustrere tilfellene der du har kilden, men ikke en URL å laste ned under byggeprosessen. Ett alternativ i slike tilfeller er å gi kilden til byggeprosessen. På den måten blir innholdet lagt til bildet uten å laste det ned

COPY a1 public/themes/a1

Dette krever at a1-mappen er på samme sted som Dockerfilen.

Nå er du klar til å bygge bildet ditt, så åpne en terminal der Dockerfilen din er og kjør

docker build -t my-redmine .

Når det er bygget, kan du kjøre bildet med

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

Gå videre og åpne http://localhost:3000 for å se ditt tilpassede Redmine!

Redmine etter tilpasning


Noen tips for å legge til flere utvidelser

For å prøve ut nye utvidelser er det alltid bedre å bruke en ny Redmine-container. Det er slik jeg oppdaget at rmagick krever at noen pakker blir installert. Først kjør en kastbar instans av Redmine med

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

og deretter gå inn i instansen med

docker exec -it test-redmine bash

Der kan du installere OS-pakker, gems eller kjøre migreringer. Bare husk trinnene slik at du kan legge dem til Dockerfilen din!


Last opp ditt egendefinerte bilde til Docker Hub

Bildet du nettopp bygget er kun tilgjengelig i ditt lokale miljø. Hva om du ønsker å gjøre det tilgjengelig for andre, la oss si for alle? Selvfølgelig kan du laste opp Dockerfilen og relaterte filer til et git-repo, og de interesserte kan bygge bildet selv. Men Docker lar deg også laste opp det bygde bildet til deres register. For dette, opprett en konto på hub.docker.com og opprett også et repository for bildet ditt. Deretter logger du inn i terminalen slik

docker login

Merk bildet ditt slik at det kan lastes opp til ditt repo

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

og push det slik

docker push lcofre/redmine:latest

Docker-bildet i Docker-registeret

Nå kan hvem som helst prøve ut bildet ditt ved å gjøre

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

Det er det! Slik går du fra en standard Redmine-installasjon til en tilpasset versjon som er tilgjengelig i Docker-registeret. Vennligst del dine kommentarer eller spørsmål nedenfor.


Redusere størrelsen på Docker-bildet

Du vil oppdage at Dockerfilen i repoet har slått sammen mange linjer til én. Dette er en anbefaling fra Docker for å lage mindre bilder. Du kan finne den anbefalingen og andre på https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

En annen anbefaling for å redusere den endelige størrelsen på bildet er å bruke alpine-versjonen av Redmine

FRA Redmine:alpine

Alpine er en annen Linux-distribusjon. I stedet for å bruke apt for å installere pakker, må du bruke apk.

Et siste tips: pakkene vi installerte med apt i Dockerfilen er ikke lenger nødvendige etter at bildet er bygget. Du kan følge beste praksis ved å bruke flertrinnsbygg: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#use-multi-stage-builds

Praksisen med å holde et lite Docker-bilde er spesielt nyttig når antallet instanser skal skaleres opp, men det reduserer også angrepsflaten på bildet ditt.

Den ultimate Redmine-oppgraderingen? Enkel.

Få alle kraftige verktøy for perfekt prosjektplanlegging, -styring og -kontroll i én programvare.

Oppdag Easy Redmine

Prøv Easy Redmine i en 30-dagers gratis prøveperiode

Full funksjonalitet, SSL-beskyttet, daglige sikkerhetskopier, i din geografiske plassering