Servidor Ubuntu Linux

Normalmente recomendamos a los recién llegados a oTree que desplieguen en Heroku (ver instrucciones aquí).

Sin embargo, puedes preferir ejecutar oTree en un servidor Linux adecuado. Las razones pueden incluir:

  • Tu laboratorio no tiene internet.

  • Quieres tener control total sobre la configuración del servidor

  • Quieres un mejor rendimiento (los servidores locales tienen menos latencia)

Instalar paquetes de apt-get

Ejecutar:

sudo apt-get install python3-pip git

Crear un virtualenv

Es una buena práctica usar un virtualenv:

python3 -m venv venv_otree

Para activar este venv cada vez que inicies tu shell, pon esto en tu .bashrc o .profile:

source ~/venv_otree/bin/activate

Una vez que tu virtualenv esté activo, verás (venv_otree) al principio de tu prompt.

Base de datos (Postgres)

Instala Postgres y psycopg2, crea una nueva base de datos y establece la variable de entorno DATABASE_URL, por ejemplo: postgres://postgres@localhost/django_db

Restablecer la base de datos en el servidor

Usa cd para ir a la carpeta que contiene tu proyecto oTree. Instala los requisitos y restablece la base de datos:

pip3 install -r requirements.txt
otree resetdb

Ejecutando el servidor

Prueba del servidor de producción

Desde tu carpeta de proyecto, ejecuta:

otree prodserver 8000

Luego navega en tu navegador a la IP/nombre de host de tu servidor seguido de :8000.

Si no estás utilizando un proxy inverso como Nginx o Apache, probablemente quieras ejecutar oTree directamente en el puerto 80. Esto requiere permisos de superusuario, así que usemos sudo, pero añadamos algunos argumentos adicionales para preservar variables de entorno como PATH, DATABASE_URL, etc:

sudo -E env "PATH=$PATH" otree prodserver 80

Intenta abrir tu navegador de nuevo; esta vez, no necesitas añadir :80 a la URL, porque ese es el puerto HTTP por defecto.

A diferencia de devserver, prodserver no se reinicia automáticamente cuando se cambian tus archivos.

Configurar las variables de entorno restantes

Agrega estos en el mismo lugar donde configuraste DATABASE_URL:

export OTREE_ADMIN_PASSWORD=my_password
#export OTREE_PRODUCTION=1 # uncomment this line to enable production mode
export OTREE_AUTH_LEVEL=DEMO

(Opcional) Sistema de control de procesos

Una vez que el servidor esté funcionando como se describe arriba, es una buena práctica utilizar un sistema de control de procesos como Supervisord o Circus. Esto reiniciará tus procesos en caso de que se bloqueen, los mantendrá en funcionamiento si cierras sesión, etc.

Circus

Instala Circus, luego crea un circus.ini en tu carpeta de proyecto, con el siguiente contenido:

[watcher:webapp]
cmd = otree
args = prodserver 80
use_sockets = True
copy_env = True

Luego ejecuta:

sudo -E env "PATH=$PATH" circusd circus.ini

Si esto está funcionando correctamente, puedes iniciarlo como un daemon:

sudo -E env "PATH=$PATH" circusd --daemon circus.ini --log-output=circus-logs.txt

Para detener circus, ejecuta:

circusctl stop

(Opcional) Apache, Nginx, etc.

No puedes usar Apache o Nginx como tu servidor web principal, porque oTree debe ejecutarse con un servidor ASGI. Sin embargo, aún podrías querer usar Apache/Nginx como un proxy inverso, por las siguientes razones:

  • Estás tratando de optimizar la entrega de archivos estáticos (aunque oTree utiliza Whitenoise, que ya es bastante eficiente)

  • Necesitas alojar otros sitios web en el mismo servidor

  • Necesitas características como SSL o proxy buffering

Si configuras un proxy inverso, asegúrate de habilitar no solo el tráfico HTTP, sino también los websockets.

Solución de problemas

Si experimentas un comportamiento extraño, como cambios aleatorios cada vez que se recarga la página, podría ser causado por otra instancia de oTree que no se apagó. Intenta detener oTree y recargar de nuevo.

Compartiendo un servidor con otros usuarios de oTree

Puedes compartir un servidor con otros usuarios de oTree; solo tienes que asegurarte de que el código y las bases de datos se mantengan separadas, para que no entren en conflicto entre sí.

En el servidor, debes crear un usuario Unix diferente para cada persona que use oTree. Luego, cada persona debe seguir los mismos pasos descritos anteriormente, pero en algunos casos nombrar las cosas de manera diferente para evitar conflictos:

  • Crea un virtualenv en su directorio personal

  • Crea una base de datos Postgres diferente, como se describió anteriormente, y establece esto en la variable de entorno DATABASE_URL.

Una vez que estos pasos estén completos, el segundo usuario puede subir el código al servidor y luego ejecutar otree resetdb.

Si no necesitas que varias personas realicen experimentos simultáneamente, entonces cada usuario puede turnarse para ejecutar el servidor en el puerto 80 con otree prodserver 80. Sin embargo, si varias personas necesitan realizar experimentos al mismo tiempo, entonces necesitarías ejecutar el servidor en múltiples puertos, por ejemplo, 8000, 8001, etc.