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
129
|
x-depends-on:
neo4j: &neo4j-dependency
condition: service_healthy
networks:
r2r-network:
name: r2r-network
driver: bridge
attachable: true
ipam:
driver: default
config:
- subnet: 172.28.0.0/16
labels:
- "com.docker.compose.recreate=always"
services:
r2r:
image: emrgntcmplxty/r2r:main
container_name: r2r
ports:
- "8000:8000"
environment:
- PYTHONUNBUFFERED=1
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_HOST=postgres
- POSTGRES_PORT=5432
- POSTGRES_DBNAME=${POSTGRES_DBNAME}
- POSTGRES_VECS_COLLECTION=${POSTGRES_VECS_COLLECTION}
- NEO4J_USER=${NEO4J_USER:-neo4j}
- NEO4J_PASSWORD=${NEO4J_PASSWORD:-ineedastrongerpassword}
- NEO4J_URL=${NEO4J_URL:-bolt://neo4j:7687}
- NEO4J_DATABASE=${NEO4J_DATABASE:-neo4j}
- OPENAI_API_KEY=${OPENAI_API_KEY:-}
- OLLAMA_API_BASE=${OLLAMA_API_BASE:-http://host.docker.internal:11434}
- CONFIG_NAME=${CONFIG_NAME:-}
- CONFIG_PATH=${CONFIG_PATH:-}
- CLIENT_MODE=${CLIENT_MODE:-false}
depends_on:
- postgres
networks:
- r2r-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/v1/health"]
interval: 10s
timeout: 5s
retries: 5
restart: on-failure
volumes:
- ${CONFIG_PATH:-/}:${CONFIG_PATH:-/app/config}
labels:
- "traefik.enable=true"
- "traefik.http.routers.r2r.rule=PathPrefix(`/api`)"
- "traefik.http.services.r2r.loadbalancer.server.port=8000"
- "traefik.http.middlewares.r2r-strip-prefix.stripprefix.prefixes=/api"
- "traefik.http.middlewares.r2r-add-v1.addprefix.prefix=/v1"
- "traefik.http.routers.r2r.middlewares=r2r-strip-prefix,r2r-add-v1,r2r-headers"
- "traefik.http.middlewares.r2r-headers.headers.customrequestheaders.Access-Control-Allow-Origin=*"
- "traefik.http.middlewares.r2r-headers.headers.customrequestheaders.Access-Control-Allow-Methods=GET,POST,OPTIONS"
- "traefik.http.middlewares.r2r-headers.headers.customrequestheaders.Access-Control-Allow-Headers=DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization"
- "traefik.http.middlewares.r2r-headers.headers.customresponseheaders.Access-Control-Expose-Headers=Content-Length,Content-Range"
r2r-dashboard:
image: emrgntcmplxty/r2r-dashboard:latest
container_name: r2r-dashboard
environment:
- NEXT_PUBLIC_API_URL=http://traefik:80/api
depends_on:
- r2r
networks:
- r2r-network
labels:
- "traefik.enable=true"
- "traefik.http.routers.dashboard.rule=PathPrefix(`/`)"
- "traefik.http.services.dashboard.loadbalancer.server.port=3000"
postgres:
image: pgvector/pgvector:pg16
container_name: pg16
env_file:
- ./env/postgres.env
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- r2r-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
interval: 5s
timeout: 5s
retries: 5
restart: on-failure
traefik:
image: traefik:v2.9
container_name: traefik
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--accesslog=true"
- "--accesslog.filepath=/var/log/traefik/access.log"
ports:
- "88:80"
- "8080:8080" # Traefik dashboard
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- r2r-network
rag_eval_devenv:
container_name: rag_eval_devenv
image: r2r_rag:latest
tty: true
volumes:
- ${CODE_DIRECTORY}:/code
networks:
- r2r-network
volumes:
postgres_data:
the_code:
driver: local
driver_opts:
o: bind
type: none
device: ${STORAGE_DIRECTORY}
|