Deployment¶
alchemiscale
consists of multiple services that can be independently scaled.
This document details on how to deploy and configure the “server” services in a number of ways.
The “server” services need not be deployed to the same physical host, though you may choose to do so.
Only Linux is supported as a platform for deploying alchemiscale
services; Windows and OSX are not recommended as deployment targets.
Single-host deployment with docker-compose¶
An alchemiscale “server” deployment consists of a neo4j
database (the “state store”), a client API endpoint, a compute API endpoint, and a reverse proxy (traefik
).
The client and compute API endpoints can be scaled by adjusting the number of workers.
A single docker-compose.yml
file defines all of these services.
Because our deployment process is containerized, the only requirement for the host is to be able to run docker compose
in a x86_64
environment.
Installation of alchemiscale
software dependencies is unnecessary on the host itself.
The “server” also requires an object store; see Setting up an object store.
Deployment instructions¶
Install docker compose. We recommend using “Scenario two: Install the Compose plugin” since Docker Desktop may require a paid subscription. First install the docker engine and then install the plugin.
Now clone the repository and then navigate to the alchemiscale/docker/alchemiscale-server
folder:
$ git clone https://github.com/OpenFreeEnergy/alchemiscale.git
$ cd alchemiscale/docker/alchemiscale-server
Note
It is not strictly necessary to clone the repository.
For host deployment, only alchemiscale/docker/alchemiscale-server/docker-compose.yml
and either a .env
file and/or environment variables set are needed.
By cloning the repository, a git pull
can be used to retrieve an updated .env.template
and docker-compose.yml
which may be useful.
Now make a copy of .env.template
:
$ cp .env.template .env
and modify .env
with your favorite text editor.
Warning
The .env
file will contain sensitive information and should not be checked into version control or shared publicly.
See .env.testing
for an example.
The neo4j
database requires the directory for the data store to exist before it starts.
This location should be on a storage medium that can handle the IOPS demand of a neo4j
database.
For example, using the location set in .env.testing
:
$ mkdir -p data/server
Now start the service with:
$ USER_ID=$(id -u) GROUP_ID=$(id -g) docker compose up -d
We set USER_ID
and GROUP_ID
to be the same as the user running the docker compose up -d
command.
Setting up a host on AWS EC2¶
Note
This is a guide on how to setup a fresh EC2 x86_64 instance running a Amazon Linux 2023 AMI.
These steps should generally work for other Linux distributions, but may require some modification e.g. the package manager may be apt
instead of dnf
.
Once connected to the instance, run the following commands:
$ sudo dnf check-release-update # Check for updates
$ sudo dnf --releasever=version update # Update if new version is available NOTE: This guide used Amazon Linux Version 2023.1.20230705
$ sudo dnf -y install docker git
$ sudo service docker start # Start docker service
$ sudo systemctl enable docker.service # Start docker service on boot
$ sudo usermod -a -G docker ec2-user # Add ec2-user to docker group
$ newgrp docker # Trick so we don't have to reboot (or login and logout) after adding ec2-user to docker group
# Now we have to manually install the docker compose plugin until this issue gets resolved https://github.com/amazonlinux/amazon-linux-2023/issues/186
$ DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} # Set location to install plugin
$ mkdir -p $DOCKER_CONFIG/cli-plugins # Create the directory to install the plugin
$ curl -SL https://github.com/docker/compose/releases/download/v2.19.1/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose # Download plugin
$ chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose # Set executable permissions to the plugin
$ docker info # Test if everything works
$ docker compose version # Test if plugin was installed correctly
Now the instance has all of the dependencies required for docker-compose
-based deployment (Deployment instructions)
Kubernetes-based deployment with alchemiscale-k8s¶
To deploy alchemiscale
to a Kubernetes cluster, review the resources defined and detailed in alchemiscale-k8s.
Setting up an object store¶
An “object store” is also needed for a complete server deployment. Currently, the only supported object store is AWS S3.
Create a private AWS S3 bucket, then provide the following environment variables to the client and compute API services:
AWS_S3_BUCKET
The name of the AWS S3 bucket to use.
AWS_S3_PREFIX
The prefix within the bucket to use for all objects; typically set to
objectstore
AWS_DEFAULT_REGION
The AWS region the bucket exists in.
If your API services are deployed on AWS resources, you should grant those resources role-based access to S3. If your API services are deployed on resources outside AWS, you will need to give your services an access key on a user account with S3 access permissions.
AWS_ACCESS_KEY_ID
The ID of the access key.
AWS_SECRET_ACCESS_KEY
The access key content itself.
No additional setup is required for the object store.