-
-
Notifications
You must be signed in to change notification settings - Fork 93
/
Dockerfile
353 lines (300 loc) · 14.9 KB
/
Dockerfile
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
351
352
353
FROM php:8.1.9-apache
#====================================================================#
# SET VERSION LABEL #
#====================================================================#
ARG BUILD_DATE="June 17 2022"
ARG PHP_VERSION="8.1"
ENV BUILD_DATE="${BUILD_DATE}"
ENV PHP_VERSION="${PHP_VERSION}"
#====================================================================#
# SET LABELS #
#====================================================================#
LABEL build_version="PHP: ${PHP_VERSION}"
LABEL build_date="${BUILD_DATE}"
LABEL maintainer="Antonio Sanna <[email protected]>"
#====================================================================#
# SET SERVER NAME #
#====================================================================#
ARG SERVERNAME="localhost"
ARG DOMAIN="example.com"
ARG WWWDOMAIN="www.example.com"
ARG TZ="Europe/Rome"
ENV SERVERNAME="${SERVERNAME}"
ENV DOMAIN="${DOMAIN}"
ENV WWWDOMAIN="${WWWDOMAIN}"
#====================================================================#
# SET USER NAME #
#====================================================================#
ARG USER="gisadmin"
#====================================================================#
# UPGRADE SYSTEM #
#====================================================================#
RUN \
DEBIAN_FRONTEND=noninteractive \
apt-get update && \
apt-get -y upgrade
#====================================================================#
# INSTALL UTILITY #
#====================================================================#
RUN apt-get -y install --fix-missing sudo \
gpg \
vim \
wget \
git \
software-properties-common
#====================================================================#
# ADD REPOSITORY #
#====================================================================#
RUN sed -i -e "s|# export LS_OPTIONS=|export LS_OPTIONS=|g" -e "s|# alias ls=|alias ls=|g" -e "s|# alias ll=|alias ll=|g" -e "s|# alias rm=|alias rm=|g" ~/.bashrc \
&& ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone \
&& echo "deb http://deb.debian.org/debian buster-backports main contrib non-free" > /etc/apt/sources.list.d/backports.list
#====================================================================#
# UPGRADE SYSTEM #
#====================================================================#
RUN apt-get update && \
apt-get -y upgrade
#====================================================================#
# INSTALL CURL #
#====================================================================#
RUN apt-get -y install --fix-missing curl
#====================================================================#
# INSTALL GIT #
#====================================================================#
RUN apt-get -y install --fix-missing git
#====================================================================#
# INSTALL ZIP - UNZIP #
#====================================================================#
RUN apt-get -y install --fix-missing zip unzip
#====================================================================#
# INSTALL DB CLIENT #
#====================================================================#
RUN apt-get -y install --fix-missing --no-install-recommends \
mariadb-client \
postgresql-client
#====================================================================#
# INSTALL SENDMAIL #
#====================================================================#
RUN apt-get install -q -y ssmtp mailutils
RUN line=$(head -n 1 /etc/hosts) \
&& line2=$(echo $line | awk '{print $2}') \
&& echo "$line $line2.localdomain" >> /etc/hosts \
&& apt install --fix-missing -y sendmail sendmail-cf m4 \
&& hostname >> /etc/mail/relay-domains \
&& m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf \
&& sed -i -e "s/Port=smtp,Addr=127.0.0.1, Name=MTA/Port=smtp, Name=MTA/g" \
/etc/mail/sendmail.mc \
&& sendmail -bd
#====================================================================#
# INSTALL PHP-IMAGIK #
#====================================================================#
RUN apt-get update && apt-get install --fix-missing -y \
libmagickwand-dev --no-install-recommends \
&& pecl install imagick \
&& docker-php-ext-enable imagick
#====================================================================#
# INSTALL GIS LIBRARIES #
#====================================================================#
#gdal with ecw and libkml support
## First remove gdal if it's already installed
RUN apt remove -y gdal-bin gdal-data libgdal20 && \
apt -y autoremove && \
apt update && apt -y upgrade && \
apt install -y libpng-dev libgdal-dev
## Unzip ECW libraries "Desktop Read-Only Redistributable"
COPY asset/ecw/hexagon.zip /root
RUN cd /root && \
unzip hexagon.zip
## Copy new libraries to system folder
## Rename the newabi library as x64 and move necessary libraries to /usr/local/lib
RUN cp -r /root/hexagon/ERDAS-ECW_JPEG_2000_SDK-5.5.0/Desktop_Read-Only /usr/local/hexagon && \
rm -r /usr/local/hexagon/lib/x64 && \
mv /usr/local/hexagon/lib/cpp11abi/x64 /usr/local/hexagon/lib/x64 && \
cp /usr/local/hexagon/lib/x64/release/libNCSEcw* /usr/local/lib && \
ldconfig /usr/local/hexagon
## Install libspatialite
RUN apt-get update -y && \
apt-get install --fix-missing -y \
libspatialite-dev \
sqlite3
## Install PROJ 8
COPY asset/ecw/proj-8.2.0.tar.gz /root
RUN cd /root && \
tar xfvz proj-8.2.0.tar.gz && \
cd proj-8.2.0 && \
./configure --prefix /usr/local && \
make -j2 && \
make install
## Install libkml
COPY asset/ecw/install-libkml-r864-64bit.tar.gz /root
RUN cd /root && \
tar xzf install-libkml-r864-64bit.tar.gz && \
cp -r install-libkml/include/* /usr/local/include && \
cp -r install-libkml/lib/* /usr/local/lib
## Install libavif
RUN apt install --fix-missing -y libavif-dev
## Build GDAL with ECW and libkml support
COPY asset/ecw/gdal340.zip /root
RUN cd /root && \
unzip gdal340.zip && \
cd gdal-3.4.0 && \
./configure \
--with-avif \
--with-ecw=/usr/local/hexagon \
# --with-libkml=/usr/local/lib \
--with-proj=/usr/local \
--with-libtiff \
--with-libz=internal \
--with-png=internal \
--with-geotiff=internal \
--with-threads \
--without-libkml \
&& \
make clean && \
make && \
make install
## Check if it works
RUN export PATH=/usr/local/bin:$PATH && \
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH && \
gdalinfo --version && \
gdalinfo --formats | grep ECW
## Remove installation files
RUN rm -rf /root/hexagon/ && \
rm -rf /root/hexagon.zip && \
rm -rf /root/proj-8.2.0/ && \
rm -rf /root/proj-8.2.0.tar.gz && \
rm -rf /root/install-libkml/ && \
rm -rf /root/install-libkml-r864-64bit.tar.gz && \
rm -rf /root/gdal-3.4.0/ && \
rm -rf /root/gdal340.zip
#====================================================================#
# INSTALL MAPSERVER #
#====================================================================#
RUN apt-get -y install --fix-missing --no-install-recommends \
libmapserver2 \
fontconfig \
cgi-mapserver \
mapserver-bin \
libopenjp2-7-dev \
xl2tpd \
strongswan \
libapache2-mod-fcgid \
libfreetype6
## Check if it works
RUN mapserv -v
RUN apt-get install --fix-missing -y libpq-dev
RUN apt-get install --no-install-recommends -y libpq-dev
RUN apt-get install -y libxml2-dev libbz2-dev zlib1g-dev
RUN apt-get install --fix-missing -y libsqlite3-dev \
libsqlite3-0 \
exif \
ftp \
ntp \
gdal-bin
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
RUN chmod +x /usr/local/bin/install-php-extensions && \
install-php-extensions amqp ast bcmath bz2 calendar csv dba decimal ds enchant ev event excimer exif ffi \
geospatial gettext gd gmp gnupg grpc http igbinary imap intl inotify \
json_post ldap lzf mailparse maxminddb mcrypt memcache memcached mongodb msgpack mysqli oauth oci8 odbc opcache opencensus \
openswoole pcov pdo_dblib pdo_firebird pdo_oci pdo_odbc pdo_mysql pdo_pgsql pdo_sqlsrv pcntl pgsql \
pspell raphf redis seaslog shmop smbclient snmp \
soap sockets ssh2 sqlsrv uuid xmldiff xmlrpc xsl \
yac yaml yar zephir_parser zip zend_test zstd
#====================================================================#
# APACHE CONF #
#====================================================================#
COPY asset/ssl.conf /etc/apache2/mods-available/ssl.conf
COPY asset/security.conf /etc/apache2/conf-available/security.conf
COPY asset/000-default.conf /etc/apache2/sites-enabled/000-default.conf
#====================================================================#
# INSTALL COMPOSER 2.0 #
#====================================================================#
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
RUN composer self-update --2
#ENV APACHE_DOCUMENT_ROOT /var/www/html/codeigniter4/public
RUN apt-get update && apt-get install -y ca-certificates gnupg
RUN curl -fsSL https://deb.nodesource.com/setup_16.x | bash -
#RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
#RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
RUN /usr/sbin/a2enmod rewrite && /usr/sbin/a2enmod headers && /usr/sbin/a2enmod expires
RUN apt-get update && apt-get install -y libzip-dev zip && docker-php-ext-install zip
RUN docker-php-ext-install pdo pdo_mysql mysqli
RUN apt-get install -y libtidy-dev \
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN pecl install xdebug
RUN echo 'zend_extension=xdebug' >> /usr/local/etc/php/php.ini
RUN echo 'xdebug.mode=develop,debug' >> /usr/local/etc/php/php.ini
RUN echo 'xdebug.client_host=host.docker.internal' >> /usr/local/etc/php/php.ini
RUN echo 'xdebug.start_with_request=trigger' >> /usr/local/etc/php/php.ini
RUN echo 'xdebug.client_port=9003' >> /usr/local/etc/php/php.ini
RUN echo 'session.save_path = "/tmp"' >> /usr/local/etc/php/php.ini
#====================================================================#
# ENABLE SSL #
#====================================================================#
RUN a2enmod ssl
#====================================================================#
# ENABLE MAPSERVER #
#====================================================================#
RUN a2enmod cgi
#====================================================================#
# ENABLE MODULE HEADERS #
#====================================================================#
RUN a2enmod headers proxy_http
#====================================================================#
# INSTALL FOR #
#====================================================================#
RUN apt install -y nano udev dmidecode \
&& echo "www-data ALL=(ALL) NOPASSWD: /usr/sbin/dmidecode" | sudo tee /etc/sudoers.d/dont-prompt-www-data-for-sudo-password \
&& echo "www-data ALL=(ALL) NOPASSWD: /etc/init.d/sendmail" | sudo tee -a /etc/sudoers.d/dont-prompt-www-data-for-sudo-password
#====================================================================#
# START SCRIPT #
#====================================================================#
COPY startScript.sh /startScript.sh
#====================================================================#
# CREATE GROUP AND USER #
#====================================================================#
RUN groupadd -r ${USER} && useradd -g ${USER} ${USER}
#====================================================================#
# SET OWNERCHIP AND PERMISSION #
#====================================================================#
RUN chown -R www-data:www-data /var/www/html
#====================================================================#
# CLEAN SYSTEM #
#====================================================================#
RUN apt-get clean && rm -r /var/lib/apt/lists/* \
&& rm -rf \
/tmp/* \
/root/.cache
#====================================================================#
# LOGS #
#====================================================================#
RUN ln -sf /proc/self/fd/1 "/var/log/apache2/access.log" \
&& ln -sf /proc/self/fd/2 "/var/log/apache2/error.log" \
&& ln -sfT /dev/stdout "/var/log/apache2/access.log" \
&& ln -sfT /dev/stderr "/var/log/apache2/error.log" \
&& chown -R --no-dereference "www-data:www-data" "/var/log/apache2"
#====================================================================#
# SWITH TO USER #
#====================================================================#
#USER ${USER}
USER root
#====================================================================#
# SET WORKDIR #
#====================================================================#
WORKDIR /var/www/html/codeigniter4
#====================================================================#
# EXPOSE PORTS #
#====================================================================#
EXPOSE 80
EXPOSE 443
#====================================================================#
# VOLUMES #
#====================================================================#
#VOLUME ["/var/www/html", "/usr/lib/php/20190902", "/etc/apache2", "/etc/php"]
#====================================================================#
# HEALTHCHECK #
#====================================================================#
HEALTHCHECK --interval=30s --timeout=3s --retries=5 CMD curl -f http://localhost/ || exit 1
#====================================================================#
# ENTRYPOINT #
#====================================================================#
CMD ["bash", "/startScript.sh"]