[Teil 2] Erstellen eines Docker-Containers, der Markdown als HTML in der Apache / Pandoc-Remote-Version liefert

Einführung

Neulich habe ich einen Docker-Container eingeführt, der Apache und Pandoc enthält → Lokale Version

Es war eine Methode, um die Quelldatei in den Container oder in das Verzeichnis des Hosts zu stellen, auf dem der Container ausgeführt wird. Stattdessen habe ich einen Container (Remote-Version) erstellt, der verwendet werden kann, wenn sich die Webressource mit der Markdown-Quelle, die ich bereitstellen möchte, außerhalb des Container-Hosts befindet, dh remote, sodass ich sie veröffentlichen werde.

Docker-Dateien und andere Quellen werden auf github veröffentlicht, und erstellte Docker-Images werden auf Docker Hub veröffentlicht (siehe Ende).

Im Folgenden werde ich die allgemeinen Angelegenheiten mit der vorherigen lokalen Version weglassen.

Apache

Bei der lokalen Version wird der Inhalt der Markdown-Quelle (Erweiterung md), die tatsächlich im Verzeichnis unter Apache vorhanden ist, an die Standardeingabe des Filters übergeben. Diese Methode kann jedoch nicht verwendet werden, wenn die Markdown-Datei nicht im lokalen Verzeichnis unter Apache vorhanden ist.

Apache verfügt über einen Mechanismus, der als Aktionshandler bezeichnet wird und ein vordefiniertes CGI-Skript aufruft, wenn eine Anforderung für einen URL-Pfad mit einer bestimmten Erweiterung vorliegt. Der angeforderte Pfad muss sich nicht in Ihrem lokalen Verzeichnis befinden.

Mit diesem Mechanismus habe ich einen Handler erstellt, der die Markdown-Quelle von einem anderen Webserver als dem Container liest und in HTML konvertiert.

Geben Sie in der folgenden Apache-Konfiguration einen Aktionshandler mit dem Namen "pandoc-handler" an.

[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

Ich werde erklären.

--Laden Sie mod_actions, um Aktionshandler in LoadModule verfügbar zu machen, und mod_cgid, um CGI-Skripte verfügbar zu machen.

Im Basis-Image "httpd: 2.4" war die URL "/ cgi-bin" zuvor dem Skriptausführungsverzeichnis "/ usr / local / apache2 / cgi-bin" zugeordnet. Verwenden Sie diese.

Apache-Handler

Ich habe einen Apache-Handler erstellt, der Pandoc aufruft. Dies ist ein Bash-Shell-Skript, das die von Apache erhaltene Markdown-Quelle gemäß dem in der Umgebungsvariablen PATH_INFO mit Pandoc übergebenen URL-Pfad konvertiert und HTML in die Standardausgabe ausgibt.

Je nach Anwendung gibt es verschiedene Möglichkeiten, die Markdown-Quelle aus dem angeforderten URL-Pfad zu lesen (oder sogar zu generieren). Lesen Sie von einem Cloud-Dateidienst, lesen Sie von einer Datenbank, holen Sie sich von einem Remote-Git-Repository, erhalten Sie mit SFTP und mehr.

In diesem Beispiel wird die Markdown-Quelldatei aus dem Remote-Verzeichnis gelesen, auf das die feste URL verweist. Verwenden Sie den Befehl curl, um die Markdown-Datei aus der im vorherigen Abschnitt festgelegten Umgebungsvariablen REMOTE_DIR zu lesen.

[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}

Ich werde erklären.

Akquisitionsbeispiel:

Docker-Erstellung

Erstellen Sie einen Docker-Container, der die oben genannte Apache-Konfigurationsdatei und das Handler-Skript enthält.

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

Holen Sie sich wie zuvor das Basis-Image "httpd" einschließlich Linux und Apache vom offiziellen Docker-Hub in FROM. Im Gegensatz zum letzten Mal bekommt RUN zusätzlich zu "Pandoc" "Curl". Für die Verwendung von SSL mit Curl wurde ein "Ca-Zertifikat" benötigt. Kopieren Sie wie zuvor die Apache-Konfigurationsdatei und den Aktionshandler (CGI-Skript) mit COPY an den entsprechenden Speicherort im Container und führen Sie den Docker-Build-Befehl aus.

Docker-Container-Ausführung

Wenn Sie einen Docker-Container haben, versuchen Sie, ihn auf dem erstellten Host auszuführen.

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

Im Gegensatz zum vorherigen Filter wird das lokale Verzeichnis nicht verwendet, daher gibt es keine Option --mount. Weisen Sie den Port wie zuvor mit der Option "--public" zu.

Prüfung

Zuerst auf dem Hostcomputer, auf dem der Container ausgeführt wird:

$ curl localhost:8080/test.md

Greifen Sie dann mit einem Browser von außerhalb des Host-Computers darauf zu.

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

Wenn die Markdown-Datei, die unter "http: //elsewhere.com/docker/test.md" abgelegt werden sollte, in HTML angezeigt wird, ist sie erfolgreich.

Als Nächstes habe ich versucht, diesen Docker-Container mit ECS (Elastic Container Service) auszuführen, einem der Containerservices von Amazon AWS. Nächstes Mal werde ich die Details schreiben.


Nutzungsumgebung

Referenzlink

Die Quelle von Dockerfile, Apache-Konfigurationsdatei und Apache-Filter wird auf github veröffentlicht. Sie können einen Container mit Git Clone und Docker Build erstellen.

Das erstellte Image kann auch von Docker Hub abgerufen werden.

Verwandte Seite von Yokohama Kobunsha

Written 2020/09/22

Recommended Posts

[Teil 2] Erstellen eines Docker-Containers, der Markdown als HTML in der Apache / Pandoc-Remote-Version liefert
[Teil 1] Erstellen eines Docker-Containers, der mit Apache / Pandoc Markdown in HTML liefert
[Teilnahme] Erstellen eines Docker-Containers, der Markdown als HTML in Apache / Pandoc - AWS-Container liefert
Erstellen einer Matrixklasse in Java Teil 1