こんにちは!ユウナです。
本業で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をインストールしていきましょう。
進め方として、以下の通りです。
- sbtの実行ファイル一式ををダウンロードする
- 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インストールで躓いたとしても本記事を参考にして、落ち着いて対処していきましょう!