Skip to content

Commit d7941ef

Browse files
mborneslafayIGN
authored andcommitted
chore(docker): improve image adding DB_CREATE and DB_UPGRADE options (refs #52)
1 parent 9040307 commit d7941ef

3 files changed

Lines changed: 91 additions & 56 deletions

File tree

.docker/Dockerfile

Lines changed: 59 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,56 @@
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
#----------------------------------------------------------------------
4844
COPY .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
#----------------------------------------------------------------------
5749
RUN 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
7867
RUN 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
#----------------------------------------------------------------------
8978
ARG 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
10187
WORKDIR /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+
110100
VOLUME /opt/validator-api/var/data
111101

102+
USER www-data
112103

113-
#----------------------------------------------------------------------
114-
# Replace default command
115-
#----------------------------------------------------------------------
116104
EXPOSE 8000
117105
CMD ["/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

.docker/application.sh

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,30 @@
11
#!/bin/bash
22
set -e
33

4+
#---------------------------------------------------------------------------
5+
# env vars specific to .docker/application.sh
6+
#---------------------------------------------------------------------------
7+
8+
# allows to enable / disable automatic database creation (doctrine:database:create)
9+
DB_CREATE=${DB_CREATE:-0}
10+
# allows to enable / disable automatic schema upgrade (doctrine:schema:update)
11+
DB_UPGRADE=${DB_UPGRADE:-1}
12+
13+
# run (apache2) / backend / test
414
ACTION=${1:-run}
515

616
run(){
717
#---------------------------------------------------------------------------
818
# Ensure that database is created and schema is up to date.
919
#---------------------------------------------------------------------------
10-
bin/console doctrine:database:create --if-not-exists
11-
bin/console doctrine:schema:update --force
20+
if [ "$DB_CREATE" = "1" ];
21+
then
22+
bin/console doctrine:database:create --if-not-exists
23+
fi
24+
if [ "$DB_UPGRADE" = "1" ];
25+
then
26+
bin/console doctrine:schema:update --force --complete
27+
fi
1228

1329
#---------------------------------------------------------------------------
1430
# start apache as www-data
@@ -24,7 +40,7 @@ test(){
2440
export APP_ENV=test
2541
export DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@database:5432/validator_api_test?serverVersion=13&charset=utf8"
2642
bin/console --env=test doctrine:database:create --if-not-exists
27-
bin/console --env=test doctrine:schema:update --force
43+
bin/console --env=test doctrine:schema:update --complete --force
2844
XDEBUG_MODE=coverage vendor/bin/phpunit
2945
}
3046

docker-compose.yml

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,24 @@ services:
44

55
# validator-api service
66
api:
7-
image: ignf/validator-api:latest
7+
image: ignf/validator-api:master-dev
88
build:
99
context: .
1010
dockerfile: .docker/Dockerfile
11+
target: dev
1112
args:
1213
- http_proxy
1314
- https_proxy
1415
environment:
1516
- HTTP_PROXY=${HTTP_PROXY}
1617
- HTTPS_PROXY=${HTTPS_PROXY}
18+
# important for ogr2ogr...
19+
- http_proxy=${HTTP_PROXY}
20+
- https_proxy=${HTTPS_PROXY}
1721
- APP_ENV=${APP_ENV}
18-
- POSTGRES_USER=${POSTGRES_USER}
22+
- DB_CREATE=1
23+
- DB_UPGRADE=1
24+
- POSTGRES_USER=validator
1925
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
2026
- DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@database:5432/validator_api?serverVersion=13&charset=utf8
2127
networks:
@@ -52,12 +58,15 @@ services:
5258
#-----------------------------------------------------------------------
5359
# Process validations
5460
#-----------------------------------------------------------------------
55-
orchestrator:
56-
image: ignf/validator-api:latest
61+
backend:
62+
image: ignf/validator-api:master-dev
5763
command: .docker/application.sh backend
5864
environment:
5965
- HTTP_PROXY=${HTTP_PROXY}
6066
- HTTPS_PROXY=${HTTPS_PROXY}
67+
# important for ogr2ogr...
68+
- http_proxy=${HTTP_PROXY}
69+
- https_proxy=${HTTPS_PROXY}
6170
- APP_ENV=${APP_ENV}
6271
- POSTGRES_USER=${POSTGRES_USER}
6372
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}

0 commit comments

Comments
 (0)