-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
104 lines (89 loc) · 4.35 KB
/
Copy pathdocker-compose.yml
File metadata and controls
104 lines (89 loc) · 4.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# ─────────────────────────────────────────────────────────────────────────────
# LycianWay — Docker Compose
#
# Quick start:
# 1. cp .env.example .env # fill in ANTHROPIC_API_KEY + DATABASES_DIR
# 2. docker compose build # ~30-60 min first time (conda envs)
# 3. docker compose up -d # start in background
# 4. docker compose logs -f # stream logs
# 5. docker compose down # stop
#
# Database volumes:
# Set DATABASES_DIR in .env to the directory containing your databases.
# Expected subdirectory layout:
# $DATABASES_DIR/
# kraken2_db/ → hash.k2d (Kraken2)
# bact_databases_ALL/checkm2_v2_20210323/uniref100.KO.1.dmnd (CheckM2)
# checkv_db/ → genome_db.faa.dmnd (CheckV, optional)
# database_pharokka/ → PHROG_phrogs_profile_db (optional)
# ─────────────────────────────────────────────────────────────────────────────
services:
genome-platform:
build:
context: .
dockerfile: docker/Dockerfile
image: lycianway:latest
container_name: genome-platform
restart: unless-stopped
ports:
- "${PORT:-8000}:8000"
environment:
# ── Required ───────────────────────────────────────────────────────────
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
# ── Container-internal tool paths (do not change) ──────────────────────
- CONDA_BASE=/opt/conda
- BANDAGE_BIN=/opt/conda/envs/analiz/bin/Bandage
- AUTOCYCLER_BIN=/usr/local/bin/autocycler
# ── Database paths inside the container (relative to /databases mount) ─
- KRAKEN2_DEFAULT_DB=/databases/kraken2_db
- CHECKM2_DB=/databases/bact_databases_ALL/checkm2_v2_20210323/uniref100.KO.1.dmnd
- CHECKV_DB=/databases/checkv_db
# ── Python / app ───────────────────────────────────────────────────────
- PYTHONUNBUFFERED=1
volumes:
# ── Databases (host → container, read-only) ────────────────────────────
# Point DATABASES_DIR in .env to your databases root directory.
- ${DATABASES_DIR:-/home/analysis/databases_all}:/databases:ro
# ── Persistent job data (Docker-managed named volumes) ─────────────────
- genome_uploads:/app/data/uploads
- genome_results:/app/data/results
- genome_logs:/app/data/logs
# ── Development: hot-reload source code (comment out for production) ───
# - ./backend:/app/backend:ro
# - ./frontend:/app/frontend:ro
# ── Resource limits (adjust to your server) ────────────────────────────────
deploy:
resources:
limits:
cpus: "${CPU_LIMIT:-16}"
memory: "${MEM_LIMIT:-32G}"
reservations:
cpus: "2"
memory: 4G
# ── Security hardening ─────────────────────────────────────────────────────
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
cap_add:
- SETUID # required for subprocess execution
- SETGID
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
logging:
driver: "json-file"
options:
max-size: "50m"
max-file: "5"
# ── Named volumes ──────────────────────────────────────────────────────────────
volumes:
genome_uploads:
driver: local
genome_results:
driver: local
genome_logs:
driver: local