Ubuntu14.04にClojureWebアプリケーションをデプロイする方法

前書き ##

機能プログラミング、より具体的には、ClojureでのWebのプログラミングに対する人々の関心が高まっています。基本的なアプリケーションを構築する方法に関する多くのチュートリアルでは、展開の詳細を無視することがよくあります。この記事では、ClojureWebアプリケーションをUbuntu14.04 [CVM](https://cloud.tencent.com/product/cvm?from=10680)にデプロイする方法を説明します。

具体的には、サンプルのClojureアプリケーションを作成して本番用にパッケージ化し、Supervisorを使用してサーバー上にClojureアプリケーション環境をセットアップしてアプリケーションを実行し、Nginxを使用してリクエストを提供します。

準備 ##

このチュートリアルを開始する前に、以下を準備する必要があります。

ステップ1-サンプルのClojureアプリケーションを作成してパッケージ化します

最初のステップは、 gitを使用して、展開用のサンプルClojureプロジェクトを取得することです。

まず、パッケージを更新し、サーバーに gitをインストールします。

sudo apt-get update
sudo apt-get install git

次に、サンプルプロジェクトリポジトリのクローンを作成します。

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

このリポジトリは、[Clojure Basic Web Development](http://clojure-doc.org/articles/tutorials/basic_web_development.html)チュートリアルに従った最終結果です。必要に応じて、このリポジトリを複製する代わりに、自分でチュートリアルに従うことができます。

Clojureは[JVM](https://en.wikipedia.org/wiki/Java_virtual_machine)を使用してコードを実行するため、プロジェクトをコンパイルして実行する必要があります。 Leiningenは、Clojureアプリケーションの依存関係管理およびビルド自動化ツールであり、簡単に実装できます。ライニンゲンを設立するには2つのステップがあります。

まず、Javaをインストールします。

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

次に、Leiningenインストールスクリプトをダウンロードします。 LeiningenにはUbuntuパッケージがありますが、古くなっています。

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

すべてのユーザーがLeiningenが提供する leinユーティリティを使用できるように権限を設定します。

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

これで、プロジェクトをコンパイルして、サーバー上で leinを実行できます。

cd ~/do-clojure-web
lein uberjar

ステップ2-Clojureアプリケーション環境をセットアップする

このアプリケーションを機能させるには、Java、Supervisor、Nginxの3つの主要部分が必要です。 Javaをインストールしました。次に、SupervisorとNginxをインストールします。

sudo apt-get install nginx supervisor

また、ClojureWebアプリケーションとそのログファイルを保存する場所も必要です。次に、ディレクトリ構造を作成します。

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

これで、Clojureアプリケーションファイルとデータベースファイルを作成したディレクトリに移動できます。

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/

アプリケーションは、システム上でユーザー** www-data として実行されるため、組み込みデータベースに書き込むことができます。アプリケーションパスの所有者を www-data **に設定します。

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

Clojureアプリケーションディレクトリに切り替えます。

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

実稼働環境では、アプリケーションのバージョン番号は更新のたびに変更されます。毎回システム構成を更新する必要はありません。これを防ぐには、現在実行中のアプリケーションバージョンのシンボリックリンクを作成します。次のステップでシンボリックリンクを参照します。

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

アプリケーションは現在、localhost経由でのみアクセスできるように構成されていますが、エラーなしで起動することを確認できます。続行する前にこれを行ってください。

sudo java -jar do-clojure-web.jar

すべて問題がなければ、次のような出力が得られるはずです。

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

キーの組み合わせ CTRL + Cを押すと、アプリケーションがすぐに停止します。

手順3-Clojureアプリケーションを実行するようにSupervisorを構成する

アプリケーションをサービスとして管理するには、いくつかのオプションがあります。ここで使用するオプションはスーパーバイザーと呼ばれます。単純なスクリプトよりも管理が簡単で、用途が広いです。ただし、本当に拡張が必要なサービスについては、Clojureアプリケーションの実行について[uWSGIドキュメント](http://uwsgi-docs.readthedocs.org/en/latest/Ring.html)を確認してください。

/ etc / supervisor / conf.d / do-clojure-web.confファイルを作成して編集します。

sudo 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/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

この構成は非常に簡単です。スーパーバイザーデーモン(サービス)は、 / var / www / do-clojure-web / appディレクトリからアプリケーションを実行します。 / var / www / logs / do-clojure-web.app.logがクラッシュした場合も、必ずログインしてアプリケーションを再起動してみてください。

手順4-Nginxをプロキシサーバーとして構成する

Clojure Webアプリケーションはポート5000のlocalhostからの接続のみを受け入れるため、外部アクセスを提供するには、その前にNginxなどのWebサーバーを配置する必要があります。これは、アプリケーションを拡張するときに静的アセットを提供する場合にも非常に便利です。

/ etc / nginx / sites-available / defaultファイルを編集します。

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

コメント付きのコードブロック部分をファイルに追加します。これにより、次の構成セクションで参照できるようにバックエンドが定義されます。

...
# Please see /usr/share/doc/nginx-doc/examples/for more detailed examples.
##
upstream http_backend {//ファイルに追加
 server 127.0.0.1:5000;
 keepalive 32;}
server {
 listen 80 default_server;...

ここで、 location /で始まるブロックを見つけます。各行の先頭に「#」を追加して、すべての行をコメントアウトします。

...
  # 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
...

次に、以下のセクションを追加します。これにより、Nginxはポート80で通常のWebサーバーのようにリッスンし、要求をClojureアプリケーションにプロキシします。

...
​
  # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
​
 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/www/logs/do-clojure-web.access.log;
  error_log /var/www/logs/do-clojure-web.error.log;}
​
  # location /RequestDenied {
  #  proxy_pass http://127.0.0.1:8080;    
        #}

ステップ5-サービスを開始してアクセスをテストする

すべての作業を開始し、すべてが正常であることを確認する時が来ました。先に進み、Supervisorデーモンを起動して、Clojureアプリケーションを起動します。

sudo service supervisor start 

開始するまで約30秒待ってから、NginxWebサーバーのフロントエンドプロキシを開始します。

sudo service nginx start

ブラウザで http:// your_server_ipにアクセスします。サンプルのClojureアプリケーションサイトのロードが表示されます。

デフォルトのNginxページが表示された場合は、「sudo servicesupervisorrestart」でSupervisorを再起動し、30秒待ってから、「sudo servicenginxrestart」でNginxを再起動してください。

Webサイトを読み込んだ後、画面上部の[場所の追加]リンクをクリックし、デジタル座標を追加して、データベースのアクセス許可が正しいことを確認します。たとえば、** x値に1を追加し、 y値**に2を追加できます。これにより、次のようなページが表示されます。

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

画面上部の[**すべての場所を表示] **リンクをクリックすると、新しいエントリを含む表が表示されます。

結論として ##

Leiningen、Supervisor、およびNginxを使用してClojureアプリケーションをデプロイしました。最も単純なWebサイトやアプリケーションでさえも展開するというトピックについて学ぶことはまだたくさんあります。次のステップはカスタムアプリケーションをデプロイすることですが、このチュートリアルで使用されるサンプルアプリケーションはデプロイしません。

Linuxオープンソース情報チュートリアルの詳細については、[Tencent Cloud + Community](https://cloud.tencent.com/developer?from=10680)にアクセスして詳細を確認してください。

参照:「Ubuntu14.04にClojureWebアプリケーションをデプロイする方法」

Recommended Posts

Ubuntu14.04にClojureWebアプリケーションをデプロイする方法
Ubuntu14.04にDjangoをデプロイする方法
Ubuntu18.04にOperaWebブラウザをインストールする方法
Ubuntu18.04にChromiumWebブラウザーをインストールする方法
ドッカーをubuntuサーバーにすばやくデプロイする方法
Ubuntu18.04にDjangoWebFrameworkをインストールする方法
Ubuntu20.04にRubyをインストールする方法
Ubuntu20.04にMemcachedをインストールする方法
Ubuntu20.04にJavaをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
Ubuntu20.04にElasticsearchをインストールする方法
UbuntuにProtobuf3をインストールするための詳細なチュートリアル
Ubuntu20.04にNginxをインストールする方法
Ubuntu16.04にNode.jsをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
Ubuntu14.04にBacula-Webをインストールする方法
Ubuntu16.04にPostgreSQLをインストールする方法
Ubuntu20.04にGitをインストールする方法
Ubuntu18.04にAnaconda3をインストールする方法
Ubuntu16.04にJenkinsをインストールする方法
Ubuntu14.04にMemSQLをインストールする方法
Ubuntu20.04にGoをインストールする方法
Ubuntu16.04にMongoDBをインストールする方法
Ubuntu16.04にPrestaShopをインストールする方法
Ubuntu14.04でPHP7にアップグレードする方法
Ubuntu18.04にPython3.8をインストールする方法
Ubuntu18.04にKVMをインストールする方法
Ubuntu20.04にKVMをインストールする方法
ubuntu14.04にopencv3.0.0をインストールする方法
Ubuntu20.04にAnacondaをインストールする方法
Ubuntu16.04にPrometheusをインストールする方法
Ubuntu18.04にJenkinsをインストールする方法
Ubuntu20.04にApacheをインストールする方法
Ubuntu20.04にRをインストールする方法
Ubuntu16.04にMoodleをインストールする方法
Ubuntu14.04にSolr5.2.1をインストールする方法
Ubuntu16.04にTeamviewerをインストールする方法
Ubuntu14.04でNginxを保護する方法
Ubuntu20.04にMariaDBをインストールする方法
Ubuntu20.04にNginxをインストールする方法
Ubuntu20.04にMonoをインストールする方法
Ubuntu20.04にGoをインストールする方法
Ubuntu20.04にZoomをインストールする方法
Ubuntuでソフトウェアをアンインストールする方法
Ubuntu16.04にNginxをインストールする方法
Ubuntu20.04にOpenCVをインストールする方法
Ubuntu20.04にSpotifyをインストールする方法
Ubuntu18.04にPostmanをインストールする方法
Ubuntu16.04にGo1.6をインストールする方法
Ubuntu18.04にGoをインストールする方法
Ubuntu14.04にMySQLをインストールする方法
Ubuntu20.04にPostgreSQLをインストールする方法
Ubuntu18.04にVLCをインストールする方法
Ubuntu20.04にTeamViewerをインストールする方法
Ubuntu20.04にWebminをインストールする方法
[クイックスタート] Ubuntu18.04にApacheWebサーバーをインストールする方法
Ubuntu20.04にスワップスペースを追加する方法
Ubuntu14.04でRedisのインストールを保護する方法
ubuntu16.04でnfsサービスを構築する方法
Ubuntu14.04にBaculaServerをインストールする方法
Ubuntu14.04でTomcatのインストールを最適化する方法