Step 3: Database and Supervisor

We now setup the PostgreSQL database and prepare a supervisor script which makes sure that the oTree web server is automatically started and restarted if if fails for any reason.

PostgreSQL

We start by setting up the database and a database user for oTree:

sudo -i -u postgres psql postgres -c "CREATE DATABASE django_db;"
sudo -i -u postgres psql postgres -c "CREATE USER otree_user WITH PASSWORD 'CHANGE_THIS_PASSWORD_TO_YOUR_LIKING';"
sudo -i -u postgres psql postgres -c "GRANT ALL PRIVILEGES ON DATABASE django_db TO $db_user;"

Note: You can use tr -cd '[:alnum:]' < /dev/urandom | fold -w30 | head -n1 to quickly generate a random 30 character password from the command line.

Supervisor

We need to make sure that the oTree web server is started on system boot. It should also automatically restart, if it fails for any reason. To do so, we setup a supervisor script:

sudo nano /etc/supervisor/condf.d/otree.conf

Include the following lines:

[program:otree]
command=/home/otree/venv_otree/bin/otree runprodserver 8000
directory=/home/otree/oTree
stdout_logfile=/home/otree/otree-supervisor.log
stderr_logfile=/home/otree/otree-supervisor-errors.log
autostart=true
autorestart=true
environment=
    PATH="/home/otree/venv_otree/bin/:%(ENV_PATH)s",
    DATABASE_URL="postgres://otree_user:YOUR_DATABASE_PASSWORD@localhost/django_db",
    OTREE_ADMIN_PASSWORD="YOUR_WEBINTERFACE_ADMIN_PASSWORD",
    OTREE_PRODUCTION=1,
    OTREE_AUTH_LEVEL=STUDY,

Make sure to replace YOUR_DATABASE_PASSWORD with the one you set above. Also come up with a password for the oTree web interface and replace YOUR_WEBINTERFACE_ADMIN_PASSWORD accordingly. Finally, save the file and exit nano with [ctrl] + [s] and [ctrl] + [x].

Environment Variables

Finally, we want otree to be able to manually reset the database and invoke other oTree commands. We need to make sure that the credentials are available as environment variables whenever otree logs in.

Edit /home/otree/.otree_env with nano:

nano /home/otree/.otree_env

Add the following lines to the end:

export DATABASE_URL="postgres://otree_user:YOUR_DATABASE_PASSWORD@localhost/django_db"
export OTREE_ADMIN_PASSWORD="YOUR_WEBINTERFACE_ADMIN_PASSWORD"
export OTREE_PRODUCTION=1
export OTREE_AUTH_LEVEL=STUDY

Again, make sure to replace YOUR_DATABASE_PASSWORD with the one you set above. Also come up with a password for the oTree web interface and replace YOUR_WEBINTERFACE_ADMIN_PASSWORD accordingly. Finally, save the file and exit nano with [ctrl] + [s] and [ctrl] + [x].

Continue with step 4.