Wie man eine Clojure-Webanwendung mit Nginx auf Ubuntu 20.04 aufsetzt
Clojure ist eine moderne, dynamische und leistungsfähige Programmiersprache auf der Java-Plattform. Sie basiert auf der Programmiersprache LISP und verfügt über Compiler, die es ermöglichen, sowohl auf der Java- als auch auf der .Net-Laufzeitumgebung ausgeführt zu werden. Clojure hilft Ihnen, Systeme von Grund auf neu zu erstellen, ohne Java-Code direkt zu berühren. Gegenwärtig wird es von vielen großen Unternehmen eingesetzt, darunter Walmart und Puppet Lab.
In diesem Tutorial erklären wir Ihnen, wie Sie eine Clojure-Webanwendung unter Ubuntu 20.04 einsetzen können.
Voraussetzungen
- Ein Server, auf dem Ubuntu 20.04 läuft.
- Ein gültiger Domain-Name, der auf Ihre Server-IP zeigt.
- Der Server ist mit einem Root-Passwort konfiguriert.
Erste Schritte
Bevor Sie beginnen, wird empfohlen, Ihre Systempakete auf die neueste Version zu aktualisieren. Sie können sie mit dem folgenden Befehl aktualisieren:
apt-get update -y
Wenn alle Pakete aktualisiert sind, installieren Sie Java und andere erforderliche Pakete, indem Sie den folgenden Befehl ausführen:
apt-get install git curl default-jdk -y
Wenn alle Pakete installiert sind, überprüfen Sie die installierte Version von Java mit folgendem Befehl:
java -version
Sie sollten die folgende Ausgabe erhalten:
openjdk version "11.0.9.1" 2020-11-04 OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04) OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)
Wenn Sie fertig sind, können Sie mit dem nächsten Schritt fortfahren.
Nginx und Supervisor installieren
Als nächstes müssen Sie den Nginx-Webserver und Supervisor auf Ihrem System installieren. Nginx ist ein Webserver, der zum Hosten von Anwendungen im Internet verwendet wird. Supervisor ist ein Client/Server-System, das es seinen Benutzern ermöglicht, eine Reihe von Prozessen auf Linux-basierten Betriebssystemen zu überwachen und zu steuern.
Sie können beide Pakete mit dem folgenden Befehl installieren:
apt-get install nginx supervisor -y
Sobald beide Pakete installiert sind, können Sie mit dem nächsten Schritt fortfahren.
Clojure App herunterladen
Zuerst müssen Sie die Clojure-Anwendung aus dem Git-Repository herunterladen. Sie können sie herunterladen, indem Sie den folgenden Befehl ausführen:
git clone https://github.com/do-community/do-clojure-web.git
Sobald der Download abgeschlossen ist, sollten Sie die folgende Ausgabe erhalten:
Cloning into 'do-clojure-web'... remote: Enumerating objects: 37, done. remote: Total 37 (delta 0), reused 0 (delta 0), pack-reused 37 Unpacking objects: 100% (37/37), 6.25 KiB | 399.00 KiB/s, done.
Als nächstes müssen Sie Leiningen auf Ihrem System installieren. Leiningen ist ein Tool zur Build-Automatisierung und Verwaltung von Abhängigkeiten, das zur Erstellung von Projekten verwendet wird, die in der Programmiersprache Clojure geschrieben wurden. Sie können das Binärpaket von Leiningen mit dem folgenden Befehl herunterladen:
curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein -o /usr/bin/lein
Sobald der Download abgeschlossen ist, setzen Sie die Ausführungserlaubnis mit dem folgenden Befehl:
chmod 755 /usr/bin/lein
Wechseln Sie dann das Verzeichnis zu Clojure und kompilieren Sie das Projekt mit dem folgenden Befehl:
cd do-clojure-web lein uberjar
Sobald das Projekt kompiliert ist, sollten Sie die folgende Ausgabe erhalten:
Retrieving commons-codec/commons-codec/1.6/commons-codec-1.6.jar from central Retrieving javax/servlet/servlet-api/2.5/servlet-api-2.5.jar from central Retrieving org/clojure/java.jdbc/0.2.3/java.jdbc-0.2.3.jar from central Retrieving com/h2database/h2/1.3.170/h2-1.3.170.jar from central Retrieving org/eclipse/jetty/jetty-server/7.6.13.v20130916/jetty-server-7.6.13.v20130916.jar from central Retrieving org/eclipse/jetty/orbit/javax.servlet/2.5.0.v201103041518/javax.servlet-2.5.0.v201103041518.jar from central Retrieving org/eclipse/jetty/jetty-continuation/7.6.13.v20130916/jetty-continuation-7.6.13.v20130916.jar from central Retrieving org/eclipse/jetty/jetty-http/7.6.13.v20130916/jetty-http-7.6.13.v20130916.jar from central Retrieving org/eclipse/jetty/jetty-io/7.6.13.v20130916/jetty-io-7.6.13.v20130916.jar from central Retrieving org/eclipse/jetty/jetty-util/7.6.13.v20130916/jetty-util-7.6.13.v20130916.jar from central Retrieving medley/medley/0.5.3/medley-0.5.3.jar from clojars Retrieving clout/clout/2.1.0/clout-2.1.0.jar from clojars Retrieving compojure/compojure/1.3.1/compojure-1.3.1.jar from clojars Retrieving ring/ring-core/1.3.2/ring-core-1.3.2.jar from clojars Retrieving instaparse/instaparse/1.3.4/instaparse-1.3.4.jar from clojars Retrieving crypto-random/crypto-random/1.2.0/crypto-random-1.2.0.jar from clojars Retrieving crypto-equality/crypto-equality/1.0.0/crypto-equality-1.0.0.jar from clojars Retrieving clj-time/clj-time/0.6.0/clj-time-0.6.0.jar from clojars Retrieving ring/ring-codec/1.0.0/ring-codec-1.0.0.jar from clojars Retrieving ring/ring-defaults/0.1.2/ring-defaults-0.1.2.jar from clojars Retrieving ring/ring-ssl/0.2.1/ring-ssl-0.2.1.jar from clojars Retrieving ring/ring-headers/0.1.1/ring-headers-0.1.1.jar from clojars Retrieving ring/ring-anti-forgery/1.0.0/ring-anti-forgery-1.0.0.jar from clojars Retrieving hiccup/hiccup/1.0.2/hiccup-1.0.2.jar from clojars Retrieving ring/ring-jetty-adapter/1.3.2/ring-jetty-adapter-1.3.2.jar from clojars Retrieving ring/ring-servlet/1.3.2/ring-servlet-1.3.2.jar from clojars Compiling do-clojure-web.handler Created /root/do-clojure-web/target/do-clojure-web-0.1.0.jar Created /root/do-clojure-web/target/do-clojure-web-0.1.0-standalone.jar
Sobald Sie fertig sind, können Sie mit dem nächsten Schritt fortfahren.
Verzeichnisstruktur für Clojure-Anwendung erstellen
Als nÃ?chstes mÃ?ssen Sie eine Verzeichnisstruktur fÃ?r die Clojure-Anwendung erstellen und die erforderlichen Dateien und Verzeichnisse an einem bestimmten Ort ablegen.
Erstellen Sie zunächst eine Verzeichnisstruktur mit dem folgenden Befehl:
mkdir -p /var/www/html/do-clojure-web/app/db
Als nächstes kopieren Sie Ihre Clojure-Anwendung und Ihre Datenbank mit folgendem Befehl in das entsprechende Verzeichnis:
cp /root/do-clojure-web/target/do-clojure-web-0.1.0-standalone.jar /var/www/html/do-clojure-web/app/ cp /root/do-clojure-web/db/do-clojure-web.h2.db /var/www/html/do-clojure-web/app/db/
Legen Sie dann mit dem folgenden Befehl die richtigen Berechtigungen und Eigentumsverhältnisse fest:
chown -R www-data:www-data /var/www/html/do-clojure-web/ chmod -R 775 /var/www/html/do-clojure-web/
Ändern Sie dann das Verzeichnis in die Clojure-Anwendung und erstellen Sie einen symbolischen Link Ihrer Clojure-Anwendung:
cd /var/www/html/do-clojure-web/app/ ln -s do-clojure-web-0.1.0-standalone.jar do-clojure-web.jar
Überprüfen Sie als nächstes, ob Ihre Anwendung funktioniert oder nicht, indem Sie den folgenden Befehl ausführen:
java -jar do-clojure-web.jar
Wenn alles in Ordnung ist, sollten Sie die folgende Ausgabe erhalten:
2020-11-25 10:19:51.456:INFO:oejs.Server:jetty-7.x.y-SNAPSHOT 2020-11-25 10:19:51.497:INFO:oejs.AbstractConnector:Started [email protected]:5000
Wenn Sie fertig sind, können Sie mit dem nächsten Schritt fortfahren.
Konfigurieren Sie den Supervisor für die Clojure-Anwendung
Es gibt mehrere Möglichkeiten, die Clojure-Anwendung als Dienst zu verwalten. In diesem Tutorial werden wir Supervisor für die Verwaltung der Clojure-Anwendung verwenden. Sie können ihn konfigurieren, indem Sie eine Datei im Supervisor-Konfigurationsverzeichnis erstellen:
nano /etc/supervisor/conf.d/do-clojure-web.conf
Fügen Sie die folgenden Zeilen hinzu:
[program:do-clojure-web] command=/usr/bin/java -jar do-clojure-web.jar directory=/var/www/html/do-clojure-web/app user=www-data autostart=true autorestart=true startretries=3 redirect_stderr=true stdout_logfile=/var/log/do-clojure-web.app.log
Speichern und schließen Sie die Datei und starten Sie dann den Supervisor-Dienst neu, um die Änderungen zu übernehmen:
systemctl restart supervisor
Als nächstes aktivieren Sie den Supervisor-Dienst, damit er beim Neustart des Systems startet:
systemctl enable supervisor
Sie können nun den Status des Supervisor-Dienstes mit dem folgenden Befehl überprüfen:
systemctl status supervisor
Sie sollten die folgende Ausgabe erhalten:
? supervisor.service - Supervisor process control system for UNIX Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2020-11-25 10:22:31 UTC; 1min 12s ago Docs: http://supervisord.org Main PID: 40927 (supervisord) Tasks: 28 (limit: 2353) Memory: 104.6M CGroup: /system.slice/supervisor.service ??40927 /usr/bin/python3 /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf ??40946 /usr/bin/java -jar do-clojure-web.jar Nov 25 10:22:31 ubuntu2004 systemd[1]: Started Supervisor process control system for UNIX. Nov 25 10:22:31 ubuntu2004 supervisord[40927]: 2020-11-25 10:22:31,603 CRIT Supervisor is running as root. Privileges were not dropped becaus> Nov 25 10:22:31 ubuntu2004 supervisord[40927]: 2020-11-25 10:22:31,603 INFO Included extra file "/etc/supervisor/conf.d/do-clojure-web.conf" d> Nov 25 10:22:31 ubuntu2004 supervisord[40927]: 2020-11-25 10:22:31,608 INFO RPC interface 'supervisor' initialized Nov 25 10:22:31 ubuntu2004 supervisord[40927]: 2020-11-25 10:22:31,608 CRIT Server 'unix_http_server' running without any HTTP authentication > Nov 25 10:22:31 ubuntu2004 supervisord[40927]: 2020-11-25 10:22:31,609 INFO supervisord started with pid 40927 Nov 25 10:22:32 ubuntu2004 supervisord[40927]: 2020-11-25 10:22:32,612 INFO spawned: 'do-clojure-web' with pid 40946 Nov 25 10:22:33 ubuntu2004 supervisord[40927]: 2020-11-25 10:22:33,615 INFO success: do-clojure-web entered RUNNING state, process has stayed >
Zu diesem Zeitpunkt wird der Supervisor-Dienst gestartet und Ihre Anwendung lauscht auf Port 5000. Sie können dies mit dem folgenden Befehl überprüfen:
ss -antpl | grep 5000
Sie sollten die folgende Ausgabe erhalten:
LISTEN 0 50 [::ffff:127.0.0.1]:5000 *:* users:(("java",pid=40946,fd=7))
Wenn Sie fertig sind, können Sie mit dem nächsten Schritt fortfahren.
Konfigurieren Sie Nginx für die Clojure-Anwendung
Als nächstes müssen Sie Nginx als Reverse-Proxy konfigurieren, um die Clojure-Anwendung zu bedienen. Erstellen Sie zunächst eine Nginx-Konfigurationsdatei für den virtuellen Host mit dem folgenden Befehl:
nano /etc/nginx/sites-available/clojure.conf
Fügen Sie die folgenden Zeilen hinzu:
upstream http_backend { server 127.0.0.1:5000; keepalive 32; } server { listen 80; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name clojure.example.com; location / { proxy_pass http://http_backend; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; access_log /var/log/do-clojure-web.access.log; error_log /var/log/do-clojure-web.error.log; } }
Speichern und schließen Sie die Datei, wenn Sie fertig sind. Aktivieren Sie dann den virtuellen Nginx-Host mit dem folgenden Befehl:
ln -s /etc/nginx/sites-available/clojure.conf /etc/nginx/sites-enabled/
Überprüfen Sie dann Nginx auf Syntaxfehler mit dem folgenden Befehl:
nginx -t
Sie sollten die folgende Ausgabe erhalten:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Starten Sie schließlich den Nginx-Dienst neu, um die Änderungen zu übernehmen:
systemctl restart nginx
Sobald Sie fertig sind, können Sie mit dem Zugriff auf die Anwendung Clojure fortfahren.
Zugriff auf die Clojure-Anwendung
Öffnen Sie nun Ihren Webbrowser und greifen Sie über die URL http://clojure.example.com auf die Clojure-Anwendung zu. Auf dem folgenden Bildschirm sollten Sie das Dashboard der Clojure-Anwendung sehen:
Klicken Sie auf die Schaltfläche Add a Location. Sie sollten den folgenden Bildschirm sehen: Klicken Sie auf die Schaltfläche Add a Location:
Geben Sie Ihre gewünschten Werte ein und klicken Sie auf die Schaltfläche „Ort eingeben“. Sie sollten den folgenden Bildschirm sehen: Geben Sie Ihre gewünschten Werte ein und klicken Sie auf die Schaltfläche Ort ein:
Klicken Sie nun auf die Schaltfläche Alle Standorte anzeigen. Auf dem folgenden Bildschirm sollten Sie Ihren hinzugefügten Standort sehen:
Schlussfolgerung
Herzlichen Glückwunsch! Sie haben die Clojure-Anwendung erfolgreich mit Nginx als Reverse-Proxy auf dem Ubuntu 20.04-Server eingesetzt. Sie können nun versuchen, Ihre benutzerdefinierte Anwendung mit Clojure zu implementieren.