機能プログラミング、より具体的には、ClojureでのWebのプログラミングに対する人々の関心が高まっています。基本的なアプリケーションを構築する方法に関する多くのチュートリアルでは、展開の詳細を無視することがよくあります。この記事では、ClojureWebアプリケーションをUbuntu14.04 [CVM](https://cloud.tencent.com/product/cvm?from=10680)にデプロイする方法を説明します。
具体的には、サンプルのClojureアプリケーションを作成して本番用にパッケージ化し、Supervisorを使用してサーバー上にClojureアプリケーション環境をセットアップしてアプリケーションを実行し、Nginxを使用してリクエストを提供します。
このチュートリアルを開始する前に、以下を準備する必要があります。
最初のステップは、 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
このアプリケーションを機能させるには、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
を押すと、アプリケーションがすぐに停止します。
アプリケーションをサービスとして管理するには、いくつかのオプションがあります。ここで使用するオプションはスーパーバイザーと呼ばれます。単純なスクリプトよりも管理が簡単で、用途が広いです。ただし、本当に拡張が必要なサービスについては、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
がクラッシュした場合も、必ずログインしてアプリケーションを再起動してみてください。
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;
#}
すべての作業を開始し、すべてが正常であることを確認する時が来ました。先に進み、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