# A minimal GitBucket.
#
# Volumes:
# /gitbucket_data - GitBucket persistent data. Precreate to prevent Docker creating with root privs.
# /opt/gitbucket - location of gitbucket.war (parent directory). Plugins should reside in a 'plugins' directory inside this directory.
#
# Build with:
# > docker build .
#
# Run with:
# > docker run --detach --publish 8080:8080 --volume data_location:/gitbucket_data --volume war_location:/opt/gitbucket --env GITBUCKET_PREFIX=/prefix
#
# Configuration changes can be made via environment variables, so override by supplying --env parameters (or an env file).
# start with the Alpine Adoptium base
FROM eclipse-temurin:17-jdk-alpine as jre-build
# Java module dependencies found by unzipping WAR and running:
# jdeps --class-path 'WEB-INF/classes,WEB-INF/lib/*,.' -recursive -summary .
# jdeps currently requires objc from binutils
RUN apk add --no-cache binutils
# generate a minimal JRE that includes only the necessary modules
RUN $JAVA_HOME/bin/jlink \
--add-modules java.base,java.desktop,java.instrument,java.logging,java.management,java.naming,java.security.jgss,java.sql,java.xml \
--strip-debug \
--no-man-pages \
--no-header-files \
--compress=2 \
--output /jre
FROM alpine:3.15
### COPY GENERATED JRE ###
ENV JAVA_HOME=/opt/java/openjdk
ENV PATH "${JAVA_HOME}/bin:${PATH}"
COPY --from=jre-build /jre $JAVA_HOME
### INSTALL DEPENDENCIES ###
# font support needed for generating avatar icons, curl needed for healthcheck, graphviz needed by plantuml plugin
RUN apk add --no-cache graphviz fontconfig ttf-opensans curl
RUN \
addgroup gitbucket && \
adduser --disabled-password -G gitbucket gitbucket && \
mkdir /home/gitbucket/tmp
USER gitbucket
# These are variables that GitBucket looks for. Override when starting container (--env on Docker) if needed.
# See: https://github.com/gitbucket/gitbucket/wiki/Basic-configurations
ENV \
GITBUCKET_HOME="/gitbucket/gitbucket_data" \
GITBUCKET_PORT=8080 \
GITBUCKET_PREFIX="" \
GITBUCKET_PLUGINDIR="/opt/gitbucket/plugins" \
GITBUCKET_TEMPDIR="/home/gitbucket/tmp"
EXPOSE 8080/tcp
HEALTHCHECK --interval=5m --timeout=5s CMD curl --fail http://localhost:8080/ || exit 1
CMD ["/opt/java/openjdk/bin/java", "-Xms128m", "-Xms512m", "-jar", "/opt/gitbucket/gitbucket.war"]