Bereitstellen einer Clojure-Webanwendung unter FreeBSD 10.2

Einführung

Das Interesse an funktionaler Programmierung und insbesondere an der Programmierung für das Web in Clojure ist weiterhin gestiegen. In vielen Lernprogrammen zum Erstellen grundlegender Anwendungen werden häufig Details zur Bereitstellung übersehen. In diesem Artikel erfahren Sie, wie Sie eine Clojure-Webanwendung auf einem FreeBSD 10.2-Droplet bereitstellen.

Im Einzelnen erstellen wir eine Clojure-Beispielanwendung, verpacken sie für die Verwendung in der Produktion und richten die Clojure-Anwendungsumgebung auf dem Server mit Supervisor ein, um die Anwendung auszuführen, und Nginx, um Anforderungen an sie zu richten.

Voraussetzungen

Bevor Sie mit diesem Handbuch beginnen, benötigen Sie Folgendes:

Schritt 1 - Erstellen und Verpacken einer Beispiel-Clojure-App

Der allererste Schritt besteht darin, "+ git +" zu verwenden, um das zu implementierende Clojure-Beispielprojekt abzurufen.

Aktualisieren Sie zuerst Ihre Pakete und installieren Sie "+ git +" auf dem Server.

sudo pkg update
sudo pkg install git

Klonen Sie als Nächstes das Beispielprojektrepository.

git clone https://github.com/do-community/do-clojure-web.git

Dieses Repository ist das Endergebnis des Lernprogramms Clojure Basic Web Development. Wenn Sie möchten, können Sie diesem Tutorial auch selbst folgen, anstatt dieses Repository zu klonen.

Clojure nutzt die JVM, um den Code auszuführen. Sie müssen daher Ihr Projekt kompilieren, um es auszuführen. Mit Leiningen, einem Tool für das Abhängigkeitsmanagement und die Build-Automatisierung für Clojure-Apps, ist dies ganz einfach.

Installieren wir jetzt Leiningen.

sudo pkg install leiningen

Sie werden eine Ausgabe bemerken, die angibt, dass für Java einige spezielle Mount-Punkte für das Dateisystem erforderlich sind. Wir werden uns im nächsten Schritt darum kümmern.

Jetzt können Sie Ihr Projekt kompilieren, um es mit + lein + auf dem Server auszuführen.

cd ~/do-clojure-web
lein uberjar

Schritt 2 - Einrichten der Clojure-Anwendungsumgebung

Wir benötigen drei Hauptkomponenten, damit diese Anwendung ordnungsgemäß funktioniert: Java, Supervisor und Nginx. Wir haben Java im Rahmen der Installation von Leiningen im letzten Schritt installiert. Als Nächstes installieren wir Supervisor und Nginx.

sudo pkg install nginx py27-supervisor

Java erfordert einige spezielle Dateisystem-Mount-Punkte, wie in Schritt 1 erwähnt. Führen Sie diese beiden Befehle aus, um sicherzustellen, dass sie bereitgestellt sind.

sudo mount -t fdescfs fdesc /dev/fd
sudo mount -t procfs proc /proc

Anstatt diese Befehle bei jedem Systemstart auszuführen, wird dies automatisch ausgeführt. Bearbeiten Sie die Datei "+ / etc / fstab " mit " ee +" oder Ihrem bevorzugten Texteditor.

sudo ee /etc/fstab

Stellen Sie sicher, dass das Ende Ihrer + / etc / fstab + - Datei die folgenden zwei Einträge enthält.

/ etc / fstab

fdesc   /dev/fd     fdescfs     rw  0   0
proc    /proc       procfs      rw  0   0

Sie benötigen auch einen Speicherort für Ihre Clojure-Webanwendung und die zugehörigen Protokolldateien. Erstellen Sie als Nächstes diese Verzeichnisstruktur.

sudo mkdir -p /www/data/do-clojure-web/app/db/ /www/logs

Jetzt können Sie Ihre Clojure-Anwendungsdatei und die Datenbankdatei in die von Ihnen erstellten Verzeichnisse verschieben.

sudo cp ~/do-clojure-web/target/do-clojure-web-0.1.0-standalone.jar /www/data/do-clojure-web/app/
sudo cp ~/do-clojure-web/db/do-clojure-web.h2.db /www/data/do-clojure-web/app/db/

Die Anwendung wird als Benutzer * www * auf dem System ausgeführt, damit sie in unsere integrierte Datenbank schreiben kann. Setzen Sie den Eigentümer des Anwendungspfads auf * www *.

sudo chown -R www /www/data/do-clojure-web/

Wechseln Sie in das Clojure-Anwendungsverzeichnis.

cd /www/data/do-clojure-web/app/

In einer Produktionsumgebung ändert sich die Versionsnummer der Anwendung mit jedem Update. Sie müssen Ihre Systemkonfiguration nicht jedes Mal aktualisieren, wenn dies geschieht. Um dies zu verhindern, erstellen Sie einen Symlink zur aktuell ausgeführten Version der Anwendung. In den nächsten Schritten verweisen Sie auf den Symlink.

sudo ln -s do-clojure-web-0.1.0-standalone.jar do-clojure-web.jar

Die Anwendung ist derzeit so konfiguriert, dass nur über localhost darauf zugegriffen werden kann. Sie können jedoch sicherstellen, dass sie fehlerfrei gestartet wird. Tun Sie das, bevor Sie fortfahren.

sudo java -jar do-clojure-web.jar

Wenn alles richtig funktioniert, sollten Sie eine Ausgabe ähnlich der folgenden erhalten:

Ausgabe

. . .
2015-06-12 04:30:17.882:INFO:oejs.Server:jetty-7.x.y-SNAPSHOT
2015-06-12 04:30:17.995:INFO:oejs.AbstractConnector:Started [email protected]:5000

Fahren Sie fort und beenden Sie die Anwendung, indem Sie die Tastenkombination "+ STRG + C +" drücken.

Schritt 3 - Konfigurieren von Supervisor zum Ausführen der Clojure-App

Es gibt einige Optionen zum Verwalten Ihrer Anwendung als Dienst. Für einen Service, der wirklich skaliert werden muss, empfehle ich die uWSGI documentation zum Ausführen einer Clojure-Anwendung.

Erstellen und bearbeiten Sie die Datei + / usr / local / etc / supervisord.conf +.

sudo ee /usr/local/etc/supervisord.conf

Fügen Sie diese Konfiguration ganz unten in die Datei ein und speichern Sie sie.

/usr/local/etc/supervisord.conf

[program:do-clojure-web]
command=/usr/local/bin/java -jar do-clojure-web.jar
directory=/www/data/do-clojure-web/app
user=www
autostart=true
autorestart=true
startretries=3
redirect_stderr=true
stdout_logfile=/www/logs/do-clojure-web.app.log

Diese Konfiguration ist ziemlich einfach. Der Supervisor-Daemon (Dienst) führt unsere Anwendung aus dem Verzeichnis + / www / data / do-clojure-web / app / + aus. Außerdem wird sichergestellt, dass Sie sich unter "+ / www / logs / do-clojure-web.app.log +" anmelden und versuchen, die Anwendung neu zu starten, falls sie abstürzt.

Schritt 4 - Konfigurieren von Nginx als Proxyserver

Da die Clojure-Webanwendung nur Verbindungen von localhost auf Port 5000 akzeptiert, müssen wir einen Webserver wie Nginx davor stellen, um externen Zugriff zu ermöglichen. Dies ist auch sehr praktisch, wenn Sie statische Assets bereitstellen, während Sie Ihre Anwendung erweitern.

Bearbeiten Sie die Datei + / usr / local / etc / nginx / nginx.conf +.

sudo ee /usr/local/etc/nginx/nginx.conf

Fügen Sie zuerst den rot unterstrichenen "+ upstream" -Block über dem "+ server +" -Block hinzu, der bereits in der Datei enthalten ist.

/usr/local/etc/nginx/nginx.conf

. . .
   #gzip  on;






   server {
           listen       80;
           server_name  localhost;
. . .

Suchen Sie nun den Block, der mit "+ location / " beginnt (innerhalb des " server " - Blocks). Kommentieren Sie alle darin enthaltenen Zeilen aus, indem Sie am Anfang jeder Zeile ein " # " und den neuen rot hervorgehobenen " location / +" - Abschnitt einfügen. Dies weist Nginx an, wie ein normaler Webserver auf Port 80 zu lauschen und Ihre Anforderungen an die Clojure-Anwendung weiterzuleiten.

/usr/local/etc/nginx/nginx.conf

. . .
   server {
       listen       80;
       server_name  localhost;

       #charset koi8-r;

       #access_log  logs/host.access.log  main;

       location / {
           root   /usr/local/www/nginx;
           index  index.html index.htm;















       #error_page  404              /404.html;
. . .

Speichern und schließen Sie die Datei.

Schritt 5 - Starten von Diensten und Testen des Zugriffs

Es ist Zeit, alle Teile in Betrieb zu nehmen und sicherzustellen, dass alles richtig funktioniert. Der erste Schritt besteht darin, sicherzustellen, dass Ihre Dienste so konfiguriert sind, dass sie beim Booten gestartet werden.

Bearbeiten Sie die Datei + / etc / rc.conf +.

sudo ee /etc/rc.conf

Fügen Sie diese beiden Zeilen am Ende der Datei + / etc / rc.conf + hinzu.

/usr/local/etc/rc.conf

nginx_enable="YES"
supervisord_enable="YES"

Speichern und schließen Sie die Datei.

Starten Sie den Supervisor-Daemon, damit Ihre Clojure-Anwendung gestartet wird.

sudo service supervisord start

Warten Sie ungefähr 30 Sekunden, bis es gestartet ist, und starten Sie dann den Front-End-Proxy des Nginx-Webservers.

sudo service nginx start

Besuchen Sie "+ http: // +" in Ihrem Browser. Sie sollten das Beispiel für das Laden der Clojure-Anwendungssite sehen.

Wenn Sie nur eine Standard-Nginx-Seite erhalten, versuchen Sie, Supervisor mit "+ sudo service supervisord restart " neu zu starten, warten Sie 30 Sekunden und starten Sie Nginx mit " sudo service nginx restart +" neu.

Klicken Sie nach dem Laden der Site oben auf dem Bildschirm auf den Link * Standort hinzufügen * und versuchen Sie, einige numerische Koordinaten hinzuzufügen, um sicherzustellen, dass Ihre Datenbankzugriffsberechtigungen korrekt sind. Beispielsweise können Sie 1 für * x value * und 2 für * y value * hinzufügen. Dies sollte Sie zu einer Seite bringen, die sagt:

Add-Location-Ausgabe

Added [1, 2] (id: 1) to the db. See for yourself.

Wenn Sie oben auf dem Bildschirm auf den Link * Alle Standorte anzeigen * klicken, sollte eine Tabelle mit Ihrem neuen Eintrag angezeigt werden.

Fazit

Sie haben gerade eine Clojure-Anwendung mit Leiningen, Supervisor und Nginx bereitgestellt! Es gibt viel zu lernen rund um das Thema der Bereitstellung auch der einfachsten Websites und Anwendungen. Der nächste Schritt ist die Bereitstellung Ihrer benutzerdefinierten Anwendung anstelle der in diesem Lernprogramm verwendeten Demoanwendung.