Ubuntu Linux サーバ¶
We typically recommend newcomers to oTree to deploy to Heroku (see instructions here).
しかし、oTree を Linux サーバで運用したい場合もあります。理由は以下のようなものが考えられます:
- 実験室にインターネットがない
- サーバの設定を完全にコントロールしたい
- パフォーマンスを向上させたい (ローカルサーバは遅延が少ない)
virtualenv の作成¶
virtualenv を使用するには以下を実行します:
python3 -m venv venv_otree
シェルを起動するたびにこの venv を有効にするには、 .bashrc
もしくは .profile
に以下を記述します:
source ~/venv_otree/bin/activate
virtualenv が有効になると、プロンプトの先頭に (venv_otree)
と表示されます。
データベース (Postgres)¶
Postgres と psycopg2 をインストールして、新しいデータベースを作成し、 DATABASE_URL
環境変数を設定してください (例: postgres://postgres@localhost/django_db` )。
サーバ上のデータベースをリセットする¶
oTree プロジェクトが入っているフォルダに cd
で移動します。必要なものをインストールし、データベースをリセットします。
pip3 install -r requirements.txt
otree resetdb
サーバの実行¶
本番用サーバのテスト¶
プロジェクトフォルダから、以下を実行します:
otree prodserver 8000
そして、サーバの IP アドレスもしくはホスト名に :8000
を付けてブラウザに入力します。
Nginx や Apache のようなリバースプロキシを使用していない場合は、ポート 80 で直接 oTree を実行したいと思うでしょう。この場合、スーパーユーザの権限が必要なので、 sudo を使用します。ただし、 PATH
や DATABASE_URL
などの環境変数を保持するために、いくつかの引数を追加する必要があります:
sudo -E env "PATH=$PATH" otree prodserver 80
もう一度、ブラウザで開いてみてください。今回は URL に :80 を追加する必要はありません。これはデフォルトの HTTP ポートだからです。
prodserver
は、 devserver
と異なり、ファイルが変更されても自動的に再起動しません。
残りの環境変数の設定¶
DATABASE_URL
を設定したのと同じ場所に以下をを追加します:
export OTREE_ADMIN_PASSWORD=my_password
#export OTREE_PRODUCTION=1 # uncomment this line to enable production mode
export OTREE_AUTH_LEVEL=DEMO
(オプション) プロセスコントロールシステム¶
上記の説明に従って、サーバーが動作するようになったら、 Supervisord や Circus のようなプロセス制御システムを使用することをお勧めします。これは、プロセスがクラッシュした場合に再起動したり、ログアウトしても実行し続けるなどの機能を持っています。
Circus¶
Circus をインストールして、プロジェクトフォルダに以下の内容の circus.ini
を作成します:
[watcher:webapp]
cmd = otree
args = prodserver 80
use_sockets = True
copy_env = True
そして、以下を実行します:
sudo -E env "PATH=$PATH" circusd circus.ini
これが正常に動作していれば、デーモンとして起動することができます:
sudo -E env "PATH=$PATH" circusd --daemon circus.ini --log-output=circus-logs.txt
Circus を停止するには、以下を実行します:
circusctl stop
(オプション) Apache, Nginx など¶
oTree は ASGIサーバで動作させる必要があるため、 Apache や Nginx をプライマリWebサーバとして使用することはできません。しかし、以下のような理由で、 Apache/Nginx をリバースプロキシとして使用したい場合があります:
- 静的ファイルの提供を最適化しようとしている (ただし、oTree は Whitenoise を使用しており、すでにかなり効率的である)
- 同じサーバで他の Web サイトをホストする必要がある
- SSL やプロキシ・バッファリングなどの機能が必要である
リバースプロキシを設定する場合は、 HTTP トラフィックだけでなく、ウェブソケットも有効にするようにしてください。
トラブルシューティング¶
ページをリロードするたびにランダムに変更されるなど、奇妙な動作が発生する場合、シャットダウンしなかった別の oTree インスタンスが原因である可能性があります。 oTree を停止して再度リロードしてみてください。
他の oTree ユーザとサーバを共有する¶
他の oTree ユーザとサーバを共有することができます。ただし、コードとデータベースがお互いに競合しないように、別々に管理する必要があります。
サーバ上では、oTree を使用する人ごとに異なる Unix ユーザを作成する必要があります。その後、各人は上述と同じ手順を踏むことになりますが、クラッシュを回避するために場合によっては異なる名前をつけることになります:
- 各人のホームディレクトリに virtualenv を作成
- 先に述べたように、異なる Postgres データベースを作成し、これを DATABASE_URL 環境変数に設定
これらの手順が完了したら、2人目のユーザはコードをサーバにアップロードしてから otree resetdb
を実行します。
複数の人が同時に実験を行う必要がない場合は、 otree prodserver 80
を使って、各ユーザが交代で 80 番ポートでサーバを動かすことができます。しかし、複数の人が同時に実験を行う必要がある場合は、 8000
や 8001
など複数のポートでサーバを動かす必要があります。