yamaken1343’s blog

技術ブログもどき

オンラインジャッジシステムのSharif-Judgeをdocker-composeで構築した

といっても借り物の改良

授業で使うオンラインジャッジシステムが壊れたそうなのでリプレース用に構築.
できるだけ手をかけないでやろうと思ったけどやっぱり近道はよくない.

成果物

github.com

元ネタ

さくっと構築しようと思ってDocker上で構築できそうな

qiita.com

この記事および

github.com

を元に最初構築したが, 問題が発生

  • 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だしでもうセキュリティなんて知らない)

まとめ

よくわからないものをよくわからないまま使うのはやめましょう

github.com