1- FROM php:8.1-apache
1+ # ----------------------------------------------------------------------
2+ # Download vendor from composer.json in dedicated layer
3+ # ----------------------------------------------------------------------
4+ FROM composer:2.3 as vendor
25
3- # ENV COMPOSER_ALLOW_SUPERUSER=1
4- RUN rm /etc/apt/preferences.d/no-debian-php
6+ RUN mkdir -p /opt/validator-api
7+ WORKDIR /opt/validator-api
8+ COPY composer.json .
9+ RUN composer install --no-scripts --prefer-dist
510
611# ----------------------------------------------------------------------
7- # Env vars for validator-api
12+ # Create base layer for dev and production
813# ----------------------------------------------------------------------
9- ENV APP_ENV=prod
10- ENV VALIDATOR_PATH=/opt/ign-validator/validator-cli.jar
11-
12- ENV POSTGRES_USER=validator
13- ENV POSTGRES_PASSWORD=validator
14+ FROM php:8.2-apache as base
1415
15- RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y locales
16+ ENV DEBIAN_FRONTEND=noninteractive
17+ ENV LANG fr_FR.UTF-8
18+ ENV VALIDATOR_PATH=/opt/ign-validator/validator-cli.jar
1619
1720# ----------------------------------------------------------------------
1821# Configure locale to fr_FR.UTF-8
1922# see also https://stackoverflow.com/a/41797247
2023# ----------------------------------------------------------------------
21- RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y locales \
24+ RUN apt-get update && apt-get install -y locales \
2225 && sed -i -e 's/# en_US.UTF-8 UTF-8/fr_FR.UTF-8 UTF-8/' /etc/locale.gen \
23- && dpkg-reconfigure --frontend=noninteractive locales \
26+ && dpkg-reconfigure locales \
2427 && update-locale LANG=fr_FR.UTF-8 \
25- && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
26-
27- ENV LANG fr_FR.UTF-8
28+ && rm -rf /var/lib/apt/lists/*
2829
2930# ----------------------------------------------------------------------
3031# Install common tools
3132# ----------------------------------------------------------------------
32- RUN apt-get update -qq \
33- && apt-get install -y lsb-release gnupg2 wget curl vim git \
34- && echo "deb https://packages.sury.org/php/ $(lsb_release -cs) main" > /etc/apt/sources.list.d/php.list \
35- && curl -sS https://packages.sury.org/php/apt.gpg | apt-key add - \
36- && apt-get update -qq \
37- && apt-get install -qy \
33+ RUN apt-get update \
34+ && apt-get install -y \
3835 unzip \
3936 make \
40- php-dev \
37+ curl wget \
4138 zip \
42- && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
43- && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
39+ && rm -rf /var/lib/apt/lists/*
4440
4541# ----------------------------------------------------------------------
46- # Configure PHP and pecl
42+ # Configure PHP
4743# ----------------------------------------------------------------------
4844COPY .docker/php.ini /usr/local/etc/php/conf.d/app.ini
49- RUN pear config-set php_ini /usr/local/etc/php/conf.d/app.ini
50- RUN if [ "${http_proxy}" != "" ]; then \
51- pear config-set http_proxy ${http_proxy} \
52- ;fi
5345
5446# ----------------------------------------------------------------------
5547# Install PHP extensions
5648# ----------------------------------------------------------------------
5749RUN apt-get update -qq \
5850 && apt-get install -y postgresql-client libpq-dev libzip-dev \
5951 && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
60- && docker-php-ext-install pdo pdo_pgsql pgsql zip \
61- && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
62-
63- RUN pecl install xdebug \
64- && docker-php-ext-enable xdebug
52+ && docker-php-ext-install opcache pdo pdo_pgsql pgsql zip \
53+ && rm -rf /var/lib/apt/lists/*
6554
6655# ----------------------------------------------------------------------
6756# Configure apache
@@ -78,40 +67,61 @@ RUN a2enmod rewrite remoteip
7867RUN apt-get update -qq \
7968 # see https://github.com/debuerreotype/docker-debian-artifacts/issues/24
8069 && mkdir -p /usr/share/man/man1 \
81- && apt-get install -y openjdk-11 -jdk-headless gdal-bin \
70+ && apt-get install -y openjdk-17 -jdk-headless gdal-bin \
8271 && java -version \
8372 && ogrinfo --version \
84- && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp /*
73+ && rm -rf /var/lib/apt/lists/*
8574
8675# ----------------------------------------------------------------------
8776# Setup /opt/ign-validator/validator-cli.jar
8877# ----------------------------------------------------------------------
8978ARG validator_version=4.4.0
90- RUN apt-get update -qq \
91- && wget --quiet -O /tmp/validator-cli.deb https://github.com/IGNF/validator/releases/download/v${validator_version}/ign-validator_${validator_version}_all.deb \
92- && dpkg -i /tmp/validator-cli.deb \
93- && rm -f /tmp/validator-cli.deb \
94- && echo "validator-cli.jar version : $(java -jar /opt/ign-validator/validator-cli.jar version)" \
95- && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
79+ RUN mkdir -p /opt/ign-validator \
80+ && wget --quiet -O ${VALIDATOR_PATH} https://github.com/IGNF/validator/releases/download/v${validator_version}/validator-cli.jar \
81+ && echo "validator-cli.jar version : $(java -jar /opt/ign-validator/validator-cli.jar version)"
9682
9783# ----------------------------------------------------------------------
9884# Install validator-api
9985# ----------------------------------------------------------------------
100- COPY --chown=www-data:www-data . /opt/validator-api
86+ COPY . /opt/validator-api
10187WORKDIR /opt/validator-api
102- USER www-data
103- RUN composer install
88+ COPY --from=vendor /opt/validator-api/vendor vendor
10489
10590# ----------------------------------------------------------------------
10691# Prepare data storage
10792# (Note that /opt/validator-api/var/data is shared between containers)
10893# ----------------------------------------------------------------------
109- RUN mkdir -p /opt/validator-api/var/data/validations
94+ RUN mkdir -p /opt/validator-api/var/data/validations \
95+ && chown -R www-data:www-data /opt/validator-api/var
96+
97+ # ensure ogr2ogr can write in $HOME/.gdal ...
98+ ENV HOME=/opt/validator-api/var
99+
110100VOLUME /opt/validator-api/var/data
111101
102+ USER www-data
112103
113- # ----------------------------------------------------------------------
114- # Replace default command
115- # ----------------------------------------------------------------------
116104EXPOSE 8000
117105CMD ["/opt/validator-api/.docker/application.sh" ]
106+
107+ # ----------------------------------------------------------------------
108+ # DEV image with xdebug
109+ # ----------------------------------------------------------------------
110+ FROM base as dev
111+
112+ ENV APP_ENV=dev
113+
114+ USER root
115+ # install xdebug extension for php
116+ RUN pear config-set http_proxy ${http_proxy} \
117+ && pear config-set php_ini $PHP_INI_DIR/php.ini \
118+ && pecl install xdebug \
119+ && docker-php-ext-enable xdebug
120+ USER www-data
121+
122+ # ----------------------------------------------------------------------
123+ # Production image without xdebug
124+ # ----------------------------------------------------------------------
125+ FROM base as prod
126+
127+ ENV APP_ENV=prod
0 commit comments