Wie man Clojure Web Application auf Debian 9 einsetzt

Clojure ist eine moderne Universalprogrammiersprache für die JVM, die sich auf die gleichzeitige Programmierung in Betriebssystemen konzentriert. Clojure ermöglicht es Ihnen, die bestehende JVM-Infrastruktur einschließlich Tools, Bibliotheken und Anwendungsserver zu nutzen.

Dieser Leitfaden führt Sie durch den Prozess der Bereitstellung einer einfachen Webanwendung in Clojure mit Supervisor und Nginx.

Anforderungen

  • Ein Server mit Debian 9.
  • Ein Root-Passwort auf deinem Server.

Erste Schritte

Vor dem Start wird empfohlen, Ihr Paket mit dem folgenden Befehl auf die neueste Version zu aktualisieren:

apt-get update -y
apt-get upgrade -y

Sobald alle Pakete aktualisiert sind, starten Sie Ihren Server neu, um alle diese Änderungen zu übernehmen.

reboot

Als nächstes installieren Sie einige benötigte Pakete wie, git, curl, Java auf Ihrem Server mit dem folgenden Befehl:

apt-get install git curl openjdk-8-jre-headless -y

Sobald alle erforderlichen Pakete installiert sind, können Sie die Version des JAVA mit dem folgenden Befehl überprüfen:

java -version

Sie sollten die JAVA-Version in der folgenden Ausgabe sehen.

openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-2-b11)
OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)

Sobald Sie fertig sind, können Sie mit der Installation von Nginx und Supervisor fortfahren.

Nginx und Supervisor installieren

Standardmäßig sind Nginx und Supervisor im Ubuntu 16.04 Repository verfügbar. Sie können sie installieren, indem Sie einfach den folgenden Befehl ausführen:

apt-get install nginx supervisor -y

Nach Abschluss der Installation starten Sie den Nginx- und Supervisor-Dienst und ermöglichen Sie ihm, mit dem folgenden Befehl beim Booten zu starten:

systemctl start nginx
systemctl start supervisor
systemctl enable nginx
systemctl enable supervisor

Sobald Sie fertig sind, können Sie mit dem nächsten Schritt fortfahren.

Clojure App herunterladen

Zuerst müssen Sie das Beispielprojekt Clojure aus dem Git-Repository herunterladen. Du kannst es einfach mit dem Kommandozeilenprogramm git clone herunterladen, wie unten gezeigt:

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

Der nächste Schritt ist die Kompilierung und Durchführung dieses Clojure-Projekts mit Hilfe von Leiningen. Leiningen ist ein Tool für das Abhängigkeitsmanagement und die Buildautomatisierung, mit dem man die Clojure-App kompilieren kann. Du kannst es mit dem Befehl curl herunterladen, wie unten gezeigt:

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

Als nächstes geben Sie dem heruntergeladenen Tool mit dem folgenden Befehl die entsprechenden Berechtigungen:

chmod 755 /usr/bin/lein

Führen Sie nun den folgenden Befehl aus, um das Closure-Projekt zu kompilieren:

cd do-clojure-web
lein uberjar

Sie sollten die folgende Ausgabe sehen:

WARNING: You're currently running as root; probably by accident.
Press control-C to abort or Enter to continue as root.
Set LEIN_ROOT to disable this warning.

Downloading Leiningen to /root/.lein/self-installs/leiningen-2.7.1-standalone.jar now...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   618    0   618    0     0    309      0 --:--:--  0:00:02 --:--:--   207
100 14.6M  100 14.6M    0     0   326k      0  0:00:46  0:00:46 --:--:--  279k
Retrieving lein-ring/lein-ring/0.8.13/lein-ring-0.8.13.pom from clojars
Retrieving org/clojure/clojure/1.2.1/clojure-1.2.1.pom from central
Retrieving org/clojure/data.xml/0.0.6/data.xml-0.0.6.pom from central
Retrieving org/clojure/pom.contrib/0.0.25/pom.contrib-0.0.25.pom from central
Retrieving org/sonatype/oss/oss-parent/5/oss-parent-5.pom from central
Retrieving org/clojure/clojure/1.3.0/clojure-1.3.0.pom from central
Retrieving leinjacker/leinjacker/0.4.1/leinjacker-0.4.1.pom from clojars
Retrieving org/clojure/core.contracts/0.0.1/core.contracts-0.0.1.pom from central
Retrieving org/clojure/pom.contrib/0.0.26/pom.contrib-0.0.26.pom from central
Retrieving org/clojure/core.unify/0.5.3/core.unify-0.5.3.pom from central
Retrieving org/clojure/clojure/1.4.0/clojure-1.4.0.pom from central
Retrieving org/clojure/clojure/1.2.1/clojure-1.2.1.jar from central
Retrieving org/clojure/core.contracts/0.0.1/core.contracts-0.0.1.jar from central
Retrieving org/clojure/data.xml/0.0.6/data.xml-0.0.6.jar from central
Retrieving org/clojure/core.unify/0.5.3/core.unify-0.5.3.jar from central
Retrieving org/clojure/clojure/1.2.1/clojure-1.2.1.jar from clojars

Sobald das Clojure-Projekt erstellt ist, können Sie mit dem nächsten Schritt fortfahren.

Einrichten der Clojure Web App Umgebung

Als nächstes müssen Sie eine Verzeichnisstruktur für die Webanwendung Clojure erstellen. Dies kannst du mit dem folgenden Befehl tun:

mkdir -p /var/www/html/do-clojure-web/app/db

Als nächstes kopieren Sie die Clojure-Anwendungsdateien in das obige Verzeichnis:

cp /root/do-clojure-web/target/do-clojure-web-0.1.0-standalone.jar /var/www/html/do-clojure-web/app/

Als nächstes gibst du dem Clojure-App-Verzeichnis mit dem folgenden Befehl die richtigen Berechtigungen:

chown -R www-data:www-data /var/www/html/do-clojure-web/

Als nächstes erstellen Sie einen symbolischen Link der Clojure-Webanwendung mit dem folgenden Befehl:

cd /var/www/html/do-clojure-web/app/
ln -s do-clojure-web-0.1.0-standalone.jar do-clojure-web.jar

Die Clojure Web-App ist nun einsatzbereit. Du kannst mit dem folgenden Befehl überprüfen, ob es läuft oder nicht:

java -jar do-clojure-web.jar

Wenn alles in Ordnung ist, sollten Sie die folgende Ausgabe sehen:

2017-10-01 10:30:48.349:INFO:oejs.Server:jetty-7.x.y-SNAPSHOT
2017-10-01 10:30:48.590:INFO:oejs.AbstractConnector:Started SelectChannelConnector@127.0.0.1:5000

Nginx und Supervisor konfigurieren

Als nächstes müssen Sie den Supervisor konfigurieren, um Clojure-Anwendungen als Dienst zu verwalten. Sie können dies tun, indem Sie die Datei do-clojure-web.conf im Supervisor-Konfigurationsverzeichnis erstellen, wie unten gezeigt:

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

Füge 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/log/do-clojure-web.app.log

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Als nächstes müssen Sie auch Nginx so konfigurieren, dass es als Reverse-Proxy verwendet wird. Da die Clojure-Webanwendung nur Verbindungen vom lokalen Host akzeptiert. Sie können mit Nginx von einem entfernten Standort aus darauf zugreifen. Dazu müssen Sie die Standardkonfigurationsdatei von Nginx konfigurieren:

nano /etc/nginx/sites-available/default

Ändern Sie die Datei wie unten gezeigt:

upstream http_backend {
    server 127.0.0.1:5000;
    keepalive 32;
}
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html;

        index index.html index.htm index.nginx-debian.html;

        server_name _;

    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, und starten Sie dann den Nginx- und Supervisor-Dienst neu, um alle Änderungen zu übernehmen:

systemctl restart nginx
systemctl restart supervisor

Sie können den Status von Nginx und Supervisor mit dem folgenden Befehl überprüfen:

systemctl status supervisor

Wenn alles in Ordnung ist, sollten Sie die folgende Ausgabe sehen:

? supervisor.service - Supervisor process control system for UNIX
   Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2017-10-02 10:19:32 EDT; 22min ago
     Docs: http://supervisord.org
 Main PID: 397 (supervisord)
    Tasks: 19 (limit: 4915)
   CGroup: /system.slice/supervisor.service
           ??397 /usr/bin/python /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
           ??446 /usr/bin/java -jar do-clojure-web.jar

Oct 02 10:19:32 debian systemd[1]: Started Supervisor process control system for UNIX.
Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,656 CRIT Supervisor running as root (no user in config file)
Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,665 INFO Included extra file "/etc/supervisor/conf.d/do-clojure-web.conf" during p
Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,821 INFO RPC interface 'supervisor' initialized
Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,823 CRIT Server 'unix_http_server' running without any HTTP authentication checkin
Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,825 INFO supervisord started with pid 397
Oct 02 10:19:40 debian supervisord[397]: 2017-10-02 10:19:40,890 INFO spawned: 'do-clojure-web' with pid 446
Oct 02 10:19:41 debian supervisord[397]: 2017-10-02 10:19:41,893 INFO success: do-clojure-web entered RUNNING state, process has stayed up for 
systemctl status nginx

Output:

? nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2017-10-02 10:19:35 EDT; 26min ago
     Docs: man:nginx(8)
  Process: 425 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 401 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 427 (nginx)
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/nginx.service
           ??427 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ??429 nginx: worker process

Oct 02 10:19:32 debian systemd[1]: Starting A high performance web server and a reverse proxy server...
Oct 02 10:19:35 debian systemd[1]: nginx.service: Failed to read PID from file /run/nginx.pid: Invalid argument
Oct 02 10:19:35 debian systemd[1]: Started A high performance web server and a reverse proxy server.

Auf Clojure Web App zugreifen

Sobald alles richtig konfiguriert ist, ist es an der Zeit, über einen Webbrowser auf die Clojure-Webanwendung zuzugreifen.

Öffnen Sie Ihren Webbrowser und geben Sie die URL http://your-ip-address ein, Sie werden wie unten gezeigt auf die Homepage der Clojure Web-App weitergeleitet:

Clojure App Startseite

Klicken Sie nun auf die Schaltfläche Ort hinzufügen, Sie sollten das folgende Bild sehen:

Formular-Datei

Geben Sie hier die Werte in x-Wert und y-Wert-Feld an und klicken Sie dann auf die Schaltfläche Ort senden. Sie können nun Ihre eingereichten Standorte anzeigen, indem Sie auf die Schaltfläche Alle Standorte anzeigen klicken. Du solltest das folgende Bild sehen:

Ergebnisseite

Fazit

Im obigen Artikel haben wir gelernt, wie man die Clojure-Webanwendung mit Supervisor und Lein implementiert. Wir haben auch gelernt, wie man von einem entfernten Standort aus auf eine Clojure-Webanwendung zugreift, indem man Nginx als Reverse-Proxy-Server einrichtet. Ich hoffe, dass Sie jetzt Ihre benutzerdefinierte Anwendung mit Clojure, Supervisor und lein einfach bereitstellen können. Zögere nicht, alles zu fragen, wenn du irgendwelche Fragen hast.

Das könnte Dich auch interessieren …