[Partie 2] Création d'un conteneur Docker qui fournit Markdown au format HTML dans la version Apache / Pandoc-remote

introduction

L'autre jour, j'ai présenté un conteneur Docker qui intègre Apache et Pandoc → Version locale

C'était une méthode pour placer le fichier source dans le conteneur ou dans le répertoire de l'hôte où le conteneur s'exécute. Au lieu de cela, j'ai créé un conteneur (version distante) qui peut être utilisé lorsque la ressource Web contenant la source Markdown que je souhaite fournir est en dehors de l'hôte du conteneur, c'est-à-dire à distance, donc je la publierai.

Les fichiers Docker et autres sources sont publiés sur github, et les images Docker créées sont publiées sur Docker Hub (voir fin).

Ci-dessous, je vais omettre les sujets communs avec la version locale précédente.

Apache

Dans le cas de la version locale, le contenu de la source Markdown (extension md) qui existe réellement dans le répertoire sous Apache est passé à l'entrée standard du filtre. Cependant, cette méthode ne peut pas être utilisée si le fichier Markdown n'existe pas dans le répertoire local sous Apache.

Apache dispose d'un mécanisme appelé gestionnaire d'actions qui appelle un script CGI pré-spécifié lorsqu'il y a une demande de chemin d'URL avec une extension spécifique. Le chemin demandé n'a pas besoin d'être dans votre répertoire local.

À l'aide de ce mécanisme, j'ai créé un gestionnaire qui lit la source Markdown à partir d'un serveur Web autre que le conteneur et la convertit en HTML.

Spécifiez un gestionnaire d'actions nommé pandoc-handler dans la configuration Apache suivante.

[local.conf]

LoadModule cgid_module modules/mod_cgid.so
LoadModule actions_module modules/mod_actions.so

AddHandler markdown-text .md
Action markdown-text /cgi-bin/pandoc-handler virtual

SetEnv REMOTE_DIR https://elsewhere.com/docker

Je vais expliquer.

--Charger mod_actions, qui rend les gestionnaires d'actions disponibles dans LoadModule, et mod_cgid, qui rend les scripts CGI disponibles. --Définissez les directives AddHandler et Action pour appeler le script CGI pandoc-handler lorsque le fichier spécifié dans le chemin de l'URL a l'extension md. --SetEnv est la spécification du répertoire distant expliquée dans la section suivante.

Dans l'image de base httpd: 2.4, l'URL '/ cgi-bin' est précédemment associée au répertoire d'exécution du script '/ usr / local / apache2 / cgi-bin', utilisez donc ceci.

Gestionnaire Apache

J'ai créé un gestionnaire Apache qui appelle Pandoc. Il s'agit d'un script shell Bash qui convertit la source Markdown obtenue d'Apache en fonction du chemin d'URL passé dans la variable d'environnement PATH_INFO avec Pandoc et génère le HTML vers la sortie standard.

Selon l'application, il existe différentes manières de lire (ou de générer) la source Markdown à partir du chemin URL demandé. Lire à partir d'un service de fichiers cloud, lire à partir d'une base de données, obtenir à partir d'un référentiel git distant, obtenir avec sftp, et plus encore.

Cet exemple lit le fichier source Markdown à partir du répertoire distant vers lequel pointe l'URL fixe. Utilisez la commande curl pour lire le fichier Markdown à partir de la variable d'environnement REMOTE_DIR définie dans la section précédente.

[pandoc-handler]

 #!/bin/bash
BASENAME=$(basename -s .md $PATH_INFO)
curl -s $REMOTE_DIR$PATH_INFO | /usr/bin/pandoc -f gfm -t html5 -c "/pandoc-gfm.css" \
	-T "Converted" -M title=${BASENAME}

Je vais expliquer.

Exemple d'acquisition:

Création de Docker

Créez un conteneur Docker qui incorpore le fichier de configuration Apache et le script de gestionnaire ci-dessus.

$ ls
 Dockerfile
 usr-local-apache2/
$ ls usr-local-apache2
 local.conf
 pandoc-handler
$ cat Dockerfile
 FROM httpd:2.4
 RUN apt-get update && apt-get install -y \
  pandoc \
  curl \
  ca-certificates
 COPY ./usr-local-apache2 /usr/local/apache2/
 RUN echo 'Include local.conf' >> /usr/local/apache2/conf/httpd.conf
$ docker build -t pandoc:remote .

Comme précédemment, récupérez l'image de base httpd comprenant Linux et Apache depuis le hub Docker officiel dans FROM. Contrairement à la dernière fois, RUN obtient «curl» en plus de «pandoc». ca-certificate était nécessaire pour utiliser SSL avec curl. Comme précédemment, copiez le fichier de configuration Apache et le gestionnaire d'actions (script CGI) à l'emplacement approprié dans le conteneur avec COPY, et exécutez la commande de construction Docker.

Exécution du conteneur Docker

Une fois que vous avez un conteneur Docker, essayez de l'exécuter sur l'hôte créé.

$ docker run --detach -publish 8080:80 pandoc:remote

Contrairement au filtre précédent, il n'utilise pas le répertoire local, il n'y a donc pas d'option --mount. Assignez le port avec l'option --public comme auparavant.

tester

Tout d'abord depuis la machine hôte exécutant le conteneur:

$ curl localhost:8080/test.md

Ensuite, accédez-y avec un navigateur depuis l'extérieur de la machine hôte.

http://example.com:8080/test.md

Si le fichier Markdown qui aurait dû être placé à 'https: //elsewhere.com/docker/test.md' est affiché en HTML, il réussit.

Ensuite, j'ai essayé d'exécuter ce conteneur Docker avec ECS (Elastic Container Service), l'un des services de conteneur d'Amazon AWS. La prochaine fois, j'écrirai les détails.


environnement d'utilisation

Lien de référence

La source de Dockerfile, du fichier de configuration Apache et du filtre Apache est publiée sur github. Vous pouvez créer un conteneur par git clone et docker build.

L'image créée peut également être obtenue à partir de Docker Hub.

Page relative à Yokohama Kobunsha

Written 2020/09/22

Recommended Posts

[Partie 2] Création d'un conteneur Docker qui fournit Markdown au format HTML dans la version Apache / Pandoc-remote
[Partie 1] Création d'un conteneur Docker qui fournit Markdown en HTML avec Apache / Pandoc
[Participation] Création d'un conteneur Docker qui fournit Markdown au format HTML dans Apache / Pandoc - conteneur AWS
Création d'une classe de matrice dans Java Partie 1