Repository navigation
Expand file tree
/
Copy pathdocker-compose.yaml
More file actions
128 lines (123 loc) · 4.66 KB
/
Copy pathdocker-compose.yaml
File metadata and controls
128 lines (123 loc) · 4.66 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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# Production/Staging docker-compose
#
# Configure via environment-specific .env files:
# Staging: docker compose --env-file .env.staging -p omnipath-staging up -d
# Prod: docker compose --env-file .env.prod -p omnipath-prod up -d
#
# DATA_DIR must be set to the path of a versioned parquet data directory, e.g.:
# DATA_DIR=../data/releases/latest (staging, symlink)
# DATA_DIR=../data/releases/v-20260225-071916 (prod, pinned)
#
# ONTOLOGY_DIR must be set to the path of OBO ontology files, e.g.:
# ONTOLOGY_DIR=../omnipath_build/data/silver
#
# GOLD_ROOT_DIR must be set to the root of gold resource zip outputs, e.g.:
# GOLD_ROOT_DIR=../omnipath_build/data/gold
#
# PostgreSQL tuning defaults assume a 12GB host with SSD storage. Override
# POSTGRES_* values in environment-specific .env files for other host sizes.
services:
omnipathv2-postgres:
build:
context: ./postgres
dockerfile: Dockerfile
environment:
POSTGRES_DB: omnipath
POSTGRES_USER: omnipath
POSTGRES_PASSWORD: omnipath
ports:
- "55432:5432"
command:
- postgres
- -c
- shared_buffers=${POSTGRES_SHARED_BUFFERS:-3GB}
- -c
- work_mem=${POSTGRES_WORK_MEM:-32MB}
- -c
- maintenance_work_mem=${POSTGRES_MAINTENANCE_WORK_MEM:-1GB}
- -c
- effective_cache_size=${POSTGRES_EFFECTIVE_CACHE_SIZE:-9GB}
- -c
- max_wal_size=${POSTGRES_MAX_WAL_SIZE:-12GB}
- -c
- min_wal_size=${POSTGRES_MIN_WAL_SIZE:-2GB}
- -c
- checkpoint_timeout=${POSTGRES_CHECKPOINT_TIMEOUT:-15min}
- -c
- checkpoint_completion_target=${POSTGRES_CHECKPOINT_COMPLETION_TARGET:-0.9}
- -c
- random_page_cost=${POSTGRES_RANDOM_PAGE_COST:-1.1}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U omnipath -d omnipath"]
interval: 5s
timeout: 5s
retries: 20
volumes:
- postgres18_data:/var/lib/postgresql
networks:
- dokploy-network
# API Service - FastAPI wrapper for ontograph + graph-native exports
api-service:
build:
context: .
dockerfile: api-service/Dockerfile.prod
restart: unless-stopped
environment:
ONTOLOGY_DATA_DIR: /data/obo
OMNIPATH_PARQUET_DIR: /data/parquet
ONTOLOGY_CACHE_DIR: /app/cache
OMNIPATH_GOLD_ROOT: /gold
DATABASE_URL: postgresql://omnipath:omnipath@omnipathv2-postgres:5432/omnipath
volumes:
- ${DATA_DIR:?DATA_DIR must be set}:/data/parquet:ro
- ${ONTOLOGY_DIR:?ONTOLOGY_DIR must be set}:/data/obo:ro
- ${GOLD_ROOT_DIR:?GOLD_ROOT_DIR must be set}:/gold:ro
- ontology_cache:/app/cache
networks:
- dokploy-network
depends_on:
omnipathv2-postgres:
condition: service_healthy
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8081/health')"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
# SvelteKit Frontend
omnipath-svelte:
build:
context: ./omnipath-svelte
dockerfile: Dockerfile
args:
PUBLIC_ENVIRONMENT: ${PUBLIC_ENVIRONMENT:-production}
PUBLIC_DOMAIN: ${PUBLIC_DOMAIN:-localhost}
API_SERVICE_URL: http://api-service:8081
DOCKERIZED: "true"
restart: unless-stopped
environment:
API_SERVICE_URL: http://api-service:8081
DOCKERIZED: "true"
OPENROUTER_API_KEY: ${OPENROUTER_API_KEY}
DATABASE_URL: postgresql://omnipath:omnipath@omnipathv2-postgres:5432/omnipath
DATABASE_URL_INTERNAL: postgresql://omnipath:omnipath@omnipathv2-postgres:5432/omnipath
OMNIPATH_PG_SCHEMA: public
CHAT_MODEL_PROVIDER: ${CHAT_MODEL_PROVIDER:-openrouter}
OPENROUTER_CHAT_MODEL: ${OPENROUTER_CHAT_MODEL:-gpt-4o}
ports:
- "8082:8082"
networks:
- dokploy-network
depends_on:
omnipathv2-postgres:
condition: service_healthy
api-service:
condition: service_healthy
networks:
dokploy-network:
external: true
volumes:
ontology_cache:
name: ${ONTOLOGY_CACHE_VOLUME_NAME:-omnipath-ontology-cache}
postgres18_data:
name: ${POSTGRES_DATA_VOLUME_NAME:-omnipath-postgres18-data}