A pre-configured, containerized Galaxy instance built for the FairFlow bioinformatics framework. Ships ready-to-use with a clean interface, Docker-based tool execution, and an automatic example dataset — no build step required for end users.
- One-command startup — pull and run with a single
docker compose up - Docker-in-Docker tool execution — Galaxy tools run inside isolated Docker containers via the host socket
- Lemaitre integration — drag-and-drop tool deployment service pre-wired and ready at port 8081
- Pre-loaded example dataset —
setA.csv(a 980-gene × 501-sample scRNA-seq matrix) is automatically uploaded to a public shared history on first boot - Clean UI — Interactive Tools and Workflows sections removed from the interface; only Custom Functions are shown
- Custom welcome page — step-by-step guide for new users built into the Galaxy home screen
- Docker Desktop (Windows/macOS) or Docker Engine + Compose (Linux)
- No local build required — the image is pulled automatically from GitHub Container Registry
Save this docker-compose.yaml to a local folder:
services:
galaxy:
image: ghcr.io/fairflow-bioinformaticsframework/fairflow-galaxy:latest
container_name: galaxy
hostname: galaxy
privileged: true
ports:
- "8080:80"
- "8021:21"
- "8022:22"
volumes:
- galaxy-storage:/export/
- personal-tools:/srv_tools/
environment:
- GALAXY_CONFIG_ALLOW_PATH_PASTE=True
- GALAXY_CONFIG_MASTER_API_KEY=fairflow_master_key_123
- GALAXY_CONFIG_TOOL_CONFIG_FILE=/srv_tools/my_tools.xml
- GALAXY_CONFIG_BRAND=Reproducible Bioinformatics Galaxy
- GALAXY_DOCKER_ENABLED=True
- ENABLE_TTS_INSTALL=False
- GALAXY_CONFIG_CLEANUP_JOB=never
- GALAXY_CONFIG_ENABLE_BETA_WORKFLOW_MODULES=False
- GALAXY_CONFIG_INTERACTIVETOOLS_ENABLE=False
- GALAXY_CONFIG_DISPLAY_BUILTIN_CONVERTERS=False
- NONUSE=reports,nodejs,condor,slurmctld,slurmd,docker
restart: on-failure
lemaitre:
image: ghcr.io/fairflow-bioinformaticsframework/lemaitre:1.3.3
container_name: galaxy-lemaitre-1
ports:
- "8081:8000"
volumes:
- personal-tools:/srv_tools/
environment:
- TOOL_DIR=/srv_tools/
- TOOL_CONF=/srv_tools/my_tools.xml
- SECTION_NAME=Custom Functions
restart: on-failure
volumes:
personal-tools:
galaxy-storage:docker compose upGalaxy will be available at http://localhost:8080 after ~2–3 minutes.
Lemaitre will be available at http://localhost:8081.
On first startup, Galaxy will automatically:
- Create an admin user
- Upload
setA.csvto a public shared history called Example Data - Make the history importable by all users
Subsequent restarts skip this step since the history already exists.
| Service | URL | Description |
|---|---|---|
| Galaxy | http://localhost:8080 | Main Galaxy interface |
| Lemaitre | http://localhost:8081 | Tool deployment service |
- In Galaxy, go to Data → Histories → Published Histories
- Open Example Data
- Click "Import this history"
- The
setA.csvdataset will appear in your history panel
- In the left panel under Custom Functions, click topX
- Select
setA.csvas the input matrix - Set the parameters:
- Format: csv
- Separator: comma
- Raw count: TRUE
- Threshold: 10000
- Type: expression
- Click Run Tool
Two outputs will appear in your history:
- A PDF with the gene expression distribution plot
- A TXT file with the filtered expression matrix (top 10,000 expressed genes)
Lemaitre allows you to upload Galaxy XML tool wrappers into this instance without restarting anything.
- Open http://localhost:8081
- Upload your
.xmltool file - The tool appears immediately under Custom Functions in Galaxy
Each tool must reference a Docker image in the XML:
<requirements>
<container type="docker">your-image:tag</container>
</requirements>All jobs run inside isolated Docker containers. The host Docker socket is mounted inside Galaxy to allow container execution.
Host machine
├── Docker socket (/var/run/docker.sock)
│
├── galaxy (container)
│ ├── Galaxy server (port 80 → 8080)
│ ├── PostgreSQL (internal)
│ ├── RabbitMQ (internal)
│ ├── /export/ volume → galaxy-storage (DB, files, config)
│ ├── /srv_tools/ volume → personal-tools (tool XMLs, tool_conf)
│ └── /default_tools/ (baked into image: topX.xml, setA.csv)
│
└── galaxy-lemaitre-1 (container)
├── Lemaitre server (port 8000 → 8081)
└── /srv_tools/ volume → personal-tools (shared with galaxy)
When a tool runs, Galaxy executes a Docker container on the host daemon using the mounted socket. The job working directory inside /export/ is mounted into the child container via the galaxy_galaxy-storage named volume.
The Galaxy image is built automatically via GitHub Actions on every push to main and published to:
ghcr.io/fairflow-bioinformaticsframework/fairflow-galaxy:latest
- Base:
quay.io/bgruening/galaxy(Galaxy 24.1) docker-ce-cli— Docker client for launching tool containersbioblend— Python Galaxy API client (used for startup automation)- Custom
job_conf.xml— configures local runner with Docker enabled - Custom
welcome.html— FairFlow-branded home page with quick start guide - Patched
analysis.bundled.js— Interactive Tools and Workflows sections hidden from UI - Empty
tool_conf_interactive.xml— Interactive Tools panel suppressed topX.xmlandsetA.csvbaked into/default_tools/- Custom
startup.sh— orchestrates dockerd, tool copy, and API-based history seeding
Stop without losing data:
docker compose downStop and delete all data (full reset):
docker compose down -vUpdate to the latest image:
docker compose pull
docker compose down
docker compose upTo build the image locally instead of pulling from the registry:
- Clone this repository
- Replace
image:withbuild: .indocker-compose.yaml - Run:
docker compose build --no-cache
docker compose upFiles required in the same directory as the Dockerfile:
Dockerfilejob_conf.xmltopX.xmlsetA.csvwelcome.html
FairFlow is a transparency-first framework for reproducible and verifiable bioinformatics workflows. It enables the definition of a pipeline once (via Baryon) and automatic deployment across multiple environments (R, Python, Bash, Galaxy, Nextflow, StreamFlow), all executed inside deterministic containerized environments.