bratサーバをEC2に立てて複数人でアノテーションできるようにした

アノテーション作業の効率化のため、bratサーバを立てることにしました。

EC2上にdockerを使って構築しました。

これでウェブ経由で複数人でアノテーションを行えます。

Dockerfile解説

さてbratサーバのDockerfileですがありがたいことに先駆者がいます。

今回はそちらのDockerfileを使いました。

要素の解説。

brat

bratはアノテーションツールです。詳しくはこちら

バージョンはv 1.3を使います。

Githubで管理されていますが、後述するようにMasterリポジトリはエラーが出ます(2018/12/22現在)。

Githubではなく、公式のサイト経由でダウンロードして展開したものを利用します。

Python

2系が推奨みたいなので従います。

The brat server is implemented in Python, and requires version 2.5 (or higher in the 2.x series) of python to run. If you do not currently have python installed, we recommend installing the most recent version of python in the 2.x series from python.org.

brat installation

GithubのMasterブランチは3系で開発されているっぽくて「3でいけるやん」と思ったらエラーが出ました。

ModuleNotFoundError: No module named 'filelock'

解消法がわからなかったので公式サイトからv 1.3をダウンロードして素直にPython2系を使います。

Apache

bratはチュートリアル通りstandalone.pyを起動した場合、Python標準ライブラリのBaseHTTPServerを利用してサーバを立てます。簡単な動作確認や個人的な作業にはこれで十分です。

しかし本番環境ではセキュリティを考えてApacheなどのウェブサーバを使いましょうとのこと。今回は多数の人間にアクセスしてもらうbratサーバを作ることを目的としているのでApacheを入れます。

However, the standalone server is not currently security-hardened or as comprehensively tested as the rest of brat. For these reason, we strongly recommend serving brat via a full web server such as Apache in production environments, projects involving sensitive data, and on systems accessible from the internet.

brat installation

Dockerfile

肝心のDockerfileはこちら。

残念なことに既にメンテナンスを放棄されたようですが、2018年12月22日現在問題なく稼動しました。

フォークしてREADMEを日本語化しました。他のコードの部分も日本語コメントに置き換える予定です。

AWS EC2を立てる

むちゃんこ久しぶり。

  • インスタン: AWS EC2 t2.small
  • OS: CentOS 7

過去の自分の投稿を見ながらやる。頼りになる男だぜ。

ちゃかちゃか作ってSSH接続。こっからはEC2インスタンス内で作業。

インスタンスタイプはt2.microにしました。十分十分。

Elastic IP設定して、80番ポートを開けておきます。

Dockerコンテナを起動

とりあえずgit、dockerをEC2上にインストール。

gitコマンドで先ほどのリポジトリをclone。

docker volumeを作成。ここにデータや設定ファイルを置きます。

$ docker volume create --name brat-data
$ docker volume create --name brat-cfg

volumeができたか確認します。

$ docker volume ls
DRIVER VOLUME NAME
local  brat-cfg
local  brat-data

bratに複数アカウントを作成したい場合は、このタイミングでusers.jsonファイルを作成します(アカウントが一つでよければスキップ)。

users.jsonはbrat-cfg/ ディレクトリ下。

volumeのホスト上の場所は以下のコマンドで確認します。

$ docker volume inspect brat-cfg

デフォルトでは以下の位置にusers.jsonを作成します。

$ vi /var/lib/docker/volumes/brat-cfg/_data/users.json

jsonファイルの中身は以下の形でユーザ名とパスワードを記述します(もちろん複数可能)。

{
"user1": "pass1",
"user2": "pass2"
}

Dockerfileに基づいてイメージを構築します。

$ docker build . -t roy29fuku/brat

-tでタグ名を指定します。

しばらくイメージの構築に時間がかかります。

イメージが作成されたか確認します。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
roy29fuku/brat      latest              b1e79c2926bc        25 hours ago        413MB

各種引数を渡してdockerコンテナを起動します。

ここでbrat初期設定時に必要なユーザ、パスワード、emailを指定します。

このアカウントでログイン可能です。

$ docker run --name=brat -d -p 80:80 -v brat-data:/bratdata -v brat-cfg:/bratcfg -e BRAT_USERNAME=brat -e BRAT_PASSWORD=brat -e BRAT_EMAIL=brat@example.com roy29fuku/brat

–nameはコンテナ名-dはデタッチドモード-pはポート-vはボリューム-eは環境変数を指定します。

ホスト(EC2)の80番ポートがbratサーバを動かしているDockerの80番ポートにつながりました。

EC2のIPアドレスなりを叩いてアクセスしてみましょう。

bratサーバが表示されればOK!

右上のログインボタンから設定したアカウントでログインできるか確認してください。

Dockerコンテナの作り直し

users.jsonはdocker build時に参照されます。

つまり後から書き換えても反映されないのでユーザを追加したい場合はコンテナの停止・削除を行い、

$ docker stop brat
$ docker rm brat

users.jsonに追記した上で先述のdocker buildコマンドを実行します。

もしくは、dockerコンテナ内に入って、

$ docker exec -it brat bash
$ vi /var/www/brat/brat-v1.3_Crunchy_Frog/config.py

直接49行目のUSER_PASSWORDの位置に追記すればアカウントを登録できます。

ただし、この場合dockerコンテナを再起動すると変更が消えてしまうのでオススメしません。

ftpでファイルを置けるようにする

AWSコンソールでEC2開きます。

セキュリティグループのインバウンドに21番ポートを追加します。

あとはFTPソフトで接続すればローカルのデータを簡単にアップできます。

アップロード先は以下のコマンドで調べられます。

$ docker volume inspect brat-data

デフォルトでは/var/lib/docker/volumes/brat-data/_dataです。

参考

コメントを残す