せっかく入れたTheiaですが、クラウドやVPSにそのままで入れたのではセキュリティ上の問題になります。そこで、Apacheにリバースプロキシを設定して、Apache を経由してアクセスするように配置しました。そのうえで認証やSSLを設定して、セキュリティを確保する狙いです。
Apacheの導入に特別なことはないので、本稿では導入後の設定について記載します。
認証設定
まずは認証設定からです。今回はDigest認証にしました。
sites-available/000-default.conf
<Location "/">
AuthType Digest
AuthName "DigestAuth"
AuthUserFile /etc/apache2/.digestauth
Require valid-user
</Location>
リバースプロキシ設定
次にリバースプロキシ設定です。
Theiaはyarn theia start ~/workspace
のように起動させるものとします。そうするとデフォルトのホスト名localhost、ポート3000で起動します。
TheiaへアクセスするURLをhttp://example.com/theia/
とします。TheiaはWebSocketを使った通信も行うため、それについての設定も追加します。
mods-available/proxy.conf
ProxyPass /theia/services/ ws://localhost:3000/services/
ProxyPassReverse /theia/services/ ws://localhost:3000/services/
ProxyPass /theia/ http://localhost:3000/
ProxyPassReverse /theia/ http://localhost:3000/
/theia/services/を/theia/よりも前に設定しないと、全部/theia/で設定した方に持っていかれてしまいます。
SSLの場合
SSLの導入自体はいくつか方法がありますが、今回はLet's Encryptを利用しました。
導入はコマンドで行い、設定ファイルも書き換えてくれます。その結果、以下のようになっていることを確認してください。
httpでアクセスしたときにhttpsにリダイレクトする。
sites-available/000-default.conf
RewriteEngine On
RewriteRule ^ https://%{SEVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
SSLの場合の認証設定
sites-available/000-default-le-ssl.conf
自動的に作られている設定ファイル中に、000-default.confと同じ認証設定が記載されているはずです。
<Location "/">
AuthType Digest
AuthName "DigestAuth"
AuthUserFile /etc/apache2/.digestauth
Require valid-user
</Location>
しかし、これでは終わらなかった...
これで、httpでアクセスしてもhttpsにリダイレクトされ、ID/PWの入力ダイアログも表示されて「よしよし」と思ったのですが。。。
PCだとその通り動くものの、iPadだとTheiaにアクセスしたあと、スピナーがくるくるするばかりで何も表示されませんでした。
そう、Theia導入のきっかけはiPadでの開発環境構築です!折れ気味の気持ちを抱えつつ、旅は続くのでした。