Database Installation
=====================
Here, we will cover how to get up and running with the MySQL database and (optionally) the S3 store.
Hardware Requirements
---------------------
For optimal performance of the Antelop MySQL database, consider the following hardware recommendations:
- **CPU**: 4+ cores recommended. Database performance benefits from multiple cores for concurrent operations.
- **RAM**: Minimum 8GB, 16-32GB recommended for production environments. MySQL's performance is heavily dependent on having sufficient memory for caching and query processing.
- **Storage**:
- SSD storage strongly recommended for database files
- Minimum ~100GB for most lab MySQL databases
- If using S3 storage, this will be substantially larger, and depends heavily on your requirements. Labs with high-throughput electrophysiology and imaging data may require around 100GB per day.
- RAID configuration for error robustness (we use ZFS for this)
- **Network**: 1 Gbps or faster network interface for database servers, especially when hosting remotely
- **Backup Storage**: Additional storage equivalent to at least 2x your database size for backups
Software Prerequisites
----------------------
To run the Antelope database, you'll need:
- **Docker**: Version 20.10.0 or newer
- `Docker Installation Guide `_
- Ensure the Docker daemon is running and you have permissions to use it
- **Docker Compose**: Version 2.0.0 or newer
- `Docker Compose Installation Guide `_
- Note: Docker Desktop for Mac and Windows includes Docker Compose
- **Linux Distribution**: Any modern Linux distribution (Ubuntu 20.04+, Debian 11+, CentOS 8+, etc.)
- While Docker runs on macOS and Windows, we recommend Linux for production database servers
- Kernel version 5.4 or newer recommended for optimal Docker performance
- **Network Connectivity**: The server should have stable network connectivity with fixed IP or hostname
All other dependencies (MySQL, S3 components) are containerized and will be automatically pulled by Docker.
Installation
------------
We provide a very straightforward `docker-compose` setup for the database. You can find the `docker-compose.yml` file under `install_scripts/database/` in the Antelope repository. To pull this automatically to your server, run:
.. code-block:: bash
curl -O https://raw.githubusercontent.com/marcotripodi/Antelope/main/install_scripts/database/docker-compose.yml
Or alternatively, if you want the no-S3 version, run:
.. code-block:: bash
curl -O https://raw.githubusercontent.com/marcotripodi/Antelope/main/install_scripts/database/docker-compose-no-s3.yml
Now open this file in a text editor such as `vim` or `nano` and fill in root credentials. These credentials are, obviously, very important, so use a strong password, and store them somewhere safe.
With this done you can now boot up the database with:
.. code-block:: bash
docker-compose -f docker-compose.yml up -d
Or:
.. code-block:: bash
docker-compose -f docker-compose-no-s3.yml up -d
This will start the database in the background. You can check that it is running with:
.. code-block:: bash
docker ps
You should see a container with the name `mysql` running.
To stop the database, run:
.. code-block:: bash
docker-compose -f docker-compose.yml down
Or:
.. code-block:: bash
docker-compose -f docker-compose-no-s3.yml down
The data will persist on your server at `/var/lib/mysql`, so you can safely stop the database without losing any data. However, if performing major administrative tasks, it is worth :ref:`backup` first.
.. _initialization:
Initialization
--------------
Once the database is up and running, we need to initialize the internal MySQL databases, tables, and users. To do this, we provide a script that will run the necessary commands to set up the database. This script is located in the `install_scripts/database/` directory of the Antelop repository.
From a local machine, with a local installation of Antelop, run:
.. code-block:: bash
curl -O https://raw.githubusercontent.com/marcotripodi/Antelope/main/install_scripts/sql-init/experimenters.csv
curl -O https://raw.githubusercontent.com/marcotripodi/Antelope/main/install_scripts/sql-init/init_db.py
You now need to edit the `experimenters.csv` file to add the details of the experimenters who will be using the database. The necessary fields are self-explanatory.
Now run the script:
.. code-block:: bash
python init_db.py
You will be prompted for login credentials. The username in this case should be `root`, and the password should be the one you set in the `docker-compose.yml` file. The script will then create the necessary tables and users, and populate them with the experimenters you specified in the `experimenters.csv` file.
Note that this method is also used to update the experimenters in the database - this is done by simply running the script again with the updated `experimenters.csv` file. The script will automatically detect any changes and update the database accordingly.
Once you have some users in the `experimenters` table, you need to give them MySQL accounts and privileges to login to Antelop. See the :ref:`adding-users` section for more details on this.