From fe78728f0ab8bf082e6106cae995c24cecc50132 Mon Sep 17 00:00:00 2001 From: Ymage Date: Wed, 20 Nov 2019 18:05:53 +0100 Subject: [PATCH 01/12] Add Docker stuff --- .dockerignore | 7 ++++ .env.exemple | 11 +++++++ .gitignore | 3 ++ Dockerfile | 65 +++++++++++++++++++++++++++++++++++++ docker-compose.yml | 35 ++++++++++++++++++++ docker/application.ini | 14 ++++++++ docker/docker-entrypoint.sh | 8 +++++ docker/mariadb/innodb.conf | 12 +++++++ docker/prefmon.cron | 1 + docker/prefmon_cron.sh | 4 +++ 10 files changed, 160 insertions(+) create mode 100644 .dockerignore create mode 100644 .env.exemple create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100644 docker/application.ini create mode 100644 docker/docker-entrypoint.sh create mode 100644 docker/mariadb/innodb.conf create mode 100644 docker/prefmon.cron create mode 100644 docker/prefmon_cron.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..03b3bae --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +**/db +**/logs +**/archives + +**/.idea +**/.git +./.env diff --git a/.env.exemple b/.env.exemple new file mode 100644 index 0000000..907b5e6 --- /dev/null +++ b/.env.exemple @@ -0,0 +1,11 @@ +## docker-compose sidekick env file + +# MariaDB +MARIADB_DATABASE=prefmon +MARIADB_USER=prefmon +MARIADB_PASSWORD=p@ssw0rd +MARIADB_HOST=prefmondb +MARIADB_PORT=3306 + +# PrefMon variables +#SONDAGE_PARAMS="-d -n -t 92/nanterre-naturalisation-decret" \ No newline at end of file diff --git a/.gitignore b/.gitignore index 97c18f4..12b6d78 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ +.idea/ + configuration.ini +.env \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..96591e0 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,65 @@ +FROM alpine:3.10.3 + +RUN apk add --no-cache --update \ + bash \ + dcron \ + php7 \ + php7-bz2 \ + php7-calendar \ + php7-cli \ + php7-common \ + php7-ctype \ + php7-curl \ + php7-dom \ + php7-exif \ + php7-fileinfo \ + php7-gd \ + php7-gmp \ + php7-iconv \ + php7-imagick \ + php7-intl \ + php7-json \ + php7-mbstring \ + php7-mcrypt \ + php7-opcache \ + php7-openssl \ + php7-pcntl \ + php7-pdo_mysql \ + php7-phar \ + php7-posix \ + php7-session \ + php7-shmop \ + php7-simplexml \ + php7-xml \ + php7-xmlreader \ + php7-xmlwriter \ + php7-zip \ + php7-zlib \ + php7-apcu + +COPY docker/application.ini /etc/php7/conf.d/ +COPY docker/prefmon_cron.sh /usr/local/bin/ +COPY docker/prefmon.cron /etc/cron.d/ +COPY docker/docker-entrypoint.sh /usr/local/bin/entrypoint.sh + +WORKDIR /var/app + +COPY *.php ./ + +# set recommended PHP.ini settings +# see https://secure.php.net/manual/en/opcache.installation.php +RUN { \ + echo 'opcache.memory_consumption=128'; \ + echo 'opcache.interned_strings_buffer=8'; \ + echo 'opcache.max_accelerated_files=10000'; \ + echo 'opcache.revalidate_freq=60'; \ + echo 'opcache.fast_shutdown=1'; \ + echo 'opcache.enable_cli=1'; \ + echo 'opcache.enable=1'; \ + echo 'opcache.save_comments=1'; \ + echo 'opcache.revalidate_freq=1'; \ + } >> /etc/php7/conf.d/00_opcache.ini && \ + chmod 0755 /usr/local/bin/*.sh && \ + crontab /etc/cron.d/prefmon.cron + +CMD [ "entrypoint.sh" ] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..48630c4 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,35 @@ +version: "3" + +services: + prefmondb: + image: mariadb:10.4.10 + restart: unless-stopped + environment: + MYSQL_DATABASE: ${MARIADB_DATABASE} + MYSQL_USER: ${MARIADB_USER} + MYSQL_PASSWORD: ${MARIADB_PASSWORD} + MYSQL_RANDOM_ROOT_PASSWORD: "yes" + MYSQL_ONETIME_PASSWORD: "yes" + LANG: "C.UTF-8" + volumes: + - ./base.sql:/docker-entrypoint-initdb.d/base.sql:ro + - ./db/mariadb:/var/lib/mysql + - ./docker/mariadb:/etc/mysql/conf.d + + prefmon: + image: ymage/prefmon + restart: unless-stopped + depends_on: + - prefmondb + environment: + DB_NAME: ${MARIADB_DATABASE} + DB_USER: ${MARIADB_USER} + DB_PASSWORD: ${MARIADB_PASSWORD} + DB_HOST: ${MARIADB_HOST} + DB_PORT: ${MARIADB_PORT} + SONDAGE_PARAMS: ${SONDAGE_PARAMS} + volumes: + - ./configuration.ini:/var/app/configuration.ini:rw + - ./sondages.ini:/var/app/sondages.ini:ro + - ./archives:/var/app/archives:rw + - ./logs:/var/app/logs:rw diff --git a/docker/application.ini b/docker/application.ini new file mode 100644 index 0000000..7ddee63 --- /dev/null +++ b/docker/application.ini @@ -0,0 +1,14 @@ +date.timezone = UTC + +error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT +error_log = syslog + +display_errors = off + +upload_max_filesize = 1G +post_max_size = 1G + +max_input_time = 3600 +max_execution_time = 3600 + +memory_limit = 1024M diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh new file mode 100644 index 0000000..2582e95 --- /dev/null +++ b/docker/docker-entrypoint.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -euo pipefail + +echo "Waiting for the database ..." +while ! timeout 1 bash -c "cat < /dev/null > /dev/tcp/${DB_HOST}/${DB_PORT}" >/dev/null 2>&1; do sleep 0.1; done + +echo "Launch cron ..." +crond -f diff --git a/docker/mariadb/innodb.conf b/docker/mariadb/innodb.conf new file mode 100644 index 0000000..59bd817 --- /dev/null +++ b/docker/mariadb/innodb.conf @@ -0,0 +1,12 @@ +[mysqld] +innodb_large_prefix=1 +innodb_file_format=barracuda +innodb_file_per_table=1 +wait_timeout = 28800 + +character-set-server=utf8mb4 +character_set_client=utf8mb4 +collation-server=utf8mb4_general_ci + +[client] +default-character-set=utf8mb4 diff --git a/docker/prefmon.cron b/docker/prefmon.cron new file mode 100644 index 0000000..38c1c5c --- /dev/null +++ b/docker/prefmon.cron @@ -0,0 +1 @@ +*/3 * * * * /usr/local/bin/prefmon_cron.sh | logger -t prefmon diff --git a/docker/prefmon_cron.sh b/docker/prefmon_cron.sh new file mode 100644 index 0000000..1bd415f --- /dev/null +++ b/docker/prefmon_cron.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -euo pipefail + +php /var/app/effectuer_sondage.php ${SONDAGE_PARAMS} -- GitLab From a00d01092a389b53e850803e43d5825f5e18233c Mon Sep 17 00:00:00 2001 From: Ymage Date: Wed, 20 Nov 2019 18:55:28 +0100 Subject: [PATCH 02/12] Switch from docker image to local build Add data directories to .gitignore --- .gitignore | 4 ++++ docker-compose.yml | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 12b6d78..803c2d2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,8 @@ .idea/ +archives/ +db/ +logs/ + configuration.ini .env \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 48630c4..d691d00 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,7 +17,8 @@ services: - ./docker/mariadb:/etc/mysql/conf.d prefmon: - image: ymage/prefmon + build: + context: . restart: unless-stopped depends_on: - prefmondb @@ -29,7 +30,7 @@ services: DB_PORT: ${MARIADB_PORT} SONDAGE_PARAMS: ${SONDAGE_PARAMS} volumes: - - ./configuration.ini:/var/app/configuration.ini:rw + - ./configuration.ini:/var/app/configuration.ini:ro - ./sondages.ini:/var/app/sondages.ini:ro - ./archives:/var/app/archives:rw - ./logs:/var/app/logs:rw -- GitLab From dc85e3872bc582d3fe8dd469b0d4fdb0d36af134 Mon Sep 17 00:00:00 2001 From: Ymage Date: Wed, 20 Nov 2019 19:00:55 +0100 Subject: [PATCH 03/12] Typo --- docker/mariadb/innodb.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/mariadb/innodb.conf b/docker/mariadb/innodb.conf index 59bd817..02d0d1f 100644 --- a/docker/mariadb/innodb.conf +++ b/docker/mariadb/innodb.conf @@ -2,7 +2,7 @@ innodb_large_prefix=1 innodb_file_format=barracuda innodb_file_per_table=1 -wait_timeout = 28800 +wait_timeout=28800 character-set-server=utf8mb4 character_set_client=utf8mb4 -- GitLab From b3e7662d443e11e1aac73f6ae18f7dc95e99d910 Mon Sep 17 00:00:00 2001 From: Ymage Date: Sat, 23 Nov 2019 11:56:38 +0100 Subject: [PATCH 04/12] Add configuration.ini generation from .env file Add NETWORK_PROXY env var Update README.md to explain how to use it with Docker --- .env.exemple | 6 ++- .gitignore | 4 +- Dockerfile | 22 ++++++++--- README.md | 39 +++++++++++++++++-- docker-compose.yml | 5 ++- docker/application.ini | 2 +- docker/confd/conf.d/configuration.ini.toml | 12 ++++++ docker/confd/templates/configuration.ini.tmpl | 19 +++++++++ docker/docker-entrypoint.sh | 8 +++- docker/prefmon.cron | 1 - prefmon.cron.exemple | 1 + 11 files changed, 102 insertions(+), 17 deletions(-) create mode 100644 docker/confd/conf.d/configuration.ini.toml create mode 100644 docker/confd/templates/configuration.ini.tmpl delete mode 100644 docker/prefmon.cron create mode 100644 prefmon.cron.exemple diff --git a/.env.exemple b/.env.exemple index 907b5e6..cd6ca1d 100644 --- a/.env.exemple +++ b/.env.exemple @@ -7,5 +7,9 @@ MARIADB_PASSWORD=p@ssw0rd MARIADB_HOST=prefmondb MARIADB_PORT=3306 +# Proxy +NETWORK_PROXY="" + # PrefMon variables -#SONDAGE_PARAMS="-d -n -t 92/nanterre-naturalisation-decret" \ No newline at end of file +#SONDAGE_PARAMS="-d -n -t 92/nanterre-naturalisation-decret" +SONDAGE_PARAMS="" diff --git a/.gitignore b/.gitignore index 803c2d2..172b905 100644 --- a/.gitignore +++ b/.gitignore @@ -4,5 +4,5 @@ archives/ db/ logs/ -configuration.ini -.env \ No newline at end of file +.env +prefmon.cron \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 96591e0..d1844f0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,16 @@ -FROM alpine:3.10.3 +FROM alpine:3.10.3 as base +FROM base as builder + +RUN apk add --no-cache --update \ + ca-certificates \ + curl && \ + mkdir -p /install/bin && \ + curl -L https://github.com/kelseyhightower/confd/releases/download/v0.16.0/confd-0.16.0-linux-amd64 -o \ + /install/bin/confd && \ + chmod 0755 /install/bin/confd + +FROM base +COPY --from=builder /install /usr/local RUN apk add --no-cache --update \ bash \ @@ -25,7 +37,6 @@ RUN apk add --no-cache --update \ php7-openssl \ php7-pcntl \ php7-pdo_mysql \ - php7-phar \ php7-posix \ php7-session \ php7-shmop \ @@ -37,9 +48,9 @@ RUN apk add --no-cache --update \ php7-zlib \ php7-apcu +COPY docker/confd/ /etc/confd COPY docker/application.ini /etc/php7/conf.d/ -COPY docker/prefmon_cron.sh /usr/local/bin/ -COPY docker/prefmon.cron /etc/cron.d/ +COPY docker/prefmon_cron.sh /usr/local/bin/prefmon_cron.sh COPY docker/docker-entrypoint.sh /usr/local/bin/entrypoint.sh WORKDIR /var/app @@ -59,7 +70,6 @@ RUN { \ echo 'opcache.save_comments=1'; \ echo 'opcache.revalidate_freq=1'; \ } >> /etc/php7/conf.d/00_opcache.ini && \ - chmod 0755 /usr/local/bin/*.sh && \ - crontab /etc/cron.d/prefmon.cron + chmod 0755 /usr/local/bin/* CMD [ "entrypoint.sh" ] diff --git a/README.md b/README.md index 4e71d1b..d0556f6 100644 --- a/README.md +++ b/README.md @@ -10,12 +10,11 @@ Une version du logiciel collecte actuellement des données. Celles-ci sont publiées en ligne à l'adresse : [aguichetsfermes.lacimade.org/](https://aguichetsfermes.lacimade.org/) -# Utiliser le logiciel +# Utiliser le logiciel sur une hébergement Web classique ## Pré-requis -Ce logiciel est pensé pour être déployé sur un hébergement Web classique, -comprenant : +Ce logiciel est pensé pour être déployé sur un serveur comprenant : - Une base de données MySQL ou MariaDB - La possibilité d'éxécuter des scripts PHP - La possibilité d'écrire des fichiers @@ -42,3 +41,37 @@ comprenant : archives. 1. Pour ajouter une démarche à surveiller, modifiez le fichier [sondages.ini](sondages.ini). + +# Utiliser le logiciel via Docker + +## Pré-requis + +Ce logiciel est pensé pour être déployé sur un serveur comprenant : + - Un démon docker correctement configuré + - La possibilité d'écrire des fichiers + +## Installation + +1. Récupérez le code : + ```sh + $ git clone https://framagit.org/lacimade/prefmon.git + ``` +1. Créer l'image Docker + ```sh + $ docker-compose build + ``` + +### Configuration + +1. Créez le fichier .env.ini à partir du modèle [.env.exemple](.env.exemple) en + indiquant les informations pour se connecter à la base de données et le répertoire où seront stockées les + archives. +1. Créez une tâche régulière ('[crontab](https://crontab.guru/)') à partir du modèle [prefmon.cron.exemple](prefmon.cron.exemple) en ajustant la fréquence +1. Pour ajouter une démarche à surveiller, modifiez le fichier + [sondages.ini](sondages.ini). + +### Lancement +1. Lancer les services : + ```sh + $ docker-compose up --detach + ``` diff --git a/docker-compose.yml b/docker-compose.yml index d691d00..28c2d06 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -29,8 +29,9 @@ services: DB_HOST: ${MARIADB_HOST} DB_PORT: ${MARIADB_PORT} SONDAGE_PARAMS: ${SONDAGE_PARAMS} + NETWORK_PROXY: ${NETWORK_PROXY} volumes: - - ./configuration.ini:/var/app/configuration.ini:ro + - ./perfmon.cron:/etc/cron.d/prefmon.cron:ro - ./sondages.ini:/var/app/sondages.ini:ro - ./archives:/var/app/archives:rw - - ./logs:/var/app/logs:rw + diff --git a/docker/application.ini b/docker/application.ini index 7ddee63..47117cf 100644 --- a/docker/application.ini +++ b/docker/application.ini @@ -1,4 +1,4 @@ -date.timezone = UTC +date.timezone = Europe/Paris error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT error_log = syslog diff --git a/docker/confd/conf.d/configuration.ini.toml b/docker/confd/conf.d/configuration.ini.toml new file mode 100644 index 0000000..a9c3617 --- /dev/null +++ b/docker/confd/conf.d/configuration.ini.toml @@ -0,0 +1,12 @@ +[template] +src = "configuration.ini.tmpl" +dest = "/var/app/configuration.ini" +mode = "0644" +keys = [ + "/db/user", + "/db/name", + "/db/password", + "/db/host", + "/db/port", + "/network/proxy" +] diff --git a/docker/confd/templates/configuration.ini.tmpl b/docker/confd/templates/configuration.ini.tmpl new file mode 100644 index 0000000..790c7af --- /dev/null +++ b/docker/confd/templates/configuration.ini.tmpl @@ -0,0 +1,19 @@ +; configuration.ini +; stockage des variables de configuration + +; Dossier où stocker les traces des sondages effectués : +archives=./archives +; Dossier où stocker les logs : +;logs=./logs + +; options pour la connexion aux sites distants +useragent = "Prefmon - canal framagit : https://framagit.org/lacimade/prefmon" +proxy = "{{ getv "/network/proxy" }}" +proxy_eappointment = "" ; proxy spécifique utilisé par le module eappointment si défini + +; sql : identifiants SQL +[sql] +serveur = "{{ getv "/db/host" }}:{{ getv "/db/port" }}" +utilisateur = "{{ getv "/db/user" }}" +motdepasse = "{{ getv "/db/password" }}" +basededonnées = "{{ getv "/db/name" }}" diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index 2582e95..a9f850d 100644 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -1,8 +1,14 @@ #!/usr/bin/env bash set -euo pipefail +echo "Set up configuration ..." +confd -onetime -backend env + echo "Waiting for the database ..." while ! timeout 1 bash -c "cat < /dev/null > /dev/tcp/${DB_HOST}/${DB_PORT}" >/dev/null 2>&1; do sleep 0.1; done -echo "Launch cron ..." +echo "Registering crontab ..." +crontab /etc/cron.d/prefmon.cron + +echo "Launching cron daemon..." crond -f diff --git a/docker/prefmon.cron b/docker/prefmon.cron deleted file mode 100644 index 38c1c5c..0000000 --- a/docker/prefmon.cron +++ /dev/null @@ -1 +0,0 @@ -*/3 * * * * /usr/local/bin/prefmon_cron.sh | logger -t prefmon diff --git a/prefmon.cron.exemple b/prefmon.cron.exemple new file mode 100644 index 0000000..694904c --- /dev/null +++ b/prefmon.cron.exemple @@ -0,0 +1 @@ +* 2 * * * /usr/local/bin/prefmon_cron.sh | logger -t prefmon -- GitLab From e7076954960f379e020591a7877f633efd1ba72b Mon Sep 17 00:00:00 2001 From: Ymage Date: Sat, 23 Nov 2019 12:00:19 +0100 Subject: [PATCH 05/12] Typo --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d0556f6..416d028 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Une version du logiciel collecte actuellement des données. Celles-ci sont publiées en ligne à l'adresse : [aguichetsfermes.lacimade.org/](https://aguichetsfermes.lacimade.org/) -# Utiliser le logiciel sur une hébergement Web classique +# Utiliser le logiciel sur un hébergement Web classique ## Pré-requis @@ -71,7 +71,7 @@ Ce logiciel est pensé pour être déployé sur un serveur comprenant : [sondages.ini](sondages.ini). ### Lancement -1. Lancer les services : +1. Lancez les services : ```sh $ docker-compose up --detach ``` -- GitLab From 0857bcb00701753294958361605a4d5a5aba5ccd Mon Sep 17 00:00:00 2001 From: Ymage Date: Sat, 23 Nov 2019 12:54:14 +0100 Subject: [PATCH 06/12] Lighten the docker image Fix perfmon typo Change crontab reference to the specific one --- Dockerfile | 8 +------- README.md | 2 +- docker-compose.yml | 2 +- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index d1844f0..d96d5d6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,30 +23,24 @@ RUN apk add --no-cache --update \ php7-ctype \ php7-curl \ php7-dom \ - php7-exif \ php7-fileinfo \ php7-gd \ - php7-gmp \ php7-iconv \ - php7-imagick \ php7-intl \ php7-json \ php7-mbstring \ php7-mcrypt \ php7-opcache \ php7-openssl \ - php7-pcntl \ php7-pdo_mysql \ php7-posix \ php7-session \ - php7-shmop \ php7-simplexml \ php7-xml \ php7-xmlreader \ php7-xmlwriter \ php7-zip \ - php7-zlib \ - php7-apcu + php7-zlib COPY docker/confd/ /etc/confd COPY docker/application.ini /etc/php7/conf.d/ diff --git a/README.md b/README.md index 416d028..9a5fe46 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ Ce logiciel est pensé pour être déployé sur un serveur comprenant : 1. Créez le fichier .env.ini à partir du modèle [.env.exemple](.env.exemple) en indiquant les informations pour se connecter à la base de données et le répertoire où seront stockées les archives. -1. Créez une tâche régulière ('[crontab](https://crontab.guru/)') à partir du modèle [prefmon.cron.exemple](prefmon.cron.exemple) en ajustant la fréquence +1. Créez une tâche régulière ('[crontab](https://github.com/dubiousjim/dcron/blob/master/crontab.markdown)') à partir du modèle [prefmon.cron.exemple](prefmon.cron.exemple) en ajustant la fréquence 1. Pour ajouter une démarche à surveiller, modifiez le fichier [sondages.ini](sondages.ini). diff --git a/docker-compose.yml b/docker-compose.yml index 28c2d06..910b6e2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -31,7 +31,7 @@ services: SONDAGE_PARAMS: ${SONDAGE_PARAMS} NETWORK_PROXY: ${NETWORK_PROXY} volumes: - - ./perfmon.cron:/etc/cron.d/prefmon.cron:ro + - ./prefmon.cron:/etc/cron.d/prefmon.cron:ro - ./sondages.ini:/var/app/sondages.ini:ro - ./archives:/var/app/archives:rw -- GitLab From 982f8eaf5361689a97606953e5ff57066e0fa7a6 Mon Sep 17 00:00:00 2001 From: Ymage Date: Mon, 25 Nov 2019 10:39:42 +0100 Subject: [PATCH 07/12] Replace confd by envsubst which is enough Embed the php7 opcache.ini file instead of create it from Dockerfile --- Dockerfile | 31 +++---------------- docker-compose.yml | 2 +- docker/confd/conf.d/configuration.ini.toml | 12 ------- docker/docker-entrypoint.sh | 2 +- docker/php7/00_opcache.ini | 9 ++++++ .../templates/configuration.ini.tmpl | 10 +++--- 6 files changed, 21 insertions(+), 45 deletions(-) delete mode 100644 docker/confd/conf.d/configuration.ini.toml create mode 100644 docker/php7/00_opcache.ini rename docker/{confd => }/templates/configuration.ini.tmpl (65%) diff --git a/Dockerfile b/Dockerfile index d96d5d6..17ce496 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,20 +1,9 @@ -FROM alpine:3.10.3 as base -FROM base as builder - -RUN apk add --no-cache --update \ - ca-certificates \ - curl && \ - mkdir -p /install/bin && \ - curl -L https://github.com/kelseyhightower/confd/releases/download/v0.16.0/confd-0.16.0-linux-amd64 -o \ - /install/bin/confd && \ - chmod 0755 /install/bin/confd - -FROM base -COPY --from=builder /install /usr/local +FROM alpine:3.10.3 RUN apk add --no-cache --update \ bash \ dcron \ + gettext \ php7 \ php7-bz2 \ php7-calendar \ @@ -42,9 +31,10 @@ RUN apk add --no-cache --update \ php7-zip \ php7-zlib -COPY docker/confd/ /etc/confd +COPY docker/php7/ /etc/php7/conf.d/ COPY docker/application.ini /etc/php7/conf.d/ COPY docker/prefmon_cron.sh /usr/local/bin/prefmon_cron.sh +COPY docker/templates/configuration.ini.tmpl /tmp/ COPY docker/docker-entrypoint.sh /usr/local/bin/entrypoint.sh WORKDIR /var/app @@ -53,17 +43,6 @@ COPY *.php ./ # set recommended PHP.ini settings # see https://secure.php.net/manual/en/opcache.installation.php -RUN { \ - echo 'opcache.memory_consumption=128'; \ - echo 'opcache.interned_strings_buffer=8'; \ - echo 'opcache.max_accelerated_files=10000'; \ - echo 'opcache.revalidate_freq=60'; \ - echo 'opcache.fast_shutdown=1'; \ - echo 'opcache.enable_cli=1'; \ - echo 'opcache.enable=1'; \ - echo 'opcache.save_comments=1'; \ - echo 'opcache.revalidate_freq=1'; \ - } >> /etc/php7/conf.d/00_opcache.ini && \ - chmod 0755 /usr/local/bin/* +RUN chmod 0755 /usr/local/bin/* CMD [ "entrypoint.sh" ] diff --git a/docker-compose.yml b/docker-compose.yml index 910b6e2..829acc9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,8 +13,8 @@ services: LANG: "C.UTF-8" volumes: - ./base.sql:/docker-entrypoint-initdb.d/base.sql:ro + - ./docker/mariadb:/etc/mysql/conf.d:ro - ./db/mariadb:/var/lib/mysql - - ./docker/mariadb:/etc/mysql/conf.d prefmon: build: diff --git a/docker/confd/conf.d/configuration.ini.toml b/docker/confd/conf.d/configuration.ini.toml deleted file mode 100644 index a9c3617..0000000 --- a/docker/confd/conf.d/configuration.ini.toml +++ /dev/null @@ -1,12 +0,0 @@ -[template] -src = "configuration.ini.tmpl" -dest = "/var/app/configuration.ini" -mode = "0644" -keys = [ - "/db/user", - "/db/name", - "/db/password", - "/db/host", - "/db/port", - "/network/proxy" -] diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index a9f850d..3b93fb1 100644 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -2,7 +2,7 @@ set -euo pipefail echo "Set up configuration ..." -confd -onetime -backend env +envsubst '${DB_HOST} ${DB_PORT} ${DB_USER} ${DB_PASSWORD} ${DB_NAME} ${NETWORK_PROXY}' < /tmp/configuration.ini.tmpl > /var/app/configuration.ini echo "Waiting for the database ..." while ! timeout 1 bash -c "cat < /dev/null > /dev/tcp/${DB_HOST}/${DB_PORT}" >/dev/null 2>&1; do sleep 0.1; done diff --git a/docker/php7/00_opcache.ini b/docker/php7/00_opcache.ini new file mode 100644 index 0000000..6a2c1d5 --- /dev/null +++ b/docker/php7/00_opcache.ini @@ -0,0 +1,9 @@ +opcache.memory_consumption=128 +opcache.interned_strings_buffer=8 +opcache.max_accelerated_files=10000 +opcache.revalidate_freq=60 +opcache.fast_shutdown=1 +opcache.enable_cli=1 +opcache.enable=1 +opcache.save_comments=1 +opcache.revalidate_freq=1 diff --git a/docker/confd/templates/configuration.ini.tmpl b/docker/templates/configuration.ini.tmpl similarity index 65% rename from docker/confd/templates/configuration.ini.tmpl rename to docker/templates/configuration.ini.tmpl index 790c7af..2bf33ed 100644 --- a/docker/confd/templates/configuration.ini.tmpl +++ b/docker/templates/configuration.ini.tmpl @@ -8,12 +8,12 @@ archives=./archives ; options pour la connexion aux sites distants useragent = "Prefmon - canal framagit : https://framagit.org/lacimade/prefmon" -proxy = "{{ getv "/network/proxy" }}" +proxy = "${NETWORK_PROXY}" proxy_eappointment = "" ; proxy spécifique utilisé par le module eappointment si défini ; sql : identifiants SQL [sql] -serveur = "{{ getv "/db/host" }}:{{ getv "/db/port" }}" -utilisateur = "{{ getv "/db/user" }}" -motdepasse = "{{ getv "/db/password" }}" -basededonnées = "{{ getv "/db/name" }}" +serveur = "${DB_HOST}:${DB_PORT}" +utilisateur = "${DB_USER}" +motdepasse = "${DB_PASSWORD}" +basededonnées = "${DB_NAME}" -- GitLab From f61862ba8942d5d0f4c75a878874d4fd0a9d4650 Mon Sep 17 00:00:00 2001 From: Ymage Date: Mon, 25 Nov 2019 10:45:01 +0100 Subject: [PATCH 08/12] Move all the php *.ini file in the same directory --- Dockerfile | 1 - docker/{ => php7}/application.ini | 0 2 files changed, 1 deletion(-) rename docker/{ => php7}/application.ini (100%) diff --git a/Dockerfile b/Dockerfile index 17ce496..a4e54ab 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,7 +32,6 @@ RUN apk add --no-cache --update \ php7-zlib COPY docker/php7/ /etc/php7/conf.d/ -COPY docker/application.ini /etc/php7/conf.d/ COPY docker/prefmon_cron.sh /usr/local/bin/prefmon_cron.sh COPY docker/templates/configuration.ini.tmpl /tmp/ COPY docker/docker-entrypoint.sh /usr/local/bin/entrypoint.sh diff --git a/docker/application.ini b/docker/php7/application.ini similarity index 100% rename from docker/application.ini rename to docker/php7/application.ini -- GitLab From 5c60c90f0b4308a4c2e3be31b6a8f5e29d63f589 Mon Sep 17 00:00:00 2001 From: Ymage Date: Mon, 25 Nov 2019 11:02:26 +0100 Subject: [PATCH 09/12] Typo --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9a5fe46..d59ca6c 100644 --- a/README.md +++ b/README.md @@ -63,10 +63,10 @@ Ce logiciel est pensé pour être déployé sur un serveur comprenant : ### Configuration -1. Créez le fichier .env.ini à partir du modèle [.env.exemple](.env.exemple) en +1. Créez le fichier .env à partir du modèle [.env.exemple](.env.exemple) en indiquant les informations pour se connecter à la base de données et le répertoire où seront stockées les archives. -1. Créez une tâche régulière ('[crontab](https://github.com/dubiousjim/dcron/blob/master/crontab.markdown)') à partir du modèle [prefmon.cron.exemple](prefmon.cron.exemple) en ajustant la fréquence +1. Créez une tâche régulière ([crontab](https://github.com/dubiousjim/dcron/blob/master/crontab.markdown)) à partir du modèle [prefmon.cron.exemple](prefmon.cron.exemple) en ajustant la fréquence 1. Pour ajouter une démarche à surveiller, modifiez le fichier [sondages.ini](sondages.ini). -- GitLab From 2308ebc628aa0b51f1d3cbe7733e91125f285961 Mon Sep 17 00:00:00 2001 From: Ymage Date: Mon, 25 Nov 2019 13:53:39 +0100 Subject: [PATCH 10/12] Explicit more .env vars --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index d59ca6c..50f197e 100644 --- a/README.md +++ b/README.md @@ -63,9 +63,7 @@ Ce logiciel est pensé pour être déployé sur un serveur comprenant : ### Configuration -1. Créez le fichier .env à partir du modèle [.env.exemple](.env.exemple) en - indiquant les informations pour se connecter à la base de données et le répertoire où seront stockées les - archives. +1. Créez le fichier .env à partir du modèle [.env.exemple](.env.exemple) en indiquant les informations pour se connecter à la base de données, les informations pour le proxy `NETWORK_PROXY` ou des paramètres particuliers concernant les sondages `SONDAGE_PARAMS` 1. Créez une tâche régulière ([crontab](https://github.com/dubiousjim/dcron/blob/master/crontab.markdown)) à partir du modèle [prefmon.cron.exemple](prefmon.cron.exemple) en ajustant la fréquence 1. Pour ajouter une démarche à surveiller, modifiez le fichier [sondages.ini](sondages.ini). -- GitLab From 9d6bb42d41b0daac9165e7b7f060b2d9d47d2ebb Mon Sep 17 00:00:00 2001 From: Ymage Date: Tue, 26 Nov 2019 10:20:19 +0100 Subject: [PATCH 11/12] Restore configuration.ini to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 172b905..046e394 100644 --- a/.gitignore +++ b/.gitignore @@ -4,5 +4,6 @@ archives/ db/ logs/ +configuration.ini .env prefmon.cron \ No newline at end of file -- GitLab From 9ca0454d2fe2866fa724c43afa9b75afcdf01e55 Mon Sep 17 00:00:00 2001 From: Ymage Date: Tue, 26 Nov 2019 10:46:32 +0100 Subject: [PATCH 12/12] Remove useless php7 extension Move Dockerfile in docker/ Cleanup Dockerfile --- docker-compose.yml | 1 + Dockerfile => docker/Dockerfile | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) rename Dockerfile => docker/Dockerfile (87%) diff --git a/docker-compose.yml b/docker-compose.yml index 829acc9..c1c68f8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,6 +19,7 @@ services: prefmon: build: context: . + dockerfile: docker/Dockerfile restart: unless-stopped depends_on: - prefmondb diff --git a/Dockerfile b/docker/Dockerfile similarity index 87% rename from Dockerfile rename to docker/Dockerfile index a4e54ab..26753ff 100644 --- a/Dockerfile +++ b/docker/Dockerfile @@ -23,7 +23,6 @@ RUN apk add --no-cache --update \ php7-openssl \ php7-pdo_mysql \ php7-posix \ - php7-session \ php7-simplexml \ php7-xml \ php7-xmlreader \ @@ -40,8 +39,6 @@ WORKDIR /var/app COPY *.php ./ -# set recommended PHP.ini settings -# see https://secure.php.net/manual/en/opcache.installation.php RUN chmod 0755 /usr/local/bin/* CMD [ "entrypoint.sh" ] -- GitLab