Laxy is a web application designed to simplify launching routine genomic pipeline analyses.
Laxy can be run under Docker Compose for local development and testing.
git clone --recurse-submodules https://github.com/MonashBioinformaticsPlatform/laxy.git
cd laxy
docker compose -f docker-compose.yml -f docker-compose.local-dev.yml build
docker compose --compatibility -f docker-compose.yml -f docker-compose.local-dev.yml up -d
# Wait for services to come online
# In particular, the frontend can take a few minutes to build upon startup - you can monitor the logs using:
#
# docker compose logs -f dev-frontend-server
#
# docker compose logs -f django
# Frontend is at: http://localhost:8002
# Django admin is at: http://localhost:8001/admin
# Default username/password is: admin/adminpass
The Laxy frontend is a Vue Single-Page Application that runs in the browser and communicates with a Laxy backend server.
cp -n .env.example .env
cd laxy_frontend
npm install
npm run build:dev
npm run server
open http://localhost:8002/
Create .env
(see .env.example
), change frontend variables as required (eg LAXY_FRONTEND_*
).
Environment variables (eg as seen via the env
shell command) will override variables read from .env
.
npm run build:prod
These variables are used by the Webpack (dotenv-webpack
) build to substitute references to process.env.SOME_ENV_VAR
.
The Laxy backend is a RESTful web service for managing pipeline jobs across various compute resources. It is based on Django and Celery.
Dependencies:
- Python 3.6+
# Create a Python virtual environment, install package dependencies
python3.6 -m venv venv
source venv/bin/activate
pip install -U -r requirements.txt
# For development
pip install -U -r requirements-dev.txt
Run tests:
./manage.py test --noinput
Create a user and database on Postgres (run psql
):
CREATE ROLE laxy WITH LOGIN PASSWORD 'blablafooword';
CREATE DATABASE laxy;
ALTER DATABASE laxy OWNER TO laxy;
GRANT ALL PRIVILEGES ON DATABASE laxy TO laxy;
Configuration is taken from a .env
file.
Environment variables (eg LAXY_*
) will override any variables defined in .env
.
# Copy the example settings environment and edit as required,
# including the database name and password above.
cp -n .env.example .env
vi .env
(To manually source the .env
file into your login shell for some purpose, do export $(grep -v '^#' .env | xargs)
).
Initialize the database, create an admin user:
./manage.py migrate --no-input --run-syncdb
# ./manage.py migrate contenttypes
./manage.py migrate
./manage.py makemigrations django_celery_results
./manage.py makemigrations sites
./manage.py makemigrations laxy_backend
./manage.py migrate --fake-initial
./manage.py createinitialrevisions
./manage.py makemigrations
./manage.py migrate
./manage.py createsuperuser
# You may want to pre-populate the database with some data
./manage.py loaddata laxy_backend/fixtures.json
source venv/bin/activate
DEBUG=yes python3.6 manage.py runserver 0.0.0.0:8000
celery -A laxy worker -B -E -Ofair -l info -Q celery,low-priority \
--statedb=laxy_celery_worker.state
FLOWER_BASIC_AUTH=user:pass celery -A laxy flower --port=5555
OpenAPI / Swagger API (via drf_openapi):
DRF CoreAPI docs: http://localhost:8000/coreapi/
See notes on running under Docker Compose
Reference genomes currently follow the naming and path layout used by iGenomes eg Homo_sapiens/Ensembl/GRCh38
.
This is currently both the internal genome ID used by Laxy and the relative path where the downloaded genome is stored.
- Add the genome to the frontend in
laxy_frontend/src/config/genomics/genomes.ts
- Add the genome to the backend in
laxy_backend/data/genomics/genomes.py
- (Optional but recommended): Add on-demand downloading of the genome to the appropriate
run_job.sh
script (eg via thedownload_ref_urls
bash function). Otherwise pre-install it at the correct path.
This is documented here in the hopes it can be streamlined in the future (eg via simple genome 'service').
Currently only possible for rnasik
, and ugly around the edges.
This process will be refined as pipeline are made more modular/pluggable.
Create a directory laxy_backend/templates/job_scripts/rnasik/{version}/input
, where {version}
is the new pipeline version.
Create a conda_environment.yml
file in this directory. Follow the examples for other versions, changing the
appropriate version numbers for packages and the environment name.
Add the version number to the pipeline_versions
list in laxy_frontend/src/components/PipelineParams.vue
.
Optionally change the default version used in store.ts
, pipelineParams.pipeline_version
.
Optionally change the default value used in laxy_backend/views.py
, default_pipeline_version
(local variable in JobCreate
).
./manage.py graph_models --pygraphviz -g -o docs/models_uml.png laxy_backend