[Partie 1] Création d'un conteneur Docker qui fournit Markdown en HTML avec Apache / Pandoc

introduction

J'ai créé un conteneur Docker qui intègre Apache et Pandoc, je vais donc partager mon expérience.

Vous pouvez utiliser Pandoc pour convertir Markdown en HTML ou PDF. Vous pouvez convertir dynamiquement Markdown en HTML en l'incorporant dans Apache. Le fait de placer le site Web ainsi créé dans le conteneur Docker facilite sa création et sa distribution. Par exemple, vous pouvez étendre la plage d'utilisation en vous inscrivant au service de conteneur d'Amazon AWS.

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).

Pandoc

Pour convertir Markdown en HTML à l'aide du convertisseur Pandoc sur votre PC local (à l'aide de Windows WSL, par exemple):

$ ls
 test.md
$ cat test.md
 # test.md
 Hello **Wonderful** World.
$ pandoc test.md > test.html
$ ls
 test.md
 test.html
$ cat test.html
 <h1 id="test.md">test.md</h1>
 <p>Hello <strong>Wonderful</strong> World.</p>
$

Apache

Si Apache exécute Pandoc lorsque l'extension de fichier Markdown md est référencée, une conversion automatique en HTML peut être réalisée. Il est facile d'utiliser le mécanisme de filtrage externe d'Apache. Si vous définissez ce qui suit dans Apache, le filtre spécifié sera exécuté lorsque le fichier Markdown est référencé. Ici, il est nommé pandoc-filter.

[local.conf]

LoadModule ext_filter_module modules/mod_ext_filter.so

ExtFilterDefine pandoc-filter \
        mode=output intype=text/markdown outtype=text/html \
        cmd="/usr/local/apache2/pandoc-filter"

<Directory /usr/local/apache2/htdocs>
        SetOutputFilter pandoc-filter
        AddType text/markdown .md
</Directory>

Je vais expliquer.

--Chargez ext_filter_module pour rendre les filtres externes disponibles avec LoadModule. --Spécifiez le type MIME et le chemin de commande que le filtre cible avec ExtFilterDefine.

Filtre Apache

J'ai créé un filtre Apache qui appelle Pandoc. Un script shell Bash qui appelle Pandoc à partir de la source Markdown est passé comme entrée standard et sort le HTML converti en sortie standard.

[pandoc-filter]

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

Supplément.

Création de Docker

Créez un conteneur Docker qui intègre le fichier de configuration Apache et le script de filtre ci-dessus.

$ ls
 Dockerfile
 usr-local-apache2/
$ ls usr-local-apache2
 local.conf
 pandoc-filter
$ cat Dockerfile
 FROM httpd:2.4
 RUN apt-get update && apt-get install -y pandoc
 COPY ./usr-local-apache2 /usr/local/apache2/
 RUN echo 'Include local.conf' >> /usr/local/apache2/conf/httpd.conf
$ docker build -t pandoc:test .

Je vais expliquer dans l'ordre.

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 \
	--mount type=bind,src=/var/docker/pandoc/htdocs,dst=/usr/local/apache2/htdocs,ro \
	pandoc:test

Je vais expliquer dans l'ordre.

-- - detach est une spécification pour exécuter le conteneur en arrière-plan (en tant que démon). --Connectez le port de la machine hôte et le port utilisé dans le conteneur afin qu'il soit accessible de l'extérieur avec --publish. ---- mount lie / usr / local / apache2 / htdocs dans le répertoire de documents dans le conteneur au répertoire du côté hôte. Sinon, vous devrez à chaque fois ajouter des fichiers au conteneur.

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

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/21

Recommended Posts

[Partie 1] Création d'un conteneur Docker qui fournit Markdown en HTML avec Apache / Pandoc
[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
[Partie 2] Création d'un conteneur Docker qui fournit Markdown au format HTML dans la version Apache / Pandoc-remote
Création d'un environnement Java léger qui s'exécute sur Docker
Commencer par installer Docker sur EC2 et exécuter Yellowfin dans un conteneur
Création d'un environnement de développement pour les applications Web Java avec Docker pour Mac Part1
Création d'une classe de matrice dans Java Partie 1
Comment démarrer un conteneur Docker avec un volume monté dans un fichier de commandes
Une histoire sur une erreur lors de la migration dans docker PHP Laravel
[Note] Créez un environnement Python3 avec Docker dans EC2
Création d'un environnement Java léger qui s'exécute sur Docker
Exécutez PHP-FPM avec OPcache activé dans un conteneur en lecture seule
[Docker] Supprimer uniquement le volume associé à un conteneur spécifique
Créez un conteneur qui formate automatiquement le code Docker x Laravel
Je ne peux plus me connecter à une VM avec un conteneur Docker pouvant se connecter via SSH
Créons un conteneur Docker qui peut SSH à la configuration minimale de CentOS 8