A full-stack web application for visualizing and querying the recount3 RNA-seq dataset.
This project includes:
- PostgreSQL database to store public exon, junction, and annotation data
- Flask server REST API with server-side pagination and filtering
- Vue 3 + ag-Grid frontend for interactive data exploration
- Nginx reverse proxy for serving the frontend and API routing
Make sure you have Docker and Just installed.
To update dependencies, build, and start all services:
just up-devThis will:
- Update Python dependencies (
poetry update) - Build the application stack
- Start all services via Docker Compose
- Initialize the dataset metadata with pyrecount
To stop services and remove volumes (e.g. PostgreSQL data):
just down| Service | Purpose | Technology |
|---|---|---|
| db | PostgreSQL 15 database initialized from infra/postgres/init.sql |
PostgreSQL 15 |
| loader | Python service that populates project metadata (runs once at startup) | Python 3.11+ |
| server | Flask API server using Gunicorn for production deployment | Flask + Gunicorn |
| app | Vue 3 frontend compiled into static assets and served by NGINX | Vue 3 + Vite |
| nginx | Public reverse proxy that serves frontend and forwards API requests | Nginx |
| Service (Container) | Host → Container Port | Purpose |
|---|---|---|
nginx (recount-stack-nginx-1) |
80 → 80 | Public frontend + API |
server (recount-stack-server-1) |
(internal only) → 8080 | Flask API (Gunicorn) |
db (recount-stack-db-1) |
(internal only) → 5432 | PostgreSQL (internal in prod) |
- pgdata: Persists PostgreSQL data between runs
- init.sql: Initializes the recount3 schema on first boot
Docker secrets are used for managing credentials (to be replaced with Vault):
Secrets are mounted at runtime inside each container at /run/secrets/.
Docker Compose does not encrypt secrets, they are just mounted from files and not committed to version control.
Create these files in your secrets/ directory:
secrets/
├── db.txt # PostgreSQL password
├── loader.env # Loader secrets/env
└── server.env # Server secrets/env