Advertisement
Guest User

Untitled

a guest
Mar 3rd, 2025
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 38.46 KB | None | 0 0
  1. networks:
  2. onyxnet:
  3. driver: bridge
  4.  
  5. services:
  6. api_server:
  7. networks:
  8. - onyxnet
  9. image: onyxdotapp/onyx-backend:${IMAGE_TAG:-latest}
  10. build:
  11. context: ../../backend
  12. dockerfile: Dockerfile
  13. command: >
  14. /bin/sh -c "alembic upgrade head &&
  15. echo \"Starting Onyx Api Server\" &&
  16. uvicorn onyx.main:app --host 0.0.0.0 --port 8080"
  17. depends_on:
  18. - relational_db
  19. - index
  20. - cache
  21. - inference_model_server
  22. restart: always
  23. ports:
  24. - "8080:8080"
  25. environment:
  26. # Auth Settings
  27. - AUTH_TYPE=${AUTH_TYPE:-disabled}
  28. - SESSION_EXPIRE_TIME_SECONDS=${SESSION_EXPIRE_TIME_SECONDS:-}
  29. - ENCRYPTION_KEY_SECRET=${ENCRYPTION_KEY_SECRET:-}
  30. - VALID_EMAIL_DOMAINS=${VALID_EMAIL_DOMAINS:-}
  31. - GOOGLE_OAUTH_CLIENT_ID=${GOOGLE_OAUTH_CLIENT_ID:-}
  32. - GOOGLE_OAUTH_CLIENT_SECRET=${GOOGLE_OAUTH_CLIENT_SECRET:-}
  33. - REQUIRE_EMAIL_VERIFICATION=${REQUIRE_EMAIL_VERIFICATION:-}
  34. - SMTP_SERVER=${SMTP_SERVER:-} # For sending verification emails, if unspecified then defaults to 'smtp.gmail.com'
  35. - SMTP_PORT=${SMTP_PORT:-587} # For sending verification emails, if unspecified then defaults to '587'
  36. - SMTP_USER=${SMTP_USER:-}
  37. - SMTP_PASS=${SMTP_PASS:-}
  38. - ENABLE_EMAIL_INVITES=${ENABLE_EMAIL_INVITES:-} # If enabled, will send users (using SMTP settings) an email to join the workspace
  39. - EMAIL_FROM=${EMAIL_FROM:-}
  40. - OAUTH_CLIENT_ID=${OAUTH_CLIENT_ID:-}
  41. - OAUTH_CLIENT_SECRET=${OAUTH_CLIENT_SECRET:-}
  42. - OPENID_CONFIG_URL=${OPENID_CONFIG_URL:-}
  43. - TRACK_EXTERNAL_IDP_EXPIRY=${TRACK_EXTERNAL_IDP_EXPIRY:-}
  44. - CORS_ALLOWED_ORIGIN=${CORS_ALLOWED_ORIGIN:-}
  45. - INTEGRATION_TESTS_MODE=${INTEGRATION_TESTS_MODE:-}
  46. # Gen AI Settings
  47. - GEN_AI_MAX_TOKENS=${GEN_AI_MAX_TOKENS:-}
  48. - QA_TIMEOUT=${QA_TIMEOUT:-}
  49. - MAX_CHUNKS_FED_TO_CHAT=${MAX_CHUNKS_FED_TO_CHAT:-}
  50. - DISABLE_LLM_CHOOSE_SEARCH=${DISABLE_LLM_CHOOSE_SEARCH:-}
  51. - DISABLE_LLM_QUERY_REPHRASE=${DISABLE_LLM_QUERY_REPHRASE:-}
  52. - DISABLE_GENERATIVE_AI=${DISABLE_GENERATIVE_AI:-}
  53. - DISABLE_LITELLM_STREAMING=${DISABLE_LITELLM_STREAMING:-}
  54. - LITELLM_EXTRA_HEADERS=${LITELLM_EXTRA_HEADERS:-}
  55. - BING_API_KEY=${BING_API_KEY:-}
  56. - DISABLE_LLM_DOC_RELEVANCE=${DISABLE_LLM_DOC_RELEVANCE:-}
  57. - GEN_AI_API_KEY=${GEN_AI_API_KEY:-}
  58. # if set, allows for the use of the token budget system
  59. - TOKEN_BUDGET_GLOBALLY_ENABLED=${TOKEN_BUDGET_GLOBALLY_ENABLED:-}
  60. # Query Options
  61. - DOC_TIME_DECAY=${DOC_TIME_DECAY:-} # Recency Bias for search results, decay at 1 / (1 + DOC_TIME_DECAY * x years)
  62. - HYBRID_ALPHA=${HYBRID_ALPHA:-} # Hybrid Search Alpha (0 for entirely keyword, 1 for entirely vector)
  63. - EDIT_KEYWORD_QUERY=${EDIT_KEYWORD_QUERY:-}
  64. - MULTILINGUAL_QUERY_EXPANSION=${MULTILINGUAL_QUERY_EXPANSION:-}
  65. - LANGUAGE_HINT=${LANGUAGE_HINT:-}
  66. - LANGUAGE_CHAT_NAMING_HINT=${LANGUAGE_CHAT_NAMING_HINT:-}
  67. - QA_PROMPT_OVERRIDE=${QA_PROMPT_OVERRIDE:-}
  68. # Other services
  69. - POSTGRES_HOST=relational_db
  70. - POSTGRES_DEFAULT_SCHEMA=${POSTGRES_DEFAULT_SCHEMA:-}
  71. - POSTGRES_USE_NULL_POOL=${POSTGRES_USE_NULL_POOL:-}
  72. - VESPA_HOST=index
  73. - REDIS_HOST=cache
  74. - WEB_DOMAIN=${WEB_DOMAIN:-} # For frontend redirect auth purpose
  75. # Don't change the NLP model configs unless you know what you're doing
  76. - EMBEDDING_BATCH_SIZE=${EMBEDDING_BATCH_SIZE:-}
  77. - DOCUMENT_ENCODER_MODEL=${DOCUMENT_ENCODER_MODEL:-}
  78. - DOC_EMBEDDING_DIM=${DOC_EMBEDDING_DIM:-}
  79. - NORMALIZE_EMBEDDINGS=${NORMALIZE_EMBEDDINGS:-}
  80. - ASYM_QUERY_PREFIX=${ASYM_QUERY_PREFIX:-}
  81. - DISABLE_RERANK_FOR_STREAMING=${DISABLE_RERANK_FOR_STREAMING:-}
  82. - MODEL_SERVER_HOST=${MODEL_SERVER_HOST:-inference_model_server}
  83. - MODEL_SERVER_PORT=${MODEL_SERVER_PORT:-}
  84. # Leave this on pretty please? Nothing sensitive is collected!
  85. # https://docs.onyx.app/more/telemetry
  86. - DISABLE_TELEMETRY=${DISABLE_TELEMETRY:-}
  87. - LOG_LEVEL=${LOG_LEVEL:-info} # Set to debug to get more fine-grained logs
  88. - LOG_ALL_MODEL_INTERACTIONS=${LOG_ALL_MODEL_INTERACTIONS:-} # LiteLLM Verbose Logging
  89. # Log all of Onyx prompts and interactions with the LLM
  90. - LOG_DANSWER_MODEL_INTERACTIONS=${LOG_DANSWER_MODEL_INTERACTIONS:-}
  91. - LOG_INDIVIDUAL_MODEL_TOKENS=${LOG_INDIVIDUAL_MODEL_TOKENS:-}
  92. # If set to `true` will enable additional logs about Vespa query performance
  93. # (time spent on finding the right docs + time spent fetching summaries from disk)
  94. - LOG_VESPA_TIMING_INFORMATION=${LOG_VESPA_TIMING_INFORMATION:-}
  95. - LOG_ENDPOINT_LATENCY=${LOG_ENDPOINT_LATENCY:-}
  96. - LOG_POSTGRES_LATENCY=${LOG_POSTGRES_LATENCY:-}
  97. - LOG_POSTGRES_CONN_COUNTS=${LOG_POSTGRES_CONN_COUNTS:-}
  98. - CELERY_BROKER_POOL_LIMIT=${CELERY_BROKER_POOL_LIMIT:-}
  99. - LITELLM_CUSTOM_ERROR_MESSAGE_MAPPINGS=${LITELLM_CUSTOM_ERROR_MESSAGE_MAPPINGS:-}
  100. # Egnyte OAuth Configs
  101. - EGNYTE_CLIENT_ID=${EGNYTE_CLIENT_ID:-}
  102. - EGNYTE_CLIENT_SECRET=${EGNYTE_CLIENT_SECRET:-}
  103. - EGNYTE_LOCALHOST_OVERRIDE=${EGNYTE_LOCALHOST_OVERRIDE:-}
  104. # Lienar OAuth Configs
  105. - LINEAR_CLIENT_ID=${LINEAR_CLIENT_ID:-}
  106. - LINEAR_CLIENT_SECRET=${LINEAR_CLIENT_SECRET:-}
  107.  
  108. # Demo purposes
  109. - MOCK_CONNECTOR_FILE_PATH=${MOCK_CONNECTOR_FILE_PATH:-}
  110.  
  111. # Analytics Configs
  112. - SENTRY_DSN=${SENTRY_DSN:-}
  113.  
  114. # Chat Configs
  115. - HARD_DELETE_CHATS=${HARD_DELETE_CHATS:-}
  116.  
  117. # Enables the use of bedrock models or IAM Auth
  118. - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-}
  119. - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-}
  120. - AWS_REGION_NAME=${AWS_REGION_NAME:-}
  121.  
  122. # Enterprise Edition only
  123. - ENABLE_PAID_ENTERPRISE_EDITION_FEATURES=${ENABLE_PAID_ENTERPRISE_EDITION_FEATURES:-false}
  124. - API_KEY_HASH_ROUNDS=${API_KEY_HASH_ROUNDS:-}
  125. # Seeding configuration
  126. - USE_IAM_AUTH=${USE_IAM_AUTH:-}
  127. # Uncomment the line below to use if IAM_AUTH is true and you are using iam auth for postgres
  128. # volumes:
  129. # - ./bundle.pem:/app/bundle.pem:ro
  130. extra_hosts:
  131. - "host.docker.internal:host-gateway"
  132. logging:
  133. driver: json-file
  134. options:
  135. max-size: "50m"
  136. max-file: "6"
  137.  
  138. background:
  139. networks:
  140. - onyxnet
  141. image: onyxdotapp/onyx-backend:${IMAGE_TAG:-latest}
  142. build:
  143. context: ../../backend
  144. dockerfile: Dockerfile
  145. command: >
  146. /bin/sh -c "
  147. if [ -f /etc/ssl/certs/custom-ca.crt ]; then
  148. update-ca-certificates;
  149. fi &&
  150. /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf"
  151. depends_on:
  152. - relational_db
  153. - index
  154. - cache
  155. - inference_model_server
  156. - indexing_model_server
  157. restart: always
  158. environment:
  159. - ENCRYPTION_KEY_SECRET=${ENCRYPTION_KEY_SECRET:-}
  160. - JWT_PUBLIC_KEY_URL=${JWT_PUBLIC_KEY_URL:-} # used for JWT authentication of users via API
  161. # Gen AI Settings (Needed by OnyxBot)
  162. - GEN_AI_MAX_TOKENS=${GEN_AI_MAX_TOKENS:-}
  163. - QA_TIMEOUT=${QA_TIMEOUT:-}
  164. - MAX_CHUNKS_FED_TO_CHAT=${MAX_CHUNKS_FED_TO_CHAT:-}
  165. - DISABLE_LLM_CHOOSE_SEARCH=${DISABLE_LLM_CHOOSE_SEARCH:-}
  166. - DISABLE_LLM_QUERY_REPHRASE=${DISABLE_LLM_QUERY_REPHRASE:-}
  167. - DISABLE_GENERATIVE_AI=${DISABLE_GENERATIVE_AI:-}
  168. - GENERATIVE_MODEL_ACCESS_CHECK_FREQ=${GENERATIVE_MODEL_ACCESS_CHECK_FREQ:-}
  169. - DISABLE_LITELLM_STREAMING=${DISABLE_LITELLM_STREAMING:-}
  170. - LITELLM_EXTRA_HEADERS=${LITELLM_EXTRA_HEADERS:-}
  171. - GEN_AI_API_KEY=${GEN_AI_API_KEY:-}
  172. - BING_API_KEY=${BING_API_KEY:-}
  173. # Query Options
  174. - DOC_TIME_DECAY=${DOC_TIME_DECAY:-} # Recency Bias for search results, decay at 1 / (1 + DOC_TIME_DECAY * x years)
  175. - HYBRID_ALPHA=${HYBRID_ALPHA:-} # Hybrid Search Alpha (0 for entirely keyword, 1 for entirely vector)
  176. - EDIT_KEYWORD_QUERY=${EDIT_KEYWORD_QUERY:-}
  177. - MULTILINGUAL_QUERY_EXPANSION=${MULTILINGUAL_QUERY_EXPANSION:-}
  178. - LANGUAGE_HINT=${LANGUAGE_HINT:-}
  179. - LANGUAGE_CHAT_NAMING_HINT=${LANGUAGE_CHAT_NAMING_HINT:-}
  180. - QA_PROMPT_OVERRIDE=${QA_PROMPT_OVERRIDE:-}
  181. # Other Services
  182. - POSTGRES_HOST=relational_db
  183. - POSTGRES_USER=${POSTGRES_USER:-}
  184. - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-}
  185. - POSTGRES_DB=${POSTGRES_DB:-}
  186. - POSTGRES_DEFAULT_SCHEMA=${POSTGRES_DEFAULT_SCHEMA:-}
  187. - POSTGRES_USE_NULL_POOL=${POSTGRES_USE_NULL_POOL:-}
  188. - VESPA_HOST=index
  189. - REDIS_HOST=cache
  190. - WEB_DOMAIN=${WEB_DOMAIN:-} # For frontend redirect auth purpose for OAuth2 connectors
  191. # Don't change the NLP model configs unless you know what you're doing
  192. - DOCUMENT_ENCODER_MODEL=${DOCUMENT_ENCODER_MODEL:-}
  193. - DOC_EMBEDDING_DIM=${DOC_EMBEDDING_DIM:-}
  194. - NORMALIZE_EMBEDDINGS=${NORMALIZE_EMBEDDINGS:-}
  195. - ASYM_QUERY_PREFIX=${ASYM_QUERY_PREFIX:-} # Needed by OnyxBot
  196. - ASYM_PASSAGE_PREFIX=${ASYM_PASSAGE_PREFIX:-}
  197. - MODEL_SERVER_HOST=${MODEL_SERVER_HOST:-inference_model_server}
  198. - MODEL_SERVER_PORT=${MODEL_SERVER_PORT:-}
  199. - INDEXING_MODEL_SERVER_HOST=${INDEXING_MODEL_SERVER_HOST:-indexing_model_server}
  200. # Indexing Configs
  201. - VESPA_SEARCHER_THREADS=${VESPA_SEARCHER_THREADS:-}
  202. - NUM_INDEXING_WORKERS=${NUM_INDEXING_WORKERS:-}
  203. - ENABLED_CONNECTOR_TYPES=${ENABLED_CONNECTOR_TYPES:-}
  204. - DISABLE_INDEX_UPDATE_ON_SWAP=${DISABLE_INDEX_UPDATE_ON_SWAP:-}
  205. - DASK_JOB_CLIENT_ENABLED=${DASK_JOB_CLIENT_ENABLED:-}
  206. - CONTINUE_ON_CONNECTOR_FAILURE=${CONTINUE_ON_CONNECTOR_FAILURE:-}
  207. - EXPERIMENTAL_CHECKPOINTING_ENABLED=${EXPERIMENTAL_CHECKPOINTING_ENABLED:-}
  208. - CONFLUENCE_CONNECTOR_LABELS_TO_SKIP=${CONFLUENCE_CONNECTOR_LABELS_TO_SKIP:-}
  209. - JIRA_CONNECTOR_LABELS_TO_SKIP=${JIRA_CONNECTOR_LABELS_TO_SKIP:-}
  210. - WEB_CONNECTOR_VALIDATE_URLS=${WEB_CONNECTOR_VALIDATE_URLS:-}
  211. - JIRA_API_VERSION=${JIRA_API_VERSION:-}
  212. - GONG_CONNECTOR_START_TIME=${GONG_CONNECTOR_START_TIME:-}
  213. - NOTION_CONNECTOR_ENABLE_RECURSIVE_PAGE_LOOKUP=${NOTION_CONNECTOR_ENABLE_RECURSIVE_PAGE_LOOKUP:-}
  214. - GITHUB_CONNECTOR_BASE_URL=${GITHUB_CONNECTOR_BASE_URL:-}
  215. - MAX_DOCUMENT_CHARS=${MAX_DOCUMENT_CHARS:-}
  216. - MAX_FILE_SIZE_BYTES=${MAX_FILE_SIZE_BYTES:-}
  217. # Egnyte OAuth Configs
  218. - EGNYTE_CLIENT_ID=${EGNYTE_CLIENT_ID:-}
  219. - EGNYTE_CLIENT_SECRET=${EGNYTE_CLIENT_SECRET:-}
  220. - EGNYTE_LOCALHOST_OVERRIDE=${EGNYTE_LOCALHOST_OVERRIDE:-}
  221. # Lienar OAuth Configs
  222. - LINEAR_CLIENT_ID=${LINEAR_CLIENT_ID:-}
  223. - LINEAR_CLIENT_SECRET=${LINEAR_CLIENT_SECRET:-}
  224. # Celery Configs (defaults are set in the supervisord.conf file.
  225. # prefer doing that to have one source of defaults)
  226. - CELERY_WORKER_INDEXING_CONCURRENCY=${CELERY_WORKER_INDEXING_CONCURRENCY:-}
  227. - CELERY_WORKER_LIGHT_CONCURRENCY=${CELERY_WORKER_LIGHT_CONCURRENCY:-}
  228. - CELERY_WORKER_LIGHT_PREFETCH_MULTIPLIER=${CELERY_WORKER_LIGHT_PREFETCH_MULTIPLIER:-}
  229.  
  230. # Onyx SlackBot Configs
  231. - DANSWER_BOT_DISABLE_DOCS_ONLY_ANSWER=${DANSWER_BOT_DISABLE_DOCS_ONLY_ANSWER:-}
  232. - DANSWER_BOT_FEEDBACK_VISIBILITY=${DANSWER_BOT_FEEDBACK_VISIBILITY:-}
  233. - DANSWER_BOT_DISPLAY_ERROR_MSGS=${DANSWER_BOT_DISPLAY_ERROR_MSGS:-}
  234. - DANSWER_BOT_RESPOND_EVERY_CHANNEL=${DANSWER_BOT_RESPOND_EVERY_CHANNEL:-}
  235. - DANSWER_BOT_DISABLE_COT=${DANSWER_BOT_DISABLE_COT:-} # Currently unused
  236. - NOTIFY_SLACKBOT_NO_ANSWER=${NOTIFY_SLACKBOT_NO_ANSWER:-}
  237. - DANSWER_BOT_MAX_QPM=${DANSWER_BOT_MAX_QPM:-}
  238. - DANSWER_BOT_MAX_WAIT_TIME=${DANSWER_BOT_MAX_WAIT_TIME:-}
  239. # Logging
  240. # Leave this on pretty please? Nothing sensitive is collected!
  241. # https://docs.onyx.app/more/telemetry
  242. - DISABLE_TELEMETRY=${DISABLE_TELEMETRY:-}
  243. - LOG_LEVEL=${LOG_LEVEL:-info} # Set to debug to get more fine-grained logs
  244. - LOG_ALL_MODEL_INTERACTIONS=${LOG_ALL_MODEL_INTERACTIONS:-} # LiteLLM Verbose Logging
  245. # Log all of Onyx prompts and interactions with the LLM
  246. - LOG_DANSWER_MODEL_INTERACTIONS=${LOG_DANSWER_MODEL_INTERACTIONS:-}
  247. - LOG_INDIVIDUAL_MODEL_TOKENS=${LOG_INDIVIDUAL_MODEL_TOKENS:-}
  248. - LOG_VESPA_TIMING_INFORMATION=${LOG_VESPA_TIMING_INFORMATION:-}
  249.  
  250. # Analytics Configs
  251. - SENTRY_DSN=${SENTRY_DSN:-}
  252.  
  253. # Enterprise Edition stuff
  254. - ENABLE_PAID_ENTERPRISE_EDITION_FEATURES=${ENABLE_PAID_ENTERPRISE_EDITION_FEATURES:-false}
  255. - USE_IAM_AUTH=${USE_IAM_AUTH:-}
  256. - AWS_REGION_NAME=${AWS_REGION_NAME:-}
  257. - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID-}
  258. - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY-}
  259. # Uncomment the line below to use if IAM_AUTH is true and you are using iam auth for postgres
  260. # volumes:
  261. # - ./bundle.pem:/app/bundle.pem:ro
  262. extra_hosts:
  263. - "host.docker.internal:host-gateway"
  264. logging:
  265. driver: json-file
  266. options:
  267. max-size: "50m"
  268. max-file: "6"
  269. # Uncomment the following lines if you need to include a custom CA certificate
  270. # This section enables the use of a custom CA certificate
  271. # If present, the custom CA certificate is mounted as a volume
  272. # The container checks for its existence and updates the system's CA certificates
  273. # This allows for secure communication with services using custom SSL certificates
  274. # Optional volume mount for CA certificate
  275. # volumes:
  276. # # Maps to the CA_CERT_PATH environment variable in the Dockerfile
  277. # - ${CA_CERT_PATH:-./custom-ca.crt}:/etc/ssl/certs/custom-ca.crt:ro
  278.  
  279. web_server:
  280. networks:
  281. - onyxnet
  282. image: onyxdotapp/onyx-web-server:${IMAGE_TAG:-latest}
  283. build:
  284. context: ../../web
  285. dockerfile: Dockerfile
  286. args:
  287. - NEXT_PUBLIC_DISABLE_STREAMING=${NEXT_PUBLIC_DISABLE_STREAMING:-false}
  288. - NEXT_PUBLIC_NEW_CHAT_DIRECTS_TO_SAME_PERSONA=${NEXT_PUBLIC_NEW_CHAT_DIRECTS_TO_SAME_PERSONA:-false}
  289. - NEXT_PUBLIC_POSITIVE_PREDEFINED_FEEDBACK_OPTIONS=${NEXT_PUBLIC_POSITIVE_PREDEFINED_FEEDBACK_OPTIONS:-}
  290. - NEXT_PUBLIC_NEGATIVE_PREDEFINED_FEEDBACK_OPTIONS=${NEXT_PUBLIC_NEGATIVE_PREDEFINED_FEEDBACK_OPTIONS:-}
  291. - NEXT_PUBLIC_DISABLE_LOGOUT=${NEXT_PUBLIC_DISABLE_LOGOUT:-}
  292. - NEXT_PUBLIC_DEFAULT_SIDEBAR_OPEN=${NEXT_PUBLIC_DEFAULT_SIDEBAR_OPEN:-}
  293. - NEXT_PUBLIC_FORGOT_PASSWORD_ENABLED=${NEXT_PUBLIC_FORGOT_PASSWORD_ENABLED:-}
  294. # Enterprise Edition only
  295. - NEXT_PUBLIC_THEME=${NEXT_PUBLIC_THEME:-}
  296. # DO NOT TURN ON unless you have EXPLICIT PERMISSION from Onyx.
  297. - NEXT_PUBLIC_DO_NOT_USE_TOGGLE_OFF_DANSWER_POWERED=${NEXT_PUBLIC_DO_NOT_USE_TOGGLE_OFF_DANSWER_POWERED:-false}
  298. depends_on:
  299. - api_server
  300. restart: always
  301. environment:
  302. - INTERNAL_URL=http://api_server:8080
  303. - WEB_DOMAIN=${WEB_DOMAIN:-}
  304. - THEME_IS_DARK=${THEME_IS_DARK:-}
  305. - DISABLE_LLM_DOC_RELEVANCE=${DISABLE_LLM_DOC_RELEVANCE:-}
  306.  
  307. # Enterprise Edition only
  308. - ENABLE_PAID_ENTERPRISE_EDITION_FEATURES=${ENABLE_PAID_ENTERPRISE_EDITION_FEATURES:-false}
  309. - NEXT_PUBLIC_CUSTOM_REFRESH_URL=${NEXT_PUBLIC_CUSTOM_REFRESH_URL:-}
  310.  
  311. inference_model_server:
  312. networks:
  313. - onyxnet
  314. image: onyxdotapp/onyx-model-server:${IMAGE_TAG:-latest}
  315. build:
  316. context: ../../backend
  317. dockerfile: Dockerfile.model_server
  318. command: >
  319. /bin/sh -c "if [ \"${DISABLE_MODEL_SERVER:-false}\" = \"True\" ]; then
  320. echo 'Skipping service...';
  321. exit 0;
  322. else
  323. exec uvicorn model_server.main:app --host 0.0.0.0 --port 9000;
  324. fi"
  325. restart: on-failure
  326. environment:
  327. - MIN_THREADS_ML_MODELS=${MIN_THREADS_ML_MODELS:-}
  328. # Set to debug to get more fine-grained logs
  329. - LOG_LEVEL=${LOG_LEVEL:-info}
  330.  
  331. # Analytics Configs
  332. - SENTRY_DSN=${SENTRY_DSN:-}
  333. volumes:
  334. # Not necessary, this is just to reduce download time during startup
  335. - model_cache_huggingface:/root/.cache/huggingface/
  336. logging:
  337. driver: json-file
  338. options:
  339. max-size: "50m"
  340. max-file: "6"
  341.  
  342. indexing_model_server:
  343. networks:
  344. - onyxnet
  345. image: onyxdotapp/onyx-model-server:${IMAGE_TAG:-latest}
  346. build:
  347. context: ../../backend
  348. dockerfile: Dockerfile.model_server
  349. command: >
  350. /bin/sh -c "if [ \"${DISABLE_MODEL_SERVER:-false}\" = \"True\" ]; then
  351. echo 'Skipping service...';
  352. exit 0;
  353. else
  354. exec uvicorn model_server.main:app --host 0.0.0.0 --port 9000;
  355. fi"
  356. restart: on-failure
  357. environment:
  358. - INDEX_BATCH_SIZE=${INDEX_BATCH_SIZE:-}
  359. - MIN_THREADS_ML_MODELS=${MIN_THREADS_ML_MODELS:-}
  360. - INDEXING_ONLY=True
  361. # Set to debug to get more fine-grained logs
  362. - LOG_LEVEL=${LOG_LEVEL:-info}
  363. - CLIENT_EMBEDDING_TIMEOUT=${CLIENT_EMBEDDING_TIMEOUT:-}
  364.  
  365. # Analytics Configs
  366. - SENTRY_DSN=${SENTRY_DSN:-}
  367. volumes:
  368. # Not necessary, this is just to reduce download time during startup
  369. - indexing_huggingface_model_cache:/root/.cache/huggingface/
  370. logging:
  371. driver: json-file
  372. options:
  373. max-size: "50m"
  374. max-file: "6"
  375.  
  376. relational_db:
  377. networks:
  378. - onyxnet
  379. image: postgres:15.2-alpine
  380. command: -c 'max_connections=250'
  381. restart: always
  382. environment:
  383. - POSTGRES_USER=${POSTGRES_USER:-postgres}
  384. - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-password}
  385. ports:
  386. - "5432:5432"
  387. volumes:
  388. - db_volume:/var/lib/postgresql/data
  389.  
  390. # This container name cannot have an underscore in it due to Vespa expectations of the URL
  391. index:
  392. networks:
  393. - onyxnet
  394. image: vespaengine/vespa:8.277.17
  395. restart: always
  396. ports:
  397. - "19071:19071"
  398. - "8081:8081"
  399. volumes:
  400. - vespa_volume:/opt/vespa/var
  401. logging:
  402. driver: json-file
  403. options:
  404. max-size: "50m"
  405. max-file: "6"
  406.  
  407. nginx:
  408. networks:
  409. - onyxnet
  410. image: nginx:1.23.4-alpine
  411. restart: always
  412. # nginx will immediately crash with `nginx: [emerg] host not found in upstream`
  413. # if api_server / web_server are not up
  414. depends_on:
  415. - api_server
  416. - web_server
  417. environment:
  418. - DOMAIN=localhost
  419. ports:
  420. - "0.0.0.0:3000:80" # allow for localhost:3000 usage, since that is the norm
  421. volumes:
  422. - ../data/nginx:/etc/nginx/conf.d
  423. logging:
  424. driver: json-file
  425. options:
  426. max-size: "50m"
  427. max-file: "6"
  428. # The specified script waits for the api_server to start up.
  429. # Without this we've seen issues where nginx shows no error logs but
  430. # does not recieve any traffic
  431. # NOTE: we have to use dos2unix to remove Carriage Return chars from the file
  432. # in order to make this work on both Unix-like systems and windows
  433. command: >
  434. /bin/sh -c "dos2unix /etc/nginx/conf.d/run-nginx.sh
  435. && /etc/nginx/conf.d/run-nginx.sh app.conf.template.dev"
  436.  
  437. cache:
  438. networks:
  439. - onyxnet
  440. image: redis:7.4-alpine
  441. restart: always
  442. ports:
  443. - "6379:6379"
  444. # docker silently mounts /data even without an explicit volume mount, which enables
  445. # persistence. explicitly setting save and appendonly forces ephemeral behavior.
  446. command: redis-server --save "" --appendonly no
  447.  
  448. volumes:
  449. db_volume:
  450. vespa_volume: # Created by the container itself
  451.  
  452. model_cache_huggingface:
  453. indexing_huggingface_model_cache:
  454.  
  455.  
  456. services:
  457. api_server:
  458. image: onyxdotapp/onyx-backend:${IMAGE_TAG:-latest}
  459. build:
  460. context: ../../backend
  461. dockerfile: Dockerfile
  462. command: >
  463. /bin/sh -c "alembic upgrade head &&
  464. echo \"Starting Onyx Api Server\" &&
  465. uvicorn onyx.main:app --host 0.0.0.0 --port 8080"
  466. depends_on:
  467. - relational_db
  468. - index
  469. - cache
  470. - inference_model_server
  471. restart: always
  472. ports:
  473. - "8080:8080"
  474. environment:
  475. # Auth Settings
  476. - AUTH_TYPE=${AUTH_TYPE:-disabled}
  477. - SESSION_EXPIRE_TIME_SECONDS=${SESSION_EXPIRE_TIME_SECONDS:-}
  478. - ENCRYPTION_KEY_SECRET=${ENCRYPTION_KEY_SECRET:-}
  479. - VALID_EMAIL_DOMAINS=${VALID_EMAIL_DOMAINS:-}
  480. - GOOGLE_OAUTH_CLIENT_ID=${GOOGLE_OAUTH_CLIENT_ID:-}
  481. - GOOGLE_OAUTH_CLIENT_SECRET=${GOOGLE_OAUTH_CLIENT_SECRET:-}
  482. - REQUIRE_EMAIL_VERIFICATION=${REQUIRE_EMAIL_VERIFICATION:-}
  483. - SMTP_SERVER=${SMTP_SERVER:-} # For sending verification emails, if unspecified then defaults to 'smtp.gmail.com'
  484. - SMTP_PORT=${SMTP_PORT:-587} # For sending verification emails, if unspecified then defaults to '587'
  485. - SMTP_USER=${SMTP_USER:-}
  486. - SMTP_PASS=${SMTP_PASS:-}
  487. - ENABLE_EMAIL_INVITES=${ENABLE_EMAIL_INVITES:-} # If enabled, will send users (using SMTP settings) an email to join the workspace
  488. - EMAIL_FROM=${EMAIL_FROM:-}
  489. - OAUTH_CLIENT_ID=${OAUTH_CLIENT_ID:-}
  490. - OAUTH_CLIENT_SECRET=${OAUTH_CLIENT_SECRET:-}
  491. - OPENID_CONFIG_URL=${OPENID_CONFIG_URL:-}
  492. - TRACK_EXTERNAL_IDP_EXPIRY=${TRACK_EXTERNAL_IDP_EXPIRY:-}
  493. - CORS_ALLOWED_ORIGIN=${CORS_ALLOWED_ORIGIN:-}
  494. - INTEGRATION_TESTS_MODE=${INTEGRATION_TESTS_MODE:-}
  495. # Gen AI Settings
  496. - GEN_AI_MAX_TOKENS=${GEN_AI_MAX_TOKENS:-}
  497. - QA_TIMEOUT=${QA_TIMEOUT:-}
  498. - MAX_CHUNKS_FED_TO_CHAT=${MAX_CHUNKS_FED_TO_CHAT:-}
  499. - DISABLE_LLM_CHOOSE_SEARCH=${DISABLE_LLM_CHOOSE_SEARCH:-}
  500. - DISABLE_LLM_QUERY_REPHRASE=${DISABLE_LLM_QUERY_REPHRASE:-}
  501. - DISABLE_GENERATIVE_AI=${DISABLE_GENERATIVE_AI:-}
  502. - DISABLE_LITELLM_STREAMING=${DISABLE_LITELLM_STREAMING:-}
  503. - LITELLM_EXTRA_HEADERS=${LITELLM_EXTRA_HEADERS:-}
  504. - BING_API_KEY=${BING_API_KEY:-}
  505. - DISABLE_LLM_DOC_RELEVANCE=${DISABLE_LLM_DOC_RELEVANCE:-}
  506. - GEN_AI_API_KEY=${GEN_AI_API_KEY:-}
  507. # if set, allows for the use of the token budget system
  508. - TOKEN_BUDGET_GLOBALLY_ENABLED=${TOKEN_BUDGET_GLOBALLY_ENABLED:-}
  509. # Query Options
  510. - DOC_TIME_DECAY=${DOC_TIME_DECAY:-} # Recency Bias for search results, decay at 1 / (1 + DOC_TIME_DECAY * x years)
  511. - HYBRID_ALPHA=${HYBRID_ALPHA:-} # Hybrid Search Alpha (0 for entirely keyword, 1 for entirely vector)
  512. - EDIT_KEYWORD_QUERY=${EDIT_KEYWORD_QUERY:-}
  513. - MULTILINGUAL_QUERY_EXPANSION=${MULTILINGUAL_QUERY_EXPANSION:-}
  514. - LANGUAGE_HINT=${LANGUAGE_HINT:-}
  515. - LANGUAGE_CHAT_NAMING_HINT=${LANGUAGE_CHAT_NAMING_HINT:-}
  516. - QA_PROMPT_OVERRIDE=${QA_PROMPT_OVERRIDE:-}
  517. # Other services
  518. - POSTGRES_HOST=relational_db
  519. - POSTGRES_DEFAULT_SCHEMA=${POSTGRES_DEFAULT_SCHEMA:-}
  520. - POSTGRES_USE_NULL_POOL=${POSTGRES_USE_NULL_POOL:-}
  521. - VESPA_HOST=index
  522. - REDIS_HOST=cache
  523. - WEB_DOMAIN=${WEB_DOMAIN:-} # For frontend redirect auth purpose
  524. # Don't change the NLP model configs unless you know what you're doing
  525. - EMBEDDING_BATCH_SIZE=${EMBEDDING_BATCH_SIZE:-}
  526. - DOCUMENT_ENCODER_MODEL=${DOCUMENT_ENCODER_MODEL:-}
  527. - DOC_EMBEDDING_DIM=${DOC_EMBEDDING_DIM:-}
  528. - NORMALIZE_EMBEDDINGS=${NORMALIZE_EMBEDDINGS:-}
  529. - ASYM_QUERY_PREFIX=${ASYM_QUERY_PREFIX:-}
  530. - DISABLE_RERANK_FOR_STREAMING=${DISABLE_RERANK_FOR_STREAMING:-}
  531. - MODEL_SERVER_HOST=${MODEL_SERVER_HOST:-inference_model_server}
  532. - MODEL_SERVER_PORT=${MODEL_SERVER_PORT:-}
  533. # Leave this on pretty please? Nothing sensitive is collected!
  534. # https://docs.onyx.app/more/telemetry
  535. - DISABLE_TELEMETRY=${DISABLE_TELEMETRY:-}
  536. - LOG_LEVEL=${LOG_LEVEL:-info} # Set to debug to get more fine-grained logs
  537. - LOG_ALL_MODEL_INTERACTIONS=${LOG_ALL_MODEL_INTERACTIONS:-} # LiteLLM Verbose Logging
  538. # Log all of Onyx prompts and interactions with the LLM
  539. - LOG_DANSWER_MODEL_INTERACTIONS=${LOG_DANSWER_MODEL_INTERACTIONS:-}
  540. - LOG_INDIVIDUAL_MODEL_TOKENS=${LOG_INDIVIDUAL_MODEL_TOKENS:-}
  541. # If set to `true` will enable additional logs about Vespa query performance
  542. # (time spent on finding the right docs + time spent fetching summaries from disk)
  543. - LOG_VESPA_TIMING_INFORMATION=${LOG_VESPA_TIMING_INFORMATION:-}
  544. - LOG_ENDPOINT_LATENCY=${LOG_ENDPOINT_LATENCY:-}
  545. - LOG_POSTGRES_LATENCY=${LOG_POSTGRES_LATENCY:-}
  546. - LOG_POSTGRES_CONN_COUNTS=${LOG_POSTGRES_CONN_COUNTS:-}
  547. - CELERY_BROKER_POOL_LIMIT=${CELERY_BROKER_POOL_LIMIT:-}
  548. - LITELLM_CUSTOM_ERROR_MESSAGE_MAPPINGS=${LITELLM_CUSTOM_ERROR_MESSAGE_MAPPINGS:-}
  549. # Egnyte OAuth Configs
  550. - EGNYTE_CLIENT_ID=${EGNYTE_CLIENT_ID:-}
  551. - EGNYTE_CLIENT_SECRET=${EGNYTE_CLIENT_SECRET:-}
  552. - EGNYTE_LOCALHOST_OVERRIDE=${EGNYTE_LOCALHOST_OVERRIDE:-}
  553. # Lienar OAuth Configs
  554. - LINEAR_CLIENT_ID=${LINEAR_CLIENT_ID:-}
  555. - LINEAR_CLIENT_SECRET=${LINEAR_CLIENT_SECRET:-}
  556.  
  557. # Demo purposes
  558. - MOCK_CONNECTOR_FILE_PATH=${MOCK_CONNECTOR_FILE_PATH:-}
  559.  
  560. # Analytics Configs
  561. - SENTRY_DSN=${SENTRY_DSN:-}
  562.  
  563. # Chat Configs
  564. - HARD_DELETE_CHATS=${HARD_DELETE_CHATS:-}
  565.  
  566. # Enables the use of bedrock models or IAM Auth
  567. - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-}
  568. - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-}
  569. - AWS_REGION_NAME=${AWS_REGION_NAME:-}
  570.  
  571. # Enterprise Edition only
  572. - ENABLE_PAID_ENTERPRISE_EDITION_FEATURES=${ENABLE_PAID_ENTERPRISE_EDITION_FEATURES:-false}
  573. - API_KEY_HASH_ROUNDS=${API_KEY_HASH_ROUNDS:-}
  574. # Seeding configuration
  575. - USE_IAM_AUTH=${USE_IAM_AUTH:-}
  576. # Uncomment the line below to use if IAM_AUTH is true and you are using iam auth for postgres
  577. # volumes:
  578. # - ./bundle.pem:/app/bundle.pem:ro
  579. extra_hosts:
  580. - "host.docker.internal:host-gateway"
  581. logging:
  582. driver: json-file
  583. options:
  584. max-size: "50m"
  585. max-file: "6"
  586.  
  587. background:
  588. image: onyxdotapp/onyx-backend:${IMAGE_TAG:-latest}
  589. build:
  590. context: ../../backend
  591. dockerfile: Dockerfile
  592. command: >
  593. /bin/sh -c "
  594. if [ -f /etc/ssl/certs/custom-ca.crt ]; then
  595. update-ca-certificates;
  596. fi &&
  597. /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf"
  598. depends_on:
  599. - relational_db
  600. - index
  601. - cache
  602. - inference_model_server
  603. - indexing_model_server
  604. restart: always
  605. environment:
  606. - ENCRYPTION_KEY_SECRET=${ENCRYPTION_KEY_SECRET:-}
  607. - JWT_PUBLIC_KEY_URL=${JWT_PUBLIC_KEY_URL:-} # used for JWT authentication of users via API
  608. # Gen AI Settings (Needed by OnyxBot)
  609. - GEN_AI_MAX_TOKENS=${GEN_AI_MAX_TOKENS:-}
  610. - QA_TIMEOUT=${QA_TIMEOUT:-}
  611. - MAX_CHUNKS_FED_TO_CHAT=${MAX_CHUNKS_FED_TO_CHAT:-}
  612. - DISABLE_LLM_CHOOSE_SEARCH=${DISABLE_LLM_CHOOSE_SEARCH:-}
  613. - DISABLE_LLM_QUERY_REPHRASE=${DISABLE_LLM_QUERY_REPHRASE:-}
  614. - DISABLE_GENERATIVE_AI=${DISABLE_GENERATIVE_AI:-}
  615. - GENERATIVE_MODEL_ACCESS_CHECK_FREQ=${GENERATIVE_MODEL_ACCESS_CHECK_FREQ:-}
  616. - DISABLE_LITELLM_STREAMING=${DISABLE_LITELLM_STREAMING:-}
  617. - LITELLM_EXTRA_HEADERS=${LITELLM_EXTRA_HEADERS:-}
  618. - GEN_AI_API_KEY=${GEN_AI_API_KEY:-}
  619. - BING_API_KEY=${BING_API_KEY:-}
  620. # Query Options
  621. - DOC_TIME_DECAY=${DOC_TIME_DECAY:-} # Recency Bias for search results, decay at 1 / (1 + DOC_TIME_DECAY * x years)
  622. - HYBRID_ALPHA=${HYBRID_ALPHA:-} # Hybrid Search Alpha (0 for entirely keyword, 1 for entirely vector)
  623. - EDIT_KEYWORD_QUERY=${EDIT_KEYWORD_QUERY:-}
  624. - MULTILINGUAL_QUERY_EXPANSION=${MULTILINGUAL_QUERY_EXPANSION:-}
  625. - LANGUAGE_HINT=${LANGUAGE_HINT:-}
  626. - LANGUAGE_CHAT_NAMING_HINT=${LANGUAGE_CHAT_NAMING_HINT:-}
  627. - QA_PROMPT_OVERRIDE=${QA_PROMPT_OVERRIDE:-}
  628. # Other Services
  629. - POSTGRES_HOST=relational_db
  630. - POSTGRES_USER=${POSTGRES_USER:-}
  631. - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-}
  632. - POSTGRES_DB=${POSTGRES_DB:-}
  633. - POSTGRES_DEFAULT_SCHEMA=${POSTGRES_DEFAULT_SCHEMA:-}
  634. - POSTGRES_USE_NULL_POOL=${POSTGRES_USE_NULL_POOL:-}
  635. - VESPA_HOST=index
  636. - REDIS_HOST=cache
  637. - WEB_DOMAIN=${WEB_DOMAIN:-} # For frontend redirect auth purpose for OAuth2 connectors
  638. # Don't change the NLP model configs unless you know what you're doing
  639. - DOCUMENT_ENCODER_MODEL=${DOCUMENT_ENCODER_MODEL:-}
  640. - DOC_EMBEDDING_DIM=${DOC_EMBEDDING_DIM:-}
  641. - NORMALIZE_EMBEDDINGS=${NORMALIZE_EMBEDDINGS:-}
  642. - ASYM_QUERY_PREFIX=${ASYM_QUERY_PREFIX:-} # Needed by OnyxBot
  643. - ASYM_PASSAGE_PREFIX=${ASYM_PASSAGE_PREFIX:-}
  644. - MODEL_SERVER_HOST=${MODEL_SERVER_HOST:-inference_model_server}
  645. - MODEL_SERVER_PORT=${MODEL_SERVER_PORT:-}
  646. - INDEXING_MODEL_SERVER_HOST=${INDEXING_MODEL_SERVER_HOST:-indexing_model_server}
  647. # Indexing Configs
  648. - VESPA_SEARCHER_THREADS=${VESPA_SEARCHER_THREADS:-}
  649. - NUM_INDEXING_WORKERS=${NUM_INDEXING_WORKERS:-}
  650. - ENABLED_CONNECTOR_TYPES=${ENABLED_CONNECTOR_TYPES:-}
  651. - DISABLE_INDEX_UPDATE_ON_SWAP=${DISABLE_INDEX_UPDATE_ON_SWAP:-}
  652. - DASK_JOB_CLIENT_ENABLED=${DASK_JOB_CLIENT_ENABLED:-}
  653. - CONTINUE_ON_CONNECTOR_FAILURE=${CONTINUE_ON_CONNECTOR_FAILURE:-}
  654. - EXPERIMENTAL_CHECKPOINTING_ENABLED=${EXPERIMENTAL_CHECKPOINTING_ENABLED:-}
  655. - CONFLUENCE_CONNECTOR_LABELS_TO_SKIP=${CONFLUENCE_CONNECTOR_LABELS_TO_SKIP:-}
  656. - JIRA_CONNECTOR_LABELS_TO_SKIP=${JIRA_CONNECTOR_LABELS_TO_SKIP:-}
  657. - WEB_CONNECTOR_VALIDATE_URLS=${WEB_CONNECTOR_VALIDATE_URLS:-}
  658. - JIRA_API_VERSION=${JIRA_API_VERSION:-}
  659. - GONG_CONNECTOR_START_TIME=${GONG_CONNECTOR_START_TIME:-}
  660. - NOTION_CONNECTOR_ENABLE_RECURSIVE_PAGE_LOOKUP=${NOTION_CONNECTOR_ENABLE_RECURSIVE_PAGE_LOOKUP:-}
  661. - GITHUB_CONNECTOR_BASE_URL=${GITHUB_CONNECTOR_BASE_URL:-}
  662. - MAX_DOCUMENT_CHARS=${MAX_DOCUMENT_CHARS:-}
  663. - MAX_FILE_SIZE_BYTES=${MAX_FILE_SIZE_BYTES:-}
  664. # Egnyte OAuth Configs
  665. - EGNYTE_CLIENT_ID=${EGNYTE_CLIENT_ID:-}
  666. - EGNYTE_CLIENT_SECRET=${EGNYTE_CLIENT_SECRET:-}
  667. - EGNYTE_LOCALHOST_OVERRIDE=${EGNYTE_LOCALHOST_OVERRIDE:-}
  668. # Lienar OAuth Configs
  669. - LINEAR_CLIENT_ID=${LINEAR_CLIENT_ID:-}
  670. - LINEAR_CLIENT_SECRET=${LINEAR_CLIENT_SECRET:-}
  671. # Celery Configs (defaults are set in the supervisord.conf file.
  672. # prefer doing that to have one source of defaults)
  673. - CELERY_WORKER_INDEXING_CONCURRENCY=${CELERY_WORKER_INDEXING_CONCURRENCY:-}
  674. - CELERY_WORKER_LIGHT_CONCURRENCY=${CELERY_WORKER_LIGHT_CONCURRENCY:-}
  675. - CELERY_WORKER_LIGHT_PREFETCH_MULTIPLIER=${CELERY_WORKER_LIGHT_PREFETCH_MULTIPLIER:-}
  676.  
  677. # Onyx SlackBot Configs
  678. - DANSWER_BOT_DISABLE_DOCS_ONLY_ANSWER=${DANSWER_BOT_DISABLE_DOCS_ONLY_ANSWER:-}
  679. - DANSWER_BOT_FEEDBACK_VISIBILITY=${DANSWER_BOT_FEEDBACK_VISIBILITY:-}
  680. - DANSWER_BOT_DISPLAY_ERROR_MSGS=${DANSWER_BOT_DISPLAY_ERROR_MSGS:-}
  681. - DANSWER_BOT_RESPOND_EVERY_CHANNEL=${DANSWER_BOT_RESPOND_EVERY_CHANNEL:-}
  682. - DANSWER_BOT_DISABLE_COT=${DANSWER_BOT_DISABLE_COT:-} # Currently unused
  683. - NOTIFY_SLACKBOT_NO_ANSWER=${NOTIFY_SLACKBOT_NO_ANSWER:-}
  684. - DANSWER_BOT_MAX_QPM=${DANSWER_BOT_MAX_QPM:-}
  685. - DANSWER_BOT_MAX_WAIT_TIME=${DANSWER_BOT_MAX_WAIT_TIME:-}
  686. # Logging
  687. # Leave this on pretty please? Nothing sensitive is collected!
  688. # https://docs.onyx.app/more/telemetry
  689. - DISABLE_TELEMETRY=${DISABLE_TELEMETRY:-}
  690. - LOG_LEVEL=${LOG_LEVEL:-info} # Set to debug to get more fine-grained logs
  691. - LOG_ALL_MODEL_INTERACTIONS=${LOG_ALL_MODEL_INTERACTIONS:-} # LiteLLM Verbose Logging
  692. # Log all of Onyx prompts and interactions with the LLM
  693. - LOG_DANSWER_MODEL_INTERACTIONS=${LOG_DANSWER_MODEL_INTERACTIONS:-}
  694. - LOG_INDIVIDUAL_MODEL_TOKENS=${LOG_INDIVIDUAL_MODEL_TOKENS:-}
  695. - LOG_VESPA_TIMING_INFORMATION=${LOG_VESPA_TIMING_INFORMATION:-}
  696.  
  697. # Analytics Configs
  698. - SENTRY_DSN=${SENTRY_DSN:-}
  699.  
  700. # Enterprise Edition stuff
  701. - ENABLE_PAID_ENTERPRISE_EDITION_FEATURES=${ENABLE_PAID_ENTERPRISE_EDITION_FEATURES:-false}
  702. - USE_IAM_AUTH=${USE_IAM_AUTH:-}
  703. - AWS_REGION_NAME=${AWS_REGION_NAME:-}
  704. - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID-}
  705. - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY-}
  706. # Uncomment the line below to use if IAM_AUTH is true and you are using iam auth for postgres
  707. # volumes:
  708. # - ./bundle.pem:/app/bundle.pem:ro
  709. extra_hosts:
  710. - "host.docker.internal:host-gateway"
  711. logging:
  712. driver: json-file
  713. options:
  714. max-size: "50m"
  715. max-file: "6"
  716. # Uncomment the following lines if you need to include a custom CA certificate
  717. # This section enables the use of a custom CA certificate
  718. # If present, the custom CA certificate is mounted as a volume
  719. # The container checks for its existence and updates the system's CA certificates
  720. # This allows for secure communication with services using custom SSL certificates
  721. # Optional volume mount for CA certificate
  722. # volumes:
  723. # # Maps to the CA_CERT_PATH environment variable in the Dockerfile
  724. # - ${CA_CERT_PATH:-./custom-ca.crt}:/etc/ssl/certs/custom-ca.crt:ro
  725.  
  726. web_server:
  727. image: onyxdotapp/onyx-web-server:${IMAGE_TAG:-latest}
  728. build:
  729. context: ../../web
  730. dockerfile: Dockerfile
  731. args:
  732. - NEXT_PUBLIC_DISABLE_STREAMING=${NEXT_PUBLIC_DISABLE_STREAMING:-false}
  733. - NEXT_PUBLIC_NEW_CHAT_DIRECTS_TO_SAME_PERSONA=${NEXT_PUBLIC_NEW_CHAT_DIRECTS_TO_SAME_PERSONA:-false}
  734. - NEXT_PUBLIC_POSITIVE_PREDEFINED_FEEDBACK_OPTIONS=${NEXT_PUBLIC_POSITIVE_PREDEFINED_FEEDBACK_OPTIONS:-}
  735. - NEXT_PUBLIC_NEGATIVE_PREDEFINED_FEEDBACK_OPTIONS=${NEXT_PUBLIC_NEGATIVE_PREDEFINED_FEEDBACK_OPTIONS:-}
  736. - NEXT_PUBLIC_DISABLE_LOGOUT=${NEXT_PUBLIC_DISABLE_LOGOUT:-}
  737. - NEXT_PUBLIC_DEFAULT_SIDEBAR_OPEN=${NEXT_PUBLIC_DEFAULT_SIDEBAR_OPEN:-}
  738. - NEXT_PUBLIC_FORGOT_PASSWORD_ENABLED=${NEXT_PUBLIC_FORGOT_PASSWORD_ENABLED:-}
  739. # Enterprise Edition only
  740. - NEXT_PUBLIC_THEME=${NEXT_PUBLIC_THEME:-}
  741. # DO NOT TURN ON unless you have EXPLICIT PERMISSION from Onyx.
  742. - NEXT_PUBLIC_DO_NOT_USE_TOGGLE_OFF_DANSWER_POWERED=${NEXT_PUBLIC_DO_NOT_USE_TOGGLE_OFF_DANSWER_POWERED:-false}
  743. depends_on:
  744. - api_server
  745. restart: always
  746. environment:
  747. - INTERNAL_URL=http://api_server:8080
  748. - WEB_DOMAIN=${WEB_DOMAIN:-}
  749. - THEME_IS_DARK=${THEME_IS_DARK:-}
  750. - DISABLE_LLM_DOC_RELEVANCE=${DISABLE_LLM_DOC_RELEVANCE:-}
  751.  
  752. # Enterprise Edition only
  753. - ENABLE_PAID_ENTERPRISE_EDITION_FEATURES=${ENABLE_PAID_ENTERPRISE_EDITION_FEATURES:-false}
  754. - NEXT_PUBLIC_CUSTOM_REFRESH_URL=${NEXT_PUBLIC_CUSTOM_REFRESH_URL:-}
  755.  
  756. inference_model_server:
  757. image: onyxdotapp/onyx-model-server:${IMAGE_TAG:-latest}
  758. build:
  759. context: ../../backend
  760. dockerfile: Dockerfile.model_server
  761. command: >
  762. /bin/sh -c "if [ \"${DISABLE_MODEL_SERVER:-false}\" = \"True\" ]; then
  763. echo 'Skipping service...';
  764. exit 0;
  765. else
  766. exec uvicorn model_server.main:app --host 0.0.0.0 --port 9000;
  767. fi"
  768. restart: on-failure
  769. environment:
  770. - MIN_THREADS_ML_MODELS=${MIN_THREADS_ML_MODELS:-}
  771. # Set to debug to get more fine-grained logs
  772. - LOG_LEVEL=${LOG_LEVEL:-info}
  773.  
  774. # Analytics Configs
  775. - SENTRY_DSN=${SENTRY_DSN:-}
  776. volumes:
  777. # Not necessary, this is just to reduce download time during startup
  778. - model_cache_huggingface:/root/.cache/huggingface/
  779. logging:
  780. driver: json-file
  781. options:
  782. max-size: "50m"
  783. max-file: "6"
  784.  
  785. indexing_model_server:
  786. image: onyxdotapp/onyx-model-server:${IMAGE_TAG:-latest}
  787. build:
  788. context: ../../backend
  789. dockerfile: Dockerfile.model_server
  790. command: >
  791. /bin/sh -c "if [ \"${DISABLE_MODEL_SERVER:-false}\" = \"True\" ]; then
  792. echo 'Skipping service...';
  793. exit 0;
  794. else
  795. exec uvicorn model_server.main:app --host 0.0.0.0 --port 9000;
  796. fi"
  797. restart: on-failure
  798. environment:
  799. - INDEX_BATCH_SIZE=${INDEX_BATCH_SIZE:-}
  800. - MIN_THREADS_ML_MODELS=${MIN_THREADS_ML_MODELS:-}
  801. - INDEXING_ONLY=True
  802. # Set to debug to get more fine-grained logs
  803. - LOG_LEVEL=${LOG_LEVEL:-info}
  804. - CLIENT_EMBEDDING_TIMEOUT=${CLIENT_EMBEDDING_TIMEOUT:-}
  805.  
  806. # Analytics Configs
  807. - SENTRY_DSN=${SENTRY_DSN:-}
  808. volumes:
  809. # Not necessary, this is just to reduce download time during startup
  810. - indexing_huggingface_model_cache:/root/.cache/huggingface/
  811. logging:
  812. driver: json-file
  813. options:
  814. max-size: "50m"
  815. max-file: "6"
  816.  
  817. relational_db:
  818. image: postgres:15.2-alpine
  819. command: -c 'max_connections=250'
  820. restart: always
  821. environment:
  822. - POSTGRES_USER=${POSTGRES_USER:-postgres}
  823. - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-password}
  824. ports:
  825. - "5432:5432"
  826. volumes:
  827. - db_volume:/var/lib/postgresql/data
  828.  
  829. # This container name cannot have an underscore in it due to Vespa expectations of the URL
  830. index:
  831. image: vespaengine/vespa:8.277.17
  832. restart: always
  833. ports:
  834. - "19071:19071"
  835. - "8081:8081"
  836. volumes:
  837. - vespa_volume:/opt/vespa/var
  838. logging:
  839. driver: json-file
  840. options:
  841. max-size: "50m"
  842. max-file: "6"
  843.  
  844. nginx:
  845. image: nginx:1.23.4-alpine
  846. restart: always
  847. # nginx will immediately crash with `nginx: [emerg] host not found in upstream`
  848. # if api_server / web_server are not up
  849. depends_on:
  850. - api_server
  851. - web_server
  852. environment:
  853. - DOMAIN=localhost
  854. ports:
  855. - "80:80"
  856. - "3000:80" # allow for localhost:3000 usage, since that is the norm
  857. volumes:
  858. - ../data/nginx:/etc/nginx/conf.d
  859. logging:
  860. driver: json-file
  861. options:
  862. max-size: "50m"
  863. max-file: "6"
  864. # The specified script waits for the api_server to start up.
  865. # Without this we've seen issues where nginx shows no error logs but
  866. # does not recieve any traffic
  867. # NOTE: we have to use dos2unix to remove Carriage Return chars from the file
  868. # in order to make this work on both Unix-like systems and windows
  869. command: >
  870. /bin/sh -c "dos2unix /etc/nginx/conf.d/run-nginx.sh
  871. && /etc/nginx/conf.d/run-nginx.sh app.conf.template.dev"
  872.  
  873. cache:
  874. image: redis:7.4-alpine
  875. restart: always
  876. ports:
  877. - "6379:6379"
  878. # docker silently mounts /data even without an explicit volume mount, which enables
  879. # persistence. explicitly setting save and appendonly forces ephemeral behavior.
  880. command: redis-server --save "" --appendonly no
  881.  
  882. volumes:
  883. db_volume:
  884. vespa_volume: # Created by the container itself
  885.  
  886. model_cache_huggingface:
  887. indexing_huggingface_model_cache:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement