Deployments how-to’s guides
For a simple deployment using a containerized version of Alyx interacting with a containerized database, refer to the how-to guide.
For running alyx directly on the host machine, follow the instructions below.
Install a development version of Alyx on the host machine
Copy the settings files from the deploy folder inside of the alyx project. Those files are ignored by git.
cp ./deploy/docker/settings-deploy.py alyx/alyx/settings.py
cp ./deploy/docker/settings_lab-deploy.py alyx/alyx/settings_lab.py
Copy the environment template file and edit the path to the logs
cp ./alyx/alyx/environment_template.env ./alyx/alyx/.env
vi ./alyx/alyx/.env
In the environment file, you need to provide a writable log directory and change the postgres host to localhost
APACHE_LOG_DIR=/Users/olivier/scratch/alyxlogs
POSTGRES_HOST=localhost
First we will start the docker service containing the database and make sure we can connect to it using the current .env settings.
The showmigrations command will fail if the database is not available.
docker compose -f ./deploy/docker-compose-postgres.yaml up -d
cd alyx
python manage.py showmigrations
Next we can start collecting the static files, migrating the database, setup the minimum amount of data and create a superuser.
python manage.py collectstatic --noinput
python manage.py check
python manage.py migrate
../scripts/load-init-fixtures.sh
python manage.py createsuperuser
python manage.py runserver
NB: the password above is the postgres database user password. It is used by Django only to connect to the database, and is distinct from any user password on admin website.
You can then visit http://localhost:8000/admin, connect with your superuser credentials.
Building the docker containers
We have built our images on top of the apache2 images as it is the webserver we currently use. However as shown in the getting started section, those images are suitable for use with different servers such as gunicorn.
# need to be in the build folder to copy some apache settings
cd ./alyx/deploy/docker/
# builds the base container
docker buildx build . \
--platform linux/amd64 \
--tag internationalbrainlab/alyx_apache_base:latest \
-f ./Dockerfile_base
# builds the top layer
docker buildx build . \
--platform linux/amd64 \
--tag internationalbrainlab/alyx_apache:latest \
-f ./Dockerfile \
--build-arg alyx_branch=deploy \
--no-cache
Advanced topics
Apache webserver and interaction with wsgi
Put the site configuration here: /etc/apache2/sites-available/001-alyx.conf
make sure the paths within the file match the alyx installation path.
update ServerName parameter
ServerName alyx.internationalbrainlab.orgit should match the
alyx/alyx/settings_lab.pyALLOWED_HOSTSparameter
Activate the website
sudo a2ensite
001-alyx-main
Restart the server, 2 commands are provided here for reference. Reload is recommended on a running production server as it should not interrupt current user transactions if any.
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/apache2 reload
Location of error logs for apache if it fails to start
/var/log/apache2/