Ubuntu Linux サーバ

We typically recommend newcomers to oTree to deploy to Heroku (see instructions here).

しかし、oTree を Linux サーバで運用したい場合もあります。理由は以下のようなものが考えられます:

  • 実験室にインターネットがない
  • サーバの設定を完全にコントロールしたい
  • パフォーマンスを向上させたい (ローカルサーバは遅延が少ない)

apt-get パッケージのインストール

以下を実行します:

sudo apt-get install python3-pip git

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 を使用します。ただし、 PATHDATABASE_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 番ポートでサーバを動かすことができます。しかし、複数の人が同時に実験を行う必要がある場合は、 80008001 など複数のポートでサーバを動かす必要があります。