【Playframework】タグの記事一覧|退会専科 https://taikaisenka.com 退会手順のことなら退会専科へ! Mon, 28 Feb 2022 10:42:10 +0000 ja hourly 1 https://wordpress.org/?v=6.2.2 【さくらのVPS】CentOS8+NginxでPlayframework2系を動かす設定 https://taikaisenka.com/sakura-vps-centos-nginx-playframework-settings/ https://taikaisenka.com/sakura-vps-centos-nginx-playframework-settings/#respond Sun, 01 Aug 2021 13:21:18 +0000 https://taikaisenka.com/?p=315 やりたいこと

さくらのVPSにCentOSを載せました。

WebサーバはNginxです。

そこに、Playframeworkアプリケーションを動かしたい。

前提・環境

それぞれのバージョンは以下の通りです。

■Nginxのバージョン

$ nginx -v

nginx version: nginx/1.14.1

■CentOSのバージョン

$ cat /etc/redhat-release

CentOS Linux release 8.4.2105

■sbtのバージョン

$ sbt -version

sbt script version: 1.5.5

これらがすでにさくらのVPS側に入っていることを前提とします。

さくらのVPSを最初、契約したときはまっさらな状態になっています。つまり何のソフトウェアも入っていません。

CentOSやNginxをインストールする方法はほかのサイトでも既出情報なので、それらを参考にしてインストールしてください。

※なお、sbtのインストール時に「403 Forbidden」が出るかもしれません。これはcurl経由でsbtをインストールしようとしたときに発生するものです。(=おそらくリンク切れ)

その場合は、下記記事を参考にインストールしてみてください。

https://taikaisenka.com/sakura-vps-sbt-403-forbidden/

手順1.Playframeworkのアプリケーション一式をさくらのVPSにアップロードする

Nginxの場合、ドキュメントルートディレクトリが「/usr/share/nginx/html」になります。

なので、その直下にプロジェクトファイルをアップロードします。

私はローカルでの開発に、IntelliJ IDEAを使っています。このIDEには「デプロイ」という機能があり、直接FTP通信ができるのですが、さくらのVPSでは秘密鍵方式のみ許可している設定にしています。

そのため、IDEAから秘密鍵方式によるFTP接続方法が分からず、WinSCPを使ってプロジェクトファイルを転送しました。

ドキュメントルートディレクトリ直下に配置できれば、やり方は何でもいいと思います。

私の場合は、 「/usr/share/nginx/html/プロジェクト名」フォルダを作り、そこにアップロードしました。

手順2.Playframeworkの起動ポートをNginxに登録する

Playframeworkを起動します。軌道法補はターミナルから「sbt start」をするだけです。

デフォルトだと「ポート9000」でPlayframeworkが起動しようとしますが、私の環境の場合、すでに使われているというエラーが出ます。

なので、「sbt “start 9001″」とすることでポート番号をずらして起動させました。

起動すると以下のようになります。

2021-08-01 16:04:08 INFO  play.core.server.AkkaHttpServer  Listening for HTTP on /0.0.0.0:9001

次に、Nginxにポート番号9001を登録させます。下記コマンドを打ち、Nginxの設定ファイルを編集します。

sudo vi /etc/nginx/nginx.conf

※パスワード入力が求められたら入力してください。

番号が付いている箇所を編集します。

http {
 :
#---> ①追加
    proxy_buffering    off;
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Scheme $scheme;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   Host $http_host;
    proxy_http_version 1.1;

    upstream to-playframework {
       server 127.0.0.1:9001;
    }
#<---①ここまで
 :
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  (ドメイン);
        root         /usr/share/nginx/html;
        index        index.html index.htm index.php;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

#--->②追加
        location /プロジェクト名{
          proxy_pass http://to-playframework;
        }
#<---②ここまで

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}

※②のプロジェクト名は、手順1で配置したPlayframeworkのルートディレクトリを指します。

これでこのファイルは編集完了です。

保存するときは「:wq」でEnterを押します。

以上で、さくらのVPS側の設定は完了です。

手順3.Playframework側の設定

ここまでの設定を終えて、Playframeworkのルートディレクトリへアクセスしてみてください。

私の場合は「http://ドメイン/プロジェクト名/」

ドメイン部分に入るのは、以下「名前」か「IPアドレス」のどちらでもアクセス可能です。

