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
.
Directory
consiste à exécuter le filtre lorsqu'un fichier avec l'extension md
est référencé dans le répertoire spécifié.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.
-f
est le format source de la conversion, -t
est le format de destination de la conversion, -c
est l'emplacement de la feuille de style,
Spécifiez le titre HTML à afficher avec -T
et -M title =
.
--Pandoc lit l'entrée et les sorties standard vers la sortie standard si rien n'est spécifié.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.
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.
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
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.
Written 2020/09/21
Recommended Posts