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.
AddHandler
und Action
, um das CGI-Skript pandoc-handler
aufzurufen, wenn die im URL-Pfad angegebene Datei die Erweiterung md
hat.
--SetEnv ist die im nächsten Abschnitt erläuterte Remote-Verzeichnisspezifikation.Im Basis-Image "httpd: 2.4" war die URL "/ cgi-bin" zuvor dem Skriptausführungsverzeichnis "/ usr / local / apache2 / cgi-bin" zugeordnet. Verwenden Sie diese.
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.
PATH_INFO
übergeben.Akquisitionsbeispiel:
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.
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.
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.
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.
Written 2020/09/22
Recommended Posts