おそらく、以下のエラーが出ると思います。

  1. 「Not Found For request ‘GET /プロジェクト名/」
  2. 「Bad Request For request ‘GET /プロジェクト名/’ [Host not allowed: ]」

これはPlayframework側の設定を変えるだけで解決できますので、この章でその解説をしていきます。

「 Bad Request For request」 が出た場合

Host not allowed となっているので、ホスト名が許可されていないというエラーです。

そのため、このようにします。

play.filters.hosts {
#全て許可する場合⇒  allowed = ["."]
    allowed = [
        "ドメイン名.sakura.ne.jp",
        "xxx.xxx.xxx.xxx",
         "localhost"
    ]
}

application.confの末尾にこの文言を入れてください。

こうすることで、許可するホスト名を指定することができます。ここでは、ローカル環境用と本番環境用の2種類を登録しています。

「 Not Found  For request 」が出た場合

URLの階層がNginx.confで設定した内容と違っていることが原因のエラーです。

手順2の「location /プロジェクト名{}」の通り、プロジェクト名階層が必要です。

しかし、Playframework側の設定にはその階層が登録されていないので、エラーになっているので、application.confに追加してあげます。

application.context = "/(プロジェクト名)/"

必ず「/(半角スラッシュ)」で前後を囲むようにしてください。「/プロジェクト名」などとすると、エラーが解消されませんので、注意が必要です。

これで、Playframework側の設定は完了です。

再び 「http://ドメイン/プロジェクト名/」 にアクセスしてみてください。今度はうまく画面が表示されると思います。

お疲れ様でした。

その他参考サイト

私がPlayframeworkをさくらのVPSで動かすまでの間で参考にしたサイトを紹介しておきます。

  1. フロント・エンドとなる HTTP サーバのセットアップ・・・Nginx.confの設定時に役立ちます
  2. [playframework2.6]Host not allowed エラー/AllowedHostsFilter・・・許可するホスト名の設定に役立ちます
  3. 許可されたホストフィルター・・・許可するホスト名の設定に役立ちます
  4. ネコでもわかる!さくらのVPS講座 ~第三回「Apacheをインストールしよう」・・・NginxではなくApacheを入れる際に役立ちます
  5. 【PlayFramework 2.5】データベースへの接続・・・DB接続の設定時に役立ちます
  6. Play Framework DBへの接続・・・DB接続設定時に役立ちます
  7. Play framework 開発中のデータベース参照方法・・・DB接続設定時に役立ちます
  8. H2データベース・・・ローカル環境でDBを扱いたい時に簡易DBとして役立ちます
]]>
https://taikaisenka.com/sakura-vps-centos-nginx-playframework-settings/feed/ 0
図式解説!【さくらのVPS】CentOS 8にsbtを入れようとすると[403] Forbiddenとなる https://taikaisenka.com/sakura-vps-sbt-403-forbidden/ https://taikaisenka.com/sakura-vps-sbt-403-forbidden/#respond Wed, 28 Jul 2021 09:57:30 +0000 https://taikaisenka.com/?p=207 こんにちは!ユウナです。

本業でPlayframeworkを触っていますが、新規プロジェクト作成した後、CentOS8上でsbtをインストールしようとしたところ、「403 Forbidden」HTMLが返ってきました。

いろいろ試行錯誤したので、その解決方法を紹介していきます。

本稿では、CentOS8上にsbtをインストールし、「sbt run/start」が実行できるようになることを、最終目的としています。

現象

やったこと

ターミナルを使い、CentOS8サーバにSSH接続します。

その後、下記のコマンドを打ちました。

 curl https://bintray.com/sbt/rpm/rpm | sudo tee /etc/yum.repos.d/bintray-sbt-rpm.repo

※参考にしたサイトはこちらです⇒Scalaとsbtのインストール方法(Mac・CentOS)

結果 – 403 ForbiddenのHTMLが返る

そもそも403 Forbiddenとは何でしょうか?

HTTP 403、またはエラーメッセージ Forbidden(「閲覧禁止」「禁止されています」の意)は、HTTPステータスコードの一つ。ページが存在するものの、特定のアクセス者にページを表示する権限が付与されず、アクセスが拒否されたことを示すもの。また、サイトの制作者側の設計ミスによる障害やサイトが非常に混雑している時、URLが間違っている場合にも表示されることがある。

Wikipedia – HTTP 403

