Repository navigation
Expand file tree
/
Copy pathDockerfile
More file actions
172 lines (164 loc) · 8.52 KB
/
Copy pathDockerfile
File metadata and controls
172 lines (164 loc) · 8.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
FROM registry.cloudogu.com/official/base:3.24.1-3
LABEL NAME="official/redmine" \
VERSION="7.0.0-5" \
maintainer="hello@cloudogu.com"
ENV USER=redmine \
BASEDIR=/usr/share/webapps \
WORKDIR=/usr/share/webapps/redmine \
SERVICE_TAGS=webapp \
RAILS_ENV=production \
RAILS_RELATIVE_URL_ROOT=/redmine \
STARTUP_DIR=/ \
# Rubycas-client version
RUBYCASVERSION=2.4.0 \
RUBYCAS_TARGZ_SHA256=1fb29cf6a2331dc91b7cdca3d9b231866a4cfc36c4c5f03cedd89c74cc5aae05 \
# Redmine version
REDMINE_VERSION=7.0.0 \
REDMINE_TARGZ_SHA256=857e9f8860c31e4c531389e5d93eea26488dba69830484a3b0aa904be615e90a \
REDMINE_PATH="/usr/share/webapps/redmine" \
# Rest-API-Plugin version
EXTENDED_REST_API_PLUGIN_VERSION=1.2.0 \
EXTENDED_REST_API_TARGZ_SHA256=9af32d40e990cf7c3cf83295e664e160c9edb58de49fb254bf2533b57d438127 \
EXTENDED_REST_API_PLUGIN_PATH="/usr/share/webapps/redmine/defaultPlugins/redmine_extended_rest_api" \
# Activerecord session plugin version
ACTIVERECORD_SESSION_STORE_PLUGIN_VERSION=0.3.0 \
ACTIVERECORD_TARGZ_SHA256=c3b6c4aeed4cc52221f9422d77add2857a70a9081a35c7c9232eeacdef9cdfc3 \
ACTIVERECORD_SESSION_STORE_PLUGIN_PATH="/usr/share/webapps/redmine/defaultPlugins/redmine_activerecord_session_store" \
# CAS-Plugin version
CAS_PLUGIN_VERSION=2.2.0 \
CAS_PLUGIN_TARGZ_SHA256=06d815702ddf13f9121e78e64f2e201d0b2a955244b40b00af9f2dd9041ed02c \
CAS_PLUGIN_PATH="/usr/share/webapps/redmine/defaultPlugins/redmine_cas" \
# Cloudogu theme version
CLOUDOGU_THEME_VERSION=1.7.1-1 \
THEME_TARGZ_SHA256=671f1fe13a2164c92f289343cf2b1a2143abf5047c1289ea9745c48b0474798a \
CLOUDOGU_THEME_PATH="/usr/share/webapps/redmine/public/themes/Cloudogu" \
# Cloudogu patches plugin
CLOUDOGU_PATCHES_PLUGIN_VERSION=0.0.12 \
CLOUDOGU_PATCHES_PLUGIN_SHA256=818f79ba9bb8fdc9b22f0bf8102fb3ed8bb788a103fb25ef59eac435bc6f7979 \
CLOUDOGU_PATCHES_PLUGIN_PATH="/usr/share/webapps/redmine/defaultPlugins/zzz_cloudogu_redmine_patches" \
# MCP Plugin
MCP_PLUGIN_VERSION=0.2.0 \
MCP_PLUGIN_TARGZ_SHA256=044a5e2957ad730cc6c319019da2cb6fb23968d6601bbef8acd311f88287b1f3 \
MCP_PLUGIN_PATH="/usr/share/webapps/redmine/optionalPlugins/redmine_mcp"
COPY resources/ /
RUN set -eux -o pipefail \
## Install Redmine \
&& mkdir -p ${REDMINE_PATH} \
&& mkdir -p /redmine_source \
&& wget "https://www.redmine.org/releases/redmine-${REDMINE_VERSION}.tar.gz" \
&& echo "${REDMINE_TARGZ_SHA256} *redmine-${REDMINE_VERSION}.tar.gz" | sha256sum -c - \
&& tar -xf redmine-${REDMINE_VERSION}.tar.gz --strip-components=1 -C ${REDMINE_PATH} \
&& mv redmine-${REDMINE_VERSION}.tar.gz /redmine_source/redmine-${REDMINE_VERSION}.tar.gz \
&& mkdir -p ${REDMINE_PATH}/app/assets/config && touch ${REDMINE_PATH}/app/assets/config/manifest.js \
## Install redmine_cas Plugin \
&& mkdir -p "${CAS_PLUGIN_PATH}" \
&& wget -O v${CAS_PLUGIN_VERSION}.tar.gz "https://github.com/cloudogu/redmine_cas/archive/v${CAS_PLUGIN_VERSION}.tar.gz" \
&& echo "${CAS_PLUGIN_TARGZ_SHA256} *v${CAS_PLUGIN_VERSION}.tar.gz" | sha256sum -c - \
&& tar -C "${CAS_PLUGIN_PATH}" --strip-components=2 -zxf "v${CAS_PLUGIN_VERSION}.tar.gz" "redmine_cas-${CAS_PLUGIN_VERSION}/src" \
&& rm v${CAS_PLUGIN_VERSION}.tar.gz \
## Install Cloudogu Theme \
&& mkdir -p "${CLOUDOGU_THEME_PATH}" \
&& wget -O ${CLOUDOGU_THEME_VERSION}.tar.gz "https://github.com/cloudogu/opale/archive/refs/tags/${CLOUDOGU_THEME_VERSION}.tar.gz" \
&& echo "${THEME_TARGZ_SHA256} *${CLOUDOGU_THEME_VERSION}.tar.gz" | sha256sum -c - \
&& tar xfz ${CLOUDOGU_THEME_VERSION}.tar.gz --strip-components=1 -C "${CLOUDOGU_THEME_PATH}" \
&& rm ${CLOUDOGU_THEME_VERSION}.tar.gz \
## Install Session-Store-Plugin \
&& mkdir -p "${ACTIVERECORD_SESSION_STORE_PLUGIN_PATH}" \
&& wget -O v${ACTIVERECORD_SESSION_STORE_PLUGIN_VERSION}.tar.gz "https://github.com/cloudogu/redmine_activerecord_session_store/archive/v${ACTIVERECORD_SESSION_STORE_PLUGIN_VERSION}.tar.gz" \
&& echo "${ACTIVERECORD_TARGZ_SHA256} *v${ACTIVERECORD_SESSION_STORE_PLUGIN_VERSION}.tar.gz" | sha256sum -c - \
&& tar xfz v${ACTIVERECORD_SESSION_STORE_PLUGIN_VERSION}.tar.gz --strip-components=1 -C "${ACTIVERECORD_SESSION_STORE_PLUGIN_PATH}" \
&& rm v${ACTIVERECORD_SESSION_STORE_PLUGIN_VERSION}.tar.gz \
## Install Cloudogu-Patches-Plugin \
&& mkdir -p "${CLOUDOGU_PATCHES_PLUGIN_PATH}" \
&& wget -O v${CLOUDOGU_PATCHES_PLUGIN_VERSION}.tar.gz "https://github.com/cloudogu/cloudogu_redmine_patches/archive/v${CLOUDOGU_PATCHES_PLUGIN_VERSION}.tar.gz" \
&& echo "${CLOUDOGU_PATCHES_PLUGIN_SHA256} *v${CLOUDOGU_PATCHES_PLUGIN_VERSION}.tar.gz" | sha256sum -c - \
&& tar xfz v${CLOUDOGU_PATCHES_PLUGIN_VERSION}.tar.gz --strip-components=1 -C "${CLOUDOGU_PATCHES_PLUGIN_PATH}" \
&& rm v${CLOUDOGU_PATCHES_PLUGIN_VERSION}.tar.gz \
## Install extended_rest_api Plugin \
&& mkdir -p "${EXTENDED_REST_API_PLUGIN_PATH}" \
&& wget -O v${EXTENDED_REST_API_PLUGIN_VERSION}.tar.gz \
"https://github.com/cloudogu/redmine_extended_rest_api/archive/v${EXTENDED_REST_API_PLUGIN_VERSION}.tar.gz" \
&& echo "${EXTENDED_REST_API_TARGZ_SHA256} *v${EXTENDED_REST_API_PLUGIN_VERSION}.tar.gz" | sha256sum -c - \
&& SUB_DIR="redmine_extended_rest_api-${EXTENDED_REST_API_PLUGIN_VERSION}/src/" \
&& tar -C "${EXTENDED_REST_API_PLUGIN_PATH}" --strip-components=2 -xvf v${EXTENDED_REST_API_PLUGIN_VERSION}.tar.gz "${SUB_DIR}" \
&& rm v${EXTENDED_REST_API_PLUGIN_VERSION}.tar.gz \
&& find "${EXTENDED_REST_API_PLUGIN_PATH}" -name 'Gemfile*' -type f -delete \
## Install MCP Plugin \
&& mkdir -p "${MCP_PLUGIN_PATH}" \
&& wget -O v${MCP_PLUGIN_VERSION}.tar.gz "https://github.com/cloudogu/redmine-mcp-plugin/archive/v${MCP_PLUGIN_VERSION}.tar.gz" \
&& echo "${MCP_PLUGIN_TARGZ_SHA256} *v${MCP_PLUGIN_VERSION}.tar.gz" | sha256sum -c - \
&& tar xfz v${MCP_PLUGIN_VERSION}.tar.gz --strip-components=1 -C "${MCP_PLUGIN_PATH}" \
&& rm v${MCP_PLUGIN_VERSION}.tar.gz \
&& apk update \
# add user and group \
&& addgroup -S "${USER}" -g 1000 \
&& adduser -S -h "${WORKDIR}" -G "${USER}" -u 1000 -s /bin/bash "${USER}" \
# install runtime packages \
&& apk --no-cache add --virtual /.run-deps \
postgresql16-client \
imagemagick \
tzdata \
ruby \
ruby-bundler \
ruby-rdoc \
tini \
libffi \
su-exec \
git \
curl \
# install build dependencies \
&& apk --no-cache add --virtual /.build-deps \
build-base \
ruby-dev \
yaml-dev \
pkgconf \
libxslt-dev \
postgresql-dev \
sqlite-dev \
linux-headers \
patch \
coreutils \
libffi-dev \
&& echo 'gem "rexml", "~> 3.2"' >> ${WORKDIR}/Gemfile \
# Install rubycas-client \
&& wget -O v${RUBYCASVERSION}.tar.gz "https://github.com/cloudogu/rubycas-client/archive/v${RUBYCASVERSION}.tar.gz" \
&& echo "${RUBYCAS_TARGZ_SHA256} *v${RUBYCASVERSION}.tar.gz" | sha256sum -c - \
&& mkdir rubycas-client \
&& tar xfz v${RUBYCASVERSION}.tar.gz --strip-components=1 -C rubycas-client \
&& rm v${RUBYCASVERSION}.tar.gz \
&& cd rubycas-client \
&& gem build rubycas-client.gemspec \
&& gem install rubycas-client-${RUBYCASVERSION}.gem \
&& cd .. \
&& rm -rf rubycas-client \
# override environment to run redmine with a context path "/redmine" \
&& mv ${WORKDIR}/config/environment.ces.rb ${WORKDIR}/config/environment.rb \
# install core plugins \
&& mkdir -p "${WORKDIR}/plugins" \
# install required and plugin gems \
# copy the plugins to the plugin directory in order to gain all gems and gem checksums for machines without internet access \
&& cp -r "${WORKDIR}"/defaultPlugins/* "${WORKDIR}/plugins/" \
&& cd ${WORKDIR} \
&& cp -r /usr/share/webapps/redmine/public/themes/Cloudogu \
/usr/share/webapps/redmine/themes/ \
# Gemfile only declares pg once config/database.yml exists (rendered at container startup, not build time), \
# stub it so bundle install locks pg into Gemfile.lock now, keeping upgrades air-gapped. \
# Do not remove the dependency on pg without testing if an upgrade would work in an air-gapped environment \
# See docs/development/test_air-gapped_en.md for more information. \
&& printf 'production:\n adapter: postgresql\n' > ${WORKDIR}/config/database.yml \
&& bundle config set --local without 'development test' \
&& bundle install \
&& rm -f ${WORKDIR}/config/database.yml \
&& chown -R redmine:redmine ${WORKDIR} \
&& gem install puma \
&& gem install pg -v "~> 1.6.2" --no-document \
# cleanup \
&& gem cleanup all \
&& rm -rf /root/* /tmp/* $(gem env gemdir)/cache \
&& apk --purge del /.build-deps \
&& rm -rf /var/cache/apk/*
WORKDIR ${WORKDIR}
EXPOSE 3000
HEALTHCHECK --interval=5s CMD doguctl healthy redmine || exit 1
# start
CMD ["/startup.sh"]