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.