つまり、Curlによって「https://bintray.com/sbt/rpm/rpm」にアクセスしようとしているが、このURLにはうまくアクセスできてないということになります。

試しにそのURLへアクセスしてみました。

なんとなんと「https://jfrog.com/distribution/?bintrayRD=1」という別のURLにリダイレクトされているではないですか。

そのため、このコマンドを使ってsbtをインストールすることはできなさそうです。

解決策 – sbtをインストールする道のり

「sbt install centos」と検索したところ下記サイトが見つかりました。

Scalaの公式サイトのようです⇒Installing sbt on Linux Installing from SDKMAN

本稿では、このサイトに従ってsbtをインストールしていきます。

1.「sdk」をインストールする

まず、自身の環境でsdkコマンドが有効になっているかを確認します。

$ sdk version

下記図のように「SDKMAN 5.12.2」などというバージョンが表示されれば「2章」へ進んでください。

もし「-bash: sdk: command not found」などコマンドが見つからないエラーが出た場合は、sdkをインストールする必要があるので、下記手順のようにインストールしていきましょう。

※参考にしたサイトはこちらです⇒【CentOS7】SDKMAN! をシステムワイド (全ユーザが使えるよう) にインストールする方法。本稿では図式付きでさらに詳しく手順を解説していこうと思います。

まず、下記コマンドをターミナルに入力します。

curl -s "https://get.sdkman.io" | bash

しばらく待つと、このように「Enjoy!」メッセージが出て、完了したことが分かります。

※黒塗箇所は自身のユーザ名が入ります。

次に、「Please open a new terminal, or run the following in the existing one:(約:新しくターミナルを開くか、下記コマンドを打ち有効にします)」と書かれているので、どちらかを行い、有効にしましょう。

今回は私はコマンドを打ち有効にしてみます。打ち込むコマンドは、下記のどちらでも構いません。

source "$HOME/.sdkman/bin/sdkman-init.sh"

or

source "/ユーザ名/.sdkman/bin/sdkman-init.sh"

※何も表示されませんが、これで有効にすることができました。

そのあと、再度「sdk version」を打ち込むと、バージョンが表示されるかと思います。これでsdkのインストールは完了です!

2.「sbt」をインストールする

では次に、本命のsbtをインストールしていきましょう。

進め方として、以下の通りです。

  1. sbtの実行ファイル一式ををダウンロードする
  2. sbtをインストールする

ではまず、sbtの実行ファイルをダウンロードしていきましょう。

ターミナルに打ち込むコマンドは以下の通りです。

$ sdk install java $(sdk list java | grep -o "8\.[0-9]*\.[0-9]*\.hs-adpt" | head -1)

下記画面の通りに「Done installing!」となれば、正常にダウンロードされたことになります。

そして次に、ダウンロードしたファイルをCentOS8上に展開していきます。

ターミナルに打ち込むコマンドは以下の通りです。

$ sdk install sbt

下記画面の通りに「Done installing!」となれば、正常にインストールされたことになります。

3.「sbt start」する

ここまでこれば後は実行するだけで大丈夫ですので、さっそく確認していきましょう。

ターミナルに打ち込むコマンドは以下の通りです。

sbt start

下記図のように、sbtが動き出します。

  • 赤線・・・Nginxのドキュメントルートディレクトリに移動しています。
    Apacheの場合は、「/var/www/html」がドキュメントルートディレクトリとなります。
  • 緑線・・・Playframeworkのプロジェクト名に移動しています。
  • 黄色線・・プロジェクト内でsbt startをして、playframeworkのアプリケーションを起動させています。

初回起動時は様々なファイルをダウンロードしていく関係で、下記図のように、少し時間がかかります。しばらく待ちましょう。

しばらくすると、無事に立ち上がりました!

ユウナ

何かうまくPlayframeworkが起動できていませんが、これは設定がおかしかったりソースが間違っていたりなど、凡ミスだと思います。今回の目的である「SBTを動かせる環境作り」は達成したので、本稿の目的は達成しているので、よしとします。

結び

いかがだったでしょうか。

最初、sbt入れられないじゃん!どうしよう… と思いましたが、落ち着いて調べていけば、というか公式サイトに行けば解決策はあることを、改めて学びました。

もしsbtインストールで躓いたとしても本記事を参考にして、落ち着いて対処していきましょう!

]]>
https://taikaisenka.com/sakura-vps-sbt-403-forbidden/feed/ 0