わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

トップページにアクセスできるようにしよう

 月曜のプログラミング科目は,第14回となりました.グループワークです.
 来週が最終回で,完成作品の披露をしてもらいます.サーバのことは,グループが決まった直後に,メールで連絡していた*1のですが,そろそろサーバを使った動作確認を,しておきたいところです.これまで多くの学生は,各自のPC上で開発して表示させ,デバッグをしてきています.
 ということで今週は,2時限連続の最初の時限を締切として,完成作品のトップページURLを,報告してもらいました.
 当初は,URLだけを提出すればよく,そこにブラウザでアクセスして,実際に表示されるのは,第15回まででいいかなと考えていたのですが,考え直してみると,この段階で,トップページだけでも適切に表示されることを,各グループ,そして教員(私)が,確認しておくほうがいいと気づきました.授業時間外に,うまくデプロイできないことに気づくとなると,学生にも,トラブル対応をすることになる自分にとっても,不幸な話です.
 提出期限が過ぎ,Moodleの提出内容を見てみると…
 まっさきに目についたのは,http://localhost:8080/を含むURLです.これは第三者検証ができないパターンです.学生番号からグループ番号を見つけ,マイクをオンにして,修正を指示しました.
 それ以外に提出があったところは,1つ1つ確認して,トップページの表示ができました.再びマイクをオンにして,グループ番号と「OKです」をアナウンスしました.
 未提出が何グループかありました.そのうちの1つに対応していたTAが,手を挙げたので,行ってみました.
 sftpコマンドがうまく動作しないとのこと.sftp --helpを実行してオプションを確認したところ,「-P ポート番号」とする(sshコマンドだと「-p ポート番号」なのですが)ほか,このオプションを接続先情報よりも前に指定することで,やっと接続ができました.次にファイル転送ですねと言い,lsとかllsとか実行してもらったものの,なんだか表示が変です.
 ほどなく,おかしな挙動の原因がわかりました.そのグループ用のサーバ(Dockerコンテナ)にsshでログインし,そこでsftpコマンドを実行していたのでした.これでは,ファイル転送のしようがありません
 GUIによる操作で,SSHでファイルを転送できるソフトウェア,具体的にはWinSCPをインストールして使うよう,アドバイスしました.
 別のグループの不具合対応に移りました.手元(Pleiades All in One Eclipse)で動作し,jspファイルをサーバに転送したけれど,URL指定でページが表示されないというのです.
 結果がすぐに返ってくるのですが,エラー表示です.もし,少し時間を置いて,「正常に接続できませんでした」と表示されるのであれば,そのホスト名とポート番号の組み合わせで,サーバが稼働していないことを意味するのですが,サーバは動いているようなのです.
 これも判明するまでに,試行錯誤をしました.結局,ポート番号の指定を間違っていました.トップページのURLのうち,ポート番号が,そのグループのWebサーバではなく,SSHログイン用のポート番号だったのでした.SSHのサーバにHTTPでアクセスしたら,おかしくなるに決まっています.アドレスバーのポート番号だけを変えると,無事に表示ができました.Moodleの提出内容を修正するよう,伝えました.
 すべてのグループで,サーバ*2にアクセスして,トップページの表示が確認できたのは,授業終了10分前でした.
 また別に,問い合わせがありました.データベースアクセスで実行時エラーです.JDBCのjarファイルを置く場所を,修正してもらったものの,エラー表示は変わりません.
 Tomcatを再起動させました*3SSHでサーバにログインし,Tomcatのbinのディレクトリに移ってから,./shutdown.shで停止し,./startup.shで起動です.数秒待って,ブラウザ再読込をすると,エラーが解消されました.

*1:https://takehikom.hateblo.jp/entry/2019/06/26/063037

*2:物理的に同じサーバで,グループごとに異なるDockerコンテナであり,もちとんポート番号も異なります.

*3:再起動を指示する前に,自分のPCで,Dockerイメージを見直しました.Dockerイメージにおいて,もし,Tomcatの起動をエントリポイントとしていたら,Tomcatの停止がコンテナの終了を意味し,そうなるとコンテナの起動や,jspファイルやjarファイルの転送のやり直しをしないといけなくなるからです.見直した結果,エントリポイントはシェルスクリプトにしていて,その最後に,sshdを非デーモンとして起動させていました.Tomcat起動コマンドは,それより前で,それを停止させても,コンテナの稼働には影響を及ぼさないのでした.