オンラインジャッジシステムのSharif-Judgeをdocker-composeで構築した
といっても借り物の改良
授業で使うオンラインジャッジシステムが壊れたそうなのでリプレース用に構築.
できるだけ手をかけないでやろうと思ったけどやっぱり近道はよくない.
成果物
元ネタ
さくっと構築しようと思ってDocker上で構築できそうな
この記事および
を元に最初構築したが, 問題が発生
- docker-compose down したらまるまるデータが消える
- どう頑張ってもRuntime Errorが発生する
このままだとつかいものにならないのでなんとか改善する
データが消える問題の解決
Postgres 側
元ネタのDockerfileを見ると, PostgreSQLの/var/lib/postgresql/data
がVolumeとしてマウントされていることがわかる.
確かに名前なしVolumeはdown時に消えるので名前ありのVolumeにすることで解決できそう.
volumes: - dsjpgdata:/var/lib/postgresql/data
に変更することで解決 ...しませんでした.
Sharif Jadge側
どうやら問題そのものや提出したコードはDBに格納されるわけではないらしく, 普通に消えました. 巧妙なことにDB側のデータは生きているのでひと目ではわからない (過去の提出したコードを参照した際に発覚) のが厳しい.
がんばって格納される箇所を探してそこをマウントする
結果的に,
volumes: - /data/assignments:/data/assignments
とすることで消えなくなりました.
Runtime Errorの解決
コンパイルは通ってそうだったのでとりあえず実行に関係のありそうな設定を弾く
よくわからんがSandboxing と Shield のチェックを外したら動くようになったからとりあえずヨシ
(PHP5だしUbuntu14だしでもうセキュリティなんて知らない)
まとめ
よくわからないものをよくわからないまま使うのはやめましょう