Bereitstellen einer Clojure-Webanwendung unter Ubuntu 14.04

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. Dieser Artikel zeigt Ihnen, wie Sie eine Clojure-Webanwendung auf einem Ubuntu 14.04-Droplet bereitstellen.

Im Einzelnen erstellen wir eine Clojure-Beispielanwendung, verpacken sie für die Produktionszwecke und richten die Clojure-App-Umgebung auf dem Server mit Supervisor ein, um die App 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 apt-get update
sudo apt-get 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. Es gibt ein paar Schritte, um Leiningen einzurichten.

Installieren Sie zunächst Java.

sudo apt-get install openjdk-7-jre-headless

Laden Sie als nächstes das Leiningen-Installationsskript herunter. Es gibt ein Ubuntu-Paket für Leiningen, aber es ist sehr veraltet.

sudo curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein -o /usr/local/bin/lein

Stellen Sie die Berechtigungen so ein, dass jeder Benutzer das von Leiningen bereitgestellte Dienstprogramm "+ lein +" verwenden kann.

sudo chmod a+x /usr/local/bin/lein

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. Im letzten Schritt haben wir Java installiert. Als Nächstes installieren wir Supervisor und Nginx.

sudo apt-get install nginx supervisor

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 /var/www/do-clojure-web/app/db /var/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 /var/www/do-clojure-web/app/
sudo cp ~/do-clojure-web/db/do-clojure-web.h2.db /var/www/do-clojure-web/app/db/

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

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

Wechseln Sie in das Clojure-Anwendungsverzeichnis.

cd /var/www/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 korrekt 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. Die Option, die Sie hier verwenden, heißt Supervisor; Es ist einfacher zu verwalten und vielseitiger als ein einfaches Skript. Informationen zu einem Dienst, der wirklich skaliert werden muss, finden Sie in der uWSGI documentation zum Ausführen einer Clojure-Anwendung.

Erstellen und bearbeiten Sie die Datei + / etc / supervisor / conf.d / do-clojure-web.conf +.

sudo nano /etc/supervisor/conf.d/do-clojure-web.conf

Fügen Sie diese Konfiguration zur Datei hinzu und speichern Sie sie.

/etc/supervisor/conf.d/do-clojure-web.conf

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

Diese Konfiguration ist ziemlich einfach. Der Supervisor-Daemon (Dienst) führt unsere Anwendung aus dem Verzeichnis + / var / www / do-clojure-web / app + aus. Außerdem wird sichergestellt, dass Sie sich unter + / var / 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 möchten, während Sie Ihre Anwendung erweitern.

Bearbeiten Sie die Datei + / etc / nginx / sites-available / default +.

sudo nano /etc/nginx/sites-available/default

Fügen Sie der Datei den rot hervorgehobenen Abschnitt hinzu. Dies definiert unser Backend für eine einfache Referenz im nächsten Konfigurationsabschnitt.

/ etc / nginx / sites-available / default

. . .
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##




server {
   listen 80 default_server;
. . .

Suchen Sie nun den Block, der mit "+ location / " beginnt. Kommentieren Sie alle darin enthaltenen Zeilen aus, indem Sie am Anfang jeder Zeile ein " # +" hinzufügen.

/ etc / nginx / sites-available / default

. . .
       # Make site accessible from http://localhost/
       server_name localhost;


        location / {
               # First attempt to serve request as file, then
               # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
               # Uncomment to enable naxsi on this location
               # include /etc/nginx/naxsi.rules
        }

       # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
. . .

Fügen Sie dann direkt darunter den folgenden Abschnitt hinzu, in dem Nginx anweist, wie ein normaler Webserver auf Port 80 zu lauschen und Ihre Anforderungen an die Clojure-Anwendung weiterzuleiten.

/ etc / nginx / sites-available / default

. . .

       # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests














       #location /RequestDenied {
       #       proxy_pass http://127.0.0.1:8080;
       #}

Schritt 5 - Starten von Diensten und Testen des Zugriffs

Es ist Zeit, alle Teile in Betrieb zu nehmen und sicherzustellen, dass alles richtig funktioniert. Starten Sie den Supervisor-Daemon, damit Ihre Clojure-Anwendung gestartet wird.

sudo service supervisor 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 supervisor 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.