GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu20.04にNginxを使用してClojureWebアプリケーションをデプロイする方法

Clojureは、Javaプラットフォーム上の最新の動的で強力なプログラミング言語です。これはLISPプログラミング言語に基づいており、Javaと.Netの両方のランタイム環境で実行できるようにするコンパイラを備えています。 Clojureは、Javaコードに直接触れることなく、システムをゼロから構築するのに役立ちます。現在、WalmartやPuppetLabなどの多くの大企業で使用されています。

このチュートリアルでは、ClojureWebアプリケーションをUbuntu20.04にデプロイする方法を説明します。

前提条件
  • Ubuntu20.04を実行しているサーバー。
  • サーバーIPで指定された有効なドメイン名。
  • ルートパスワードがサーバーに設定されます。
はじめに

開始する前に、システムパッケージを最新バージョンに更新することをお勧めします。次のコマンドで更新できます:

apt-get update -y

すべてのパッケージが更新されたら、次のコマンドを実行してJavaおよびその他の必要なパッケージをインストールします。

apt-get install git curl default-jdk -y

すべてのパッケージがインストールされたら、次のコマンドを使用して、インストールされているJavaのバージョンを確認します。

java -version

次の出力が得られるはずです:

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)

終了したら、次のステップに進むことができます。

Nginxとスーパーバイザーをインストール

次に、NginxWebサーバーとスーパーバイザーをシステムにインストールする必要があります。 Nginxは、インターネット上でアプリケーションをホストするために使用されるWebサーバーです。スーパーバイザーは、ユーザーがLinuxベースのオペレーティングシステム上の多数のプロセスを監視および制御できるようにするクライアント/サーバーシステムです。

次のコマンドで両方のパッケージをインストールできます:

apt-get install nginx supervisor -y

両方のパッケージがインストールされたら、次のステップに進むことができます。

Clojureアプリをダウンロード

まず、GitリポジトリからClojureアプリをダウンロードする必要があります。次のコマンドを実行してダウンロードできます:

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

ダウンロードが完了すると、次の出力が表示されます。

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.

次に、システムにLeiningenをインストールする必要があります。 Leiningenは、Clojureプログラミング言語で記述されたプロジェクトを作成するために使用されるビルド自動化および依存関係管理ツールです。次のコマンドを使用して、Leiningenバイナリパッケージをダウンロードできます。

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

ダウンロードが完了したら、次のコマンドを使用して実行権限を設定します。

chmod 755 /usr/bin/lein

次に、ディレクトリをClojureに変更し、次のコマンドを使用してプロジェクトをコンパイルします。

cd do-clojure-web
lein uberjar

プロジェクトがコンパイルされると、次の出力が得られるはずです。

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

終了したら、次のステップに進むことができます。

Clojureアプリケーションのディレクトリ構造を作成する

次に、Clojureアプリのディレクトリ構造を作成し、必要なファイルとディレクトリを特定の場所に配置する必要があります。

まず、次のコマンドを使用してディレクトリ構造を作成します。

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

次に、次のコマンドを使用して、Clojureアプリとデータベースを特定のディレクトリにコピーします。

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/

次に、次のコマンドを使用して適切な権限と所有権を設定します。

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

次に、ディレクトリをClojureアプリに変更し、Clojureアプリケーションのシンボリックリンクを作成します。

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

次に、次のコマンドを実行して、アプリケーションが機能しているかどうかを確認します。

java -jar do-clojure-web.jar

すべてが正常であれば、次の出力が得られるはずです:

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

終了したら、次のステップに進むことができます。

Clojureアプリケーションのスーパーバイザーを構成する

Clojureアプリケーションをサービスとして管理する方法はいくつかあります。このチュートリアルでは、Clojureアプリを管理するためにSupervisorを使用します。スーパーバイザー構成ディレクトリー内にファイルを作成することにより、それを構成できます:

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

次の行を追加します:

[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

ファイルを保存して閉じてから、スーパーバイザサービスを再起動して変更を適用します。

systemctl restart supervisor

次に、システムの再起動時にスーパーバイザサービスを開始できるようにします。

systemctl enable supervisor

これで、次のコマンドを使用してスーパーバイザーのステータスを確認できます。

systemctl status supervisor

次の出力が得られるはずです:

? 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 >

この時点で、スーパーバイザサービスが開始され、アプリケーションはポート5000でリッスンしています。次のコマンドで確認できます。

ss -antpl | grep 5000

次の出力が得られるはずです:

LISTEN   0        50          [::ffff:127.0.0.1]:5000                  *:*       users:(("java",pid=40946,fd=7)) 

終了したら、次のステップに進むことができます。

Clojureアプリケーション用にNginxを構成する

次に、Clojureアプリを提供するために、Nginxをリバースプロキシとして構成する必要があります。まず、次のコマンドを使用してNginx仮想ホスト構成ファイルを作成します。

nano /etc/nginx/sites-available/clojure.conf

次の行を追加します:

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;
    }
}

終了したら、ファイルを保存して閉じます。次に、次のコマンドを使用してNginx仮想ホストを有効にします。

ln -s /etc/nginx/sites-available/clojure.conf /etc/nginx/sites-enabled/

次に、次のコマンドを使用して、構文エラーがないかNginxを確認します。

nginx -t

次の出力が得られるはずです:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

最後に、Nginxサービスを再起動して、変更を適用します。

systemctl restart nginx

終了したら、Clojureアプリへのアクセスに進むことができます。

アクセスClojureアプリケーション

次に、Webブラウザーを開き、URL http://clojure.example.comを使用してClojureアプリケーションにアクセスします。 。次の画面にClojureアプリケーションダッシュボードが表示されます。

場所の追加をクリックします ボタン。次の画面が表示されます。

希望の値を入力して、送信をクリックします ロケーションボタン。次の画面が表示されます。

次に、すべての場所を表示をクリックします ボタン。追加した場所が次の画面に表示されます:

結論

おめでとう!これで、Ubuntu20.04サーバーにリバースプロキシとしてNginxを使用してClojureアプリを正常にデプロイできました。これで、Clojureを使用してカスタムアプリケーションのデプロイを試みることができます。


Ubuntu
  1. Ubuntuにpm2とNginxを使用してNode.jsアプリケーションをデプロイする方法

  2. Ubuntu20.04LTSでNginxを使用してModsecurityをデプロイする方法

  3. Ubuntu20.04でLetsencryptを使用してNginxを保護する方法

  1. Ubuntu16.04にNginxでMediaWikiをインストールする方法

  2. Ubuntu20.04LTSにNginxを使用してModsecurityをデプロイする

  3. Ubuntu20.04にNginxとGunicornを使用してFlaskアプリケーションをデプロイする方法

  1. Ubuntu15.10にNginxを使用してMagentoをインストールする方法

  2. Ubuntu15.10にNginxでMailpileをインストールする方法

  3. Ubuntu15.10でNginxを使用してRedmine3をインストールする方法