A usual installation of Daiquiri contains of a set of different components:
- A directory holding all the settings and customisations, custom to your installation of Daiquiri. We will call this directory
app, but you can use any name you see fit. This
appdirectory corresponds to a project in Django terms.
django-daiquirilibrary, which is centrally maintained, and which is installed as a packacge using
- The application database to store the content, which is generated by the users of your Daiquiri installation. Currently, we support PostgreSQL, MySQL, MariaDB, and SQLite.
- A (bigger) scientific database, where the actual science data is stored. This can be MySQL, MariaDB, or PostgreSQL.
- A directory on your filesystem with static files to be downloaded.
- A RabbitMQ installation as message broker for the asyncronous queues.
- (Optional) An installation of WordPress to be uses as content management system.
For testing and development, you can run Daiquiri using your regular user account. On a production system, a dedicated user account should be used. For this documantation we will use a user called
daiquiri with the group
daiquiri and the home directory
/srv/daiquiri. This user can be created with:
useradd -m -d /srv/daiquiri -c "Daiquiri user" -s /bin/bash daiquiri
Do not use the
root user to run Daiquiri! It is a bad idea anyway and several steps of the installation will not work.
sudo is used in the installation when needing root-privileges to install packages.
Although, most dependencies are installed from the Python Package Index, some dependecies need to be installed using the operation systems packages manager. Here we document the minimum prerequisites:
# Centos yum install -y \ epel-release \ git \ gcc gcc-c++ \ libxml2-devel libxslt-devel \ openssl-devel \ python3-devel # Debian or Ubuntu apt-get install -y \ git \ build-essential \ libxml2-dev libxslt-dev \ zlib1g-dev \ libssl-dev \ python3-dev \ python3-venv
Obtaining the app directory
The next step is to create the
app directory by cloning the corresponding repository.
git clone https://github.com/django-daiquiri/app
Note that this is not the main
django-daiquiri repository, only the configuration files. Inside this directory, you will find:
configdirectory, containing the main settings of your Daiquiri installation,
manage.pyscript, which is the main way to interact with your Daiquiri installation on the command line. Most of the following steps will use this script.
Install Python packages
After you have obtained the
app, you need to install the
django-daiquiri package and the other python dependencies. Change to the
app directory and create a Virtual Environment (this is done as your user or the created
daiquiri user, not as
cd app python3 -m venv env source env/bin/activate pip install --upgrade pip setuptools wheel
After the virtual environment is activated, the
django-daiquiri package can be installed using
pip install django-daiquiri
If you want to install the current master branch directly from GutHub, you alternatively use:
pip install git+https://github.com/django-daiquiri/daiquiri
The virtual environment encapsulates your Daiquiri installation from the rest of the system. This makes it possible to run several applications with different python dependencies on one machine and to install the dependencies without root permissions.
Important: The virtual enviroment needs to be activated, using
source env/bin/activate everytime a new terminal is used. This can be automated using your
The settings of a Daiquiri application are specified in two files:
config/settings/base.pyshould be part of the app repository and holds the basic settings for this particular site.
.envis excluded from the repository and should contain (possible secret information) about this machine. This file will be different on the development and the production system.
To set up the application, you need to create a new file
.env in your cloned
You can use
.env.sample as template, i.e.:
cp .env.sample .env
The different settings are explained in detail later in the documentation. For a minimal configuration, you need to set
SECRET_KEY=<a secret random string> SITE_URL=http://localhost:8000 DEBUG=True ASYNC=False DATABASE_DEFAULT=postgresql://<user>:<pass>@<host>/<db> DATABASE_DATA=postgresql://<user>:<pass>@<host>/<db> FILES_BASE_PATH=files QUERY_DOWNLOAD_DIR=download QUERY_UPLOAD_DIR=upload
As mentioned earlier, Daiquiri uses two separate database connections, one for the web application (
default) and one for the scientific data (
data). These database can be on different machines and you can even use MySQL for one and PostgreSQL for the other. For an SQLite3 database use
sqlite:///database.sqlite3 to create the database in the app directory. For PostgreSQL and peer auth use
In order to use the different database connections, install the corresponding package with
pip install psycopg2-binary # for PostgreSQL pip install mysqlclient # for MySQL or MariaDB
In your virtualenv, you can get the, which you need to perform on your database with the
python manage.py sqlcreate
After editing the settings, initialize the application using:
python manage.py migrate # initializes the web database python manage.py migrate --database tap # initializes the tap schema in the scientific db python manage.py migrate --database oai # initializes the oai schema in the scientific db python manage.py createsuperuser # creates an admin user python manage.py download_vendor_files # dowloads front-end files from the CDN
After these steps, Daiquiri can be run using Django’s intergrated development server:
python manage.py runserver
Then, Daiquiri is available on http://127.0.0.1:8000 in your (local) browser.
Several tasks in Daiquiri can make use of asyncronous tasks (e.g. scientic database queries). Daiquiri can be used without asyncronous tasks, but for any deployment setup this functionality is recomended. RabbiMQ needs to be installed for asyncronous tasks to work. For Debian and Ubuntu, RabbitMQ can be installed from the distribution:
apt-get install rabbitmq-server
For Centos 7/8, the offical repo needs to be installed as well as its erlang dependencies. This can be done from packagecloud.io:
# see also https://www.rabbitmq.com/install-rpm.html curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash yum install rabbitmq-server systemctl start rabbitmq-server systemctl enable rabbitmq-server
The asyncronous tasks can be activated the
.env file of your Daiquiri application:
For a more complicated RabbitMQ setup the
CELERY_BROKER_URL setting is used as explained here.
Daiquiri uses 3 different workers:
default: For miscanelous database queries performed by users.
query: For asynconous database queriesperformed by users.
download: For the server-side creation of download files and zip archives.
In a development setup these workers can be started using:
python manage.py runworker default python manage.py runworker query python manage.py runworker download
in your virtual app.