-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathDockerfile
More file actions
executable file
·350 lines (294 loc) · 13.9 KB
/
Copy pathDockerfile
File metadata and controls
executable file
·350 lines (294 loc) · 13.9 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
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
FROM ubuntu:20.04
#
# Configure FLAT
#
ENV FLAT_NAME=flat
#ENV FLAT_HOST=192.168.99.100
ENV FLAT_HOST=localhost
ENV FLAT_ICON_DIR=/app/flat/data/icons
ENV FLAT_TIMEOUT=150
ENV CMD_EXTENSION=cmdi
ENV FLAT_NAMESPACE=lat
#docker: ENV FLAT_START="/bin/bash -l \$*"
#compose: ENV FLAT_START="tail -f /dev/null"
ENV FLAT_START_MODE=fg
#
# Setup workdir
#
RUN mkdir -p /app/flat/lib &&\
mkdir -p /app/flat/bin &&\
mkdir -p /app/flat/tmp
WORKDIR /app/flat
ENV HOME /root
ENV PATH="/app/flat/bin:${PATH}"
# expose ports
EXPOSE 80
EXPOSE 8080
EXPOSE 443
EXPOSE 8983
# set debconf to Noninteractive
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
# install apt-utils, software-properties-common
RUN apt-get update &&\
apt-get -y dist-upgrade &&\
apt-get -y install apt-utils software-properties-common &&\
apt-get update
# add ondrej PPA apt repos for Apache, PHP 7.2,
RUN add-apt-repository -y ppa:ondrej/php &&\
add-apt-repository -y ppa:ondrej/apache2 && \
apt-get update
#
# locale
#
ENV TZ 'Europe/Amsterdam'
RUN echo $TZ > /etc/timezone && \
apt-get -y install tzdata && \
rm /etc/localtime && \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
dpkg-reconfigure -f noninteractive tzdata
RUN apt-get -y install locales && \
sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
echo 'LANG="en_US.UTF-8"'>/etc/default/locale && \
dpkg-reconfigure --frontend=noninteractive locales && \
update-locale LANG=en_US.UTF-8
ENV LANG "en_US.UTF-8"
ENV LANGUAGE "en_US.UTF-8"
ENV LC_ALL "en_US.UTF-8"
#
# Update and install all system libraries
#
RUN apt-get -y install supervisor curl wget openssl apache2 postgresql unzip ssh rsync git
# PHP
RUN apt-get -y install php7.1 libapache2-mod-php7.1 php7.1-gd php7.1-pgsql php7.1-xsl php7.1-curl
# Java 8
RUN apt-get -y install openjdk-8-jdk maven
ENV JAVA_HOME "/usr/lib/jvm/java-8-openjdk-amd64"
RUN update-java-alternatives -s /usr/lib/jvm/java-1.8.0-openjdk-amd64
# dev
RUN apt-get -y install libxml2-utils vim
#
# Configure apache
# - set apache ulimit to 1024
ADD apache/envvars /etc/apache2/envvars
ADD apache/apache2.conf /etc/apache2/apache2.conf
RUN a2enmod ssl &&\
a2enmod rewrite &&\
a2enmod proxy &&\
a2enmod proxy_http &&\
a2enmod sed &&\
sed -i "s|FLAT_NAME|${FLAT_NAME}|g" /etc/apache2/apache2.conf
#
# enable HTTPS
#
RUN a2enmod ssl &&\
a2enmod headers &&\
a2ensite default-ssl
#
# Configure postgres
# - initialise databases for fedora and drupal
ADD postgresql/wait-postgres.sh /wait-postgres.sh
ADD postgresql/wait-sergtsop.sh /wait-sergtsop.sh
RUN chmod u+x /wait-postgres.sh &&\
chmod u+x /wait-sergtsop.sh &&\
/etc/init.d/postgresql start &&\
/wait-postgres.sh &&\
su -c "psql -c \"CREATE USER fedora WITH PASSWORD 'fedora'\"" postgres &&\
su -c "createdb -O fedora fedora" postgres &&\
su -c "createdb -O fedora proai" postgres &&\
su -c "createdb -O fedora --encoding=UNICODE -T template0 drupal" postgres &&\
/etc/init.d/postgresql stop &&\
/wait-sergtsop.sh
#
# Download packages for the islandora setup
# - fedora commons
# - proai
# - drupal
# - tuque
# - islandora
#
ENV FEDORA_HOME /var/www/fedora
ENV CATALINA_HOME /var/www/fedora/tomcat
RUN mkdir /tmp/fedora &&\
cd /tmp/fedora &&\
wget "https://github.com/fcrepo3/fcrepo/releases/download/v3.8.1/fcrepo-installer-3.8.1.jar"
ADD fedora/install.properties /tmp/fedora/install.properties
RUN /etc/init.d/postgresql start &&\
/wait-postgres.sh &&\
cd /tmp/fedora &&\
java -jar fcrepo-installer-3.8.1.jar install.properties &&\
/etc/init.d/postgresql stop &&\
/wait-sergtsop.sh
# tell fedora about CMDI
RUN sed -i 's|</mappings>|<mime-mapping><mime-type>application/x-cmdi+xml</mime-type><extension>cmdi</extension></mime-mapping></mappings>|g' /var/www/fedora/server/config/mime-to-extensions.xml
#
# All services are installed, add start script to automatically start required services
#
ADD flat.txt /flat.txt
ADD supervisor/start-*.sh /
RUN chmod u+x /start-*.sh
ADD supervisor/*.conf /etc/supervisor/conf.d/
ADD supervisor/start.sh /start.sh
RUN chmod u+x /start.sh
#RUN echo " " >> /start.sh && echo "${FLAT_START}" >> /start.sh
RUN echo ". /etc/environment" >> /etc/default/supervisor
ENTRYPOINT /start.sh
#
# starting fedora will initialize required directories
#
ADD fedora/wait-tomcat.sh /wait-tomcat.sh
RUN chmod u+x /wait-tomcat.sh &&\
service supervisor start &&\
/wait-postgres.sh &&\
supervisorctl start tomcat &&\
/wait-tomcat.sh &&\
supervisorctl stop all &&\
service supervisor stop &&\
/wait-sergtsop.sh
# policies
RUN rm -v /var/www/fedora/data/fedora-xacml-policies/repository-policies/default/deny-purge-*
RUN rm -v /var/www/fedora/data/fedora-xacml-policies/repository-policies/default/deny-policy-management-if-not-administrator.xml
RUN rm -v /var/www/fedora/data/fedora-xacml-policies/repository-policies/default/deny-inactive-or-deleted-objects-or-datastreams-if-not-administrator.xml
ADD fedora/deny-deleted-objects-or-datastreams-if-not-administrator.xml /var/www/fedora/data/fedora-xacml-policies/repository-policies/default/deny-deleted-objects-or-datastreams-if-not-administrator.xml
ADD fedora/permit-anything-to-localhost.xml /var/www/fedora/data/fedora-xacml-policies/repository-policies/default/permit-anything-to-localhost.xml
ADD fedora/deny-unallowed-file-resolution.xml /var/www/fedora/data/fedora-xacml-policies/repository-policies/default/deny-unallowed-file-resolution.xml
RUN cd /var/www/fedora/data/fedora-xacml-policies/repository-policies/ &&\
wget https://github.com/Islandora/islandora-xacml-policies/archive/master.zip &&\
unzip master.zip &&\
rm master.zip &&\
mv islandora-xacml-policies-master islandora
# authorisation filter (there is no specific 7.1.13 tagged release but there have been no changes since 7.1.9)
RUN cd /var/www/fedora/tomcat/webapps/fedora/WEB-INF/lib &&\
wget "https://github.com/Islandora/islandora_drupal_filter/releases/download/7.1.12/fcrepo-drupalauthfilter-3.8.1.jar"
ADD fedora/jaas.conf /var/www/fedora/server/config/jaas.conf
ADD fedora/filter-drupal.xml /var/www/fedora/server/config/filter-drupal.xml
##Download and configure drupal (via drush)
RUN mkdir -p /var/www/composer &&\
cd /var/www/composer &&\
curl -sS https://getcomposer.org/installer | php &&\
mv composer.phar composer
ENV COMPOSER_HOME=/var/www/composer
RUN $COMPOSER_HOME/composer global require drush/drush:8.*
RUN cd /var/www/html &&\
/var/www/composer/vendor/drush/drush/drush -v dl drupal-7 --drupal-project-rename=$FLAT_NAME
ENV PGPASSWORD=fedora
RUN service supervisor start &&\
/wait-postgres.sh &&\
supervisorctl start tomcat &&\
/wait-tomcat.sh &&\
cd /var/www/html/$FLAT_NAME &&\
export PHP_OPTIONS="-d sendmail_path=`which true`" &&\
/var/www/composer/vendor/drush/drush/drush site-install standard --site-name=FLAT --account-name=admin --account-pass=admin --db-su=fedora --db-su-pw=fedora --db-url=pgsql://fedora:fedora@localhost/drupal -y &&\
supervisorctl stop all &&\
service supervisor stop &&\
/wait-sergtsop.sh
RUN mkdir -p /var/www/html/$FLAT_NAME/sites/all/modules/custom &&\
chown www-data:www-data /var/www/html/$FLAT_NAME/sites/default/files &&\
chown www-data:www-data /var/www/html/$FLAT_NAME/sites/default/settings.php &&\
chown www-data:www-data /var/www/html/$FLAT_NAME/sites/all/modules/custom
ADD drupal/flat-logo.png /var/www/html/$FLAT_NAME/sites/default/files/flat-logo.png
ADD drupal/flat /var/www/html/$FLAT_NAME/sites/all/modules/custom/
ADD drupal/flat-logo.php /tmp/
# To check accessibility we use a HEAD request using the http(s)?://<user>:<pass>@<host>(:<port>)?/<path>... support of drupal_http_request
# however if the username or password does contain funny characters no escaping is supported
# this change allows to use rawurlencode, as drupal_http_request will now do a rawurldecode
RUN sed -i "s|base64_encode(\$uri\['user'\]|base64_encode(rawurldecode(\$uri['user'])|g" /var/www/html/$FLAT_NAME/includes/common.inc &&\
sed -i "s| \$uri\['pass'\] | rawurldecode(\$uri['pass']) |g" /var/www/html/$FLAT_NAME/includes/common.inc
RUN mkdir /tmp/tuque &&\
cd /tmp/tuque &&\
wget "https://github.com/Islandora/tuque/archive/refs/tags/1.13.zip" &&\
unzip 1.13.zip &&\
mv /tmp/tuque/tuque-1.13 /var/www/html/$FLAT_NAME/sites/all/libraries/tuque &&\
sed -i 's|public $verifyPeer = TRUE;|public $verifyPeer = FALSE;|g' /var/www/html/$FLAT_NAME/sites/all/libraries/tuque/HttpConnection.php
RUN mkdir -p /tmp/islandora &&\
mkdir -p /var/www/html/$FLAT_NAME/sites/all/modules/contrib &&\
mkdir -p /var/www/html/$FLAT_NAME/sites/all/themes &&\
cd /tmp/islandora &&\
wget "https://github.com/Islandora/islandora/archive/refs/tags/7.x-1.13.tar.gz" &&\
tar -xf 7.x-1.13.tar.gz -C /var/www/html/$FLAT_NAME/sites/all/modules/contrib/ &&\
cd /tmp/islandora &&\
wget -O islandora_solution_pack_collection-7.x-1.13.zip "https://github.com/islandora/islandora_solution_pack_collection/archive/refs/tags/7.x-1.13.zip" &&\
unzip islandora_solution_pack_collection-7.x-1.13.zip -d /var/www/html/$FLAT_NAME/sites/all/modules/contrib/ &&\
cd /tmp/islandora &&\
wget -O islandora_xacml_editor-7.x-1.13.zip "https://github.com/Islandora/islandora_xacml_editor/archive/refs/tags/7.x-1.13.zip" &&\
unzip islandora_xacml_editor-7.x-1.13.zip -d /var/www/html/$FLAT_NAME/sites/all/modules/contrib/ &&\
cd /tmp/islandora &&\
wget -O islandora_solution_pack_compound-7.x-1.13.zip "https://github.com/Islandora/islandora_solution_pack_compound/archive/refs/tags/7.x-1.13.zip" &&\
unzip islandora_solution_pack_compound-7.x-1.13.zip -d /var/www/html/$FLAT_NAME/sites/all/modules/contrib/ &&\
sed -i 's|function islandora_compound_object_islandora_compoundCModel_islandora_view_object|function islandora_compound_object_islandora_compoundCModel_islandora_view_object_DISABLED_BY_FLAT|g' /var/www/html/$FLAT_NAME/sites/all/modules/contrib/islandora_solution_pack_compound-7.x-1.13/islandora_compound_object.module
# add CMDI solution pack
RUN mkdir -p /var/www/html/$FLAT_NAME/sites/all/modules/contrib/islandora_solution_pack_cmdi
ADD flat/islandora_solution_pack_cmdi /var/www/html/$FLAT_NAME/sites/all/modules/contrib/islandora_solution_pack_cmdi
# tell islandora about CMDI
RUN sed -i "/\"json\"/a \"cmdi\" => \"application/x-cmdi+xml\"," /var/www/html/$FLAT_NAME/sites/all/modules/contrib/islandora-7.x-1.13/includes/mimetype.utils.inc &&\
sed -i "/header('Content-type: ' . \$datastream/a if (\$datastream->ID == 'CMD') {\nheader('Content-type: ' . 'application/xml');\n}" /var/www/html/$FLAT_NAME/sites/all/modules/contrib/islandora-7.x-1.13/includes/datastream.inc
RUN mkdir -p /tmp/bootstrap &&\
cd /tmp/bootstrap &&\
wget "https://ftp.drupal.org/files/projects/bootstrap-7.x-3.26.zip" &&\
unzip bootstrap-7.x-3.26.zip &&\
mv /tmp/bootstrap/bootstrap /var/www/html/$FLAT_NAME/sites/all/themes/bootstrap
RUN cp -r /var/www/html/$FLAT_NAME/sites/all/themes/bootstrap/starterkits/THEMENAME /var/www/html/$FLAT_NAME/sites/all/themes/flat_bootstrap_theme &&\
cd /var/www/html/$FLAT_NAME/sites/all/themes/flat_bootstrap_theme/ &&\
mv THEMENAME.starterkit flat_bootstrap_theme.info &&\
echo ";; FLAT settings" >> flat_bootstrap_theme.info &&\
echo "settings[bootstrap_cdn_jsdelivr_theme] = 'flatly'" >> flat_bootstrap_theme.info &&\
echo "settings[bootstrap_fluid_container] = 1" >> flat_bootstrap_theme.info &&\
mkdir -p /var/www/html/$FLAT_NAME/sites/all/themes/flat_bootstrap_theme/js
# determine our own object view
ADD islandora/islandora-default.tpl.php /var/www/html/$FLAT_NAME/sites/all/themes/flat_bootstrap_theme/templates/islandora-default.tpl.php
# overwrite the compound behavior, which does special things for the first member (as being the representative)
ADD islandora/template.php /var/www/html/$FLAT_NAME/sites/all/themes/flat_bootstrap_theme/template.php
ADD islandora/flat.js /var/www/html/$FLAT_NAME/sites/all/themes/flat_bootstrap_theme/js/flat.js
RUN service supervisor start &&\
/wait-postgres.sh &&\
supervisorctl start tomcat &&\
/wait-tomcat.sh &&\
cd /var/www/html/$FLAT_NAME/ &&\
/var/www/composer/vendor/drush/drush/drush vset islandora_base_url http://localhost:8080/fedora &&\
/var/www/composer/vendor/drush/drush/drush en islandora -y &&\
/var/www/composer/vendor/drush/drush/drush en islandora_xacml_editor -y &&\
/var/www/composer/vendor/drush/drush/drush en islandora_basic_collection -y &&\
/var/www/composer/vendor/drush/drush/drush en islandora_compound_object -y &&\
/var/www/composer/vendor/drush/drush/drush en islandora_cmdi -y &&\
/var/www/composer/vendor/drush/drush/drush vset islandora_metadata_display cmdi &&\
/var/www/composer/vendor/drush/drush/drush dl features_extra -y &&\
/var/www/composer/vendor/drush/drush/drush en flat -y &&\
/var/www/composer/vendor/drush/drush/drush php-script flat-logo --script-path=/tmp &&\
/var/www/composer/vendor/drush/drush/drush en jquery_update -y &&\
/var/www/composer/vendor/drush/drush/drush en bootstrap -y &&\
/var/www/composer/vendor/drush/drush/drush en flat_bootstrap_theme -y &&\
/var/www/composer/vendor/drush/drush/drush vset theme_default flat_bootstrap_theme &&\
supervisorctl stop all &&\
service supervisor stop &&\
/wait-sergtsop.sh
#
# Add LAT2FOX
#
ENV MAVEN_OPTS -Xss10M
RUN cd /tmp &&\
git clone -b develop https://github.com/TheLanguageArchive/SchemAnon.git SchemAnon &&\
cd /tmp/SchemAnon &&\
mvn clean install &&\
mv target/SchemAnon.jar /app/flat/lib/SchemAnon.jar
RUN mkdir -p /tmp/LAT2FOX
ADD flat/LAT2FOX /tmp/LAT2FOX
RUN cd /tmp/LAT2FOX &&\
mvn clean package &&\
mv target/lat2fox.jar /app/flat/lib/lat2fox.jar
#
# Add FLAT's own scripts, tools and icons
#
ADD flat/scripts/* /app/flat/bin/
RUN chmod +x /app/flat/bin/*.sh &&\
mv /app/flat/bin/do-*.sh /app/flat/
RUN mkdir -p /app/flat/deposit
ADD flat/policies /app/flat/deposit/policies
ADD flat/policies-private-resources /app/flat/deposit/policies-private-resources
ADD flat/policies /app/flat/deposit/policies
RUN mkdir -p $FLAT_ICON_DIR
ADD flat/icons $FLAT_ICON_DIR
#
# Cleanup
#
# clean up APT and /tmp when done.
RUN apt-get clean &&\
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*