docker-compose.yml 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. version: '3.8'
  2. services:
  3. portainer:
  4. image: portainer/portainer-ce:latest
  5. container_name: portainer
  6. restart: always
  7. ports:
  8. - "8000:8000"
  9. - "9000:9000"
  10. - "9443:9443"
  11. volumes:
  12. - /var/run/docker.sock:/var/run/docker.sock
  13. - portainer_data:/data
  14. - /backups/docker/portainer:/backups
  15. - /etc/localtime:/etc/localtime
  16. environment:
  17. - TZ=Europe/Tallinn
  18. - LANG=C.UTF-8
  19. networks:
  20. - ai_network
  21. postgres:
  22. image: kartoza/postgis:16
  23. container_name: postgres_postgis
  24. restart: always
  25. ports:
  26. - "5432:5432"
  27. environment:
  28. POSTGRES_USER: ai_user
  29. POSTGRES_PASSWORD: ai_secure_pass_2026
  30. POSTGRES_DB: research_db
  31. POSTGRES_INITDB_ARGS: "-c shared_buffers=256MB -c max_connections=200"
  32. PGDATA: /var/lib/postgresql/data/pgdata
  33. TZ: Europe/Tallinn
  34. LANG: C.UTF-8
  35. mem_limit: 4g
  36. volumes:
  37. - postgres_data:/var/lib/postgresql/data
  38. - ./init-db:/docker-entrypoint-initdb.d
  39. - /backups/docker/postgres:/backups
  40. - /etc/localtime:/etc/localtime
  41. healthcheck:
  42. test: ["CMD-SHELL", "pg_isready -U ai_user -d research_db"]
  43. interval: 10s
  44. timeout: 5s
  45. retries: 5
  46. networks:
  47. - ai_network
  48. mariadb:
  49. image: mariadb:11
  50. container_name: mariadb
  51. restart: always
  52. ports:
  53. - "3306:3306"
  54. environment:
  55. MYSQL_ROOT_PASSWORD: ai_root_pass_2026
  56. MYSQL_DATABASE: research_mariadb
  57. MYSQL_USER: ai_mariadb_user
  58. MYSQL_PASSWORD: ai_mariadb_pass_2026
  59. TZ: Europe/Tallinn
  60. LANG: C.UTF-8
  61. mem_limit: 4g
  62. volumes:
  63. - mariadb_data:/var/lib/mysql
  64. - /backups/docker/mariadb:/backups
  65. - /etc/localtime:/etc/localtime
  66. healthcheck:
  67. test: ["CMD", "mariadb-admin", "ping", "-h", "localhost", "-uai_mariadb_user", "-pai_mariadb_pass_2026"]
  68. interval: 10s
  69. timeout: 5s
  70. retries: 5
  71. networks:
  72. - ai_network
  73. weaviate:
  74. mem_limit: 4g
  75. image: semitechnologies/weaviate:1.28.0
  76. container_name: weaviate
  77. restart: always
  78. ports:
  79. - "8080:8080"
  80. - "50051:50051"
  81. environment:
  82. QUERY_DEFAULTS_LIMIT: 25
  83. AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
  84. PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
  85. DEFAULT_VECTORIZER_MODULE: 'none'
  86. CLUSTER_HOSTNAME: 'weaviate'
  87. LANG: C.UTF-8
  88. volumes:
  89. - weaviate_data:/var/lib/weaviate
  90. - /backups/docker/weaviate:/backups
  91. - /etc/localtime:/etc/localtime
  92. networks:
  93. - ai_network
  94. # Qdrant vektoriandmebaas (toetab Open WebUI)
  95. qdrant:
  96. mem_limit: 4g
  97. image: qdrant/qdrant:v1.18.2
  98. container_name: qdrant
  99. restart: unless-stopped
  100. ports:
  101. - "6333:6333" # REST API
  102. - "6334:6334" # gRPC API
  103. environment:
  104. TZ: Europe/Tallinn
  105. LANG: C.UTF-8
  106. volumes:
  107. - qdrant_data:/qdrant/storage
  108. - ./qdrant-config.yaml:/qdrant/config/production.yaml:ro
  109. - /backups/docker/qdrant:/backups
  110. - /etc/localtime:/etc/localtime
  111. networks:
  112. - ai_network
  113. healthcheck:
  114. test: ["CMD", "bash", "-c", "</dev/tcp/localhost/6333"]
  115. interval: 30s
  116. timeout: 10s
  117. retries: 3
  118. start_period: 10s
  119. jupyter:
  120. mem_limit: 8g
  121. image: jupyter/datascience-notebook:python-3.11
  122. container_name: jupyter
  123. restart: always
  124. ports:
  125. - "8887:8888"
  126. environment:
  127. - JUPYTER_ENABLE_LAB=yes
  128. - JUPYTER_TOKEN=ai_server_2026
  129. - LANG=C.UTF-8
  130. #- TZ=Europe/Tallinn
  131. volumes:
  132. - /data/docker/jupyter/notebooks:/home/jovyan/work
  133. - /data/docker/jupyter/data:/home/jovyan/data
  134. - jupyter_data:/home/jovyan/.jupyter
  135. - /backups/docker/jupyter:/backups
  136. - /etc/localtime:/etc/localtime
  137. networks:
  138. - ai_network
  139. command: start-notebook.sh --NotebookApp.token='ai_server_2026' --NotebookApp.allow_root=True
  140. rocm-pytorch:
  141. image: rocm/pytorch:latest
  142. container_name: rocm_pytorch
  143. restart: always
  144. ports:
  145. - "8889:8888"
  146. - "6006:6006"
  147. environment:
  148. - HSA_OVERRIDE_GFX_VERSION=11.5.1
  149. - PYTORCH_ROCM_ARCH=gfx1151
  150. - ROCM_HOME=/opt/rocm
  151. - TZ=Europe/Tallinn
  152. - LANG=C.UTF-8
  153. - TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1
  154. devices:
  155. - /dev/kfd:/dev/kfd
  156. - /dev/dri:/dev/dri
  157. volumes:
  158. - /data/docker/jupyter/pytorch-workspace:/workspace
  159. - /data/docker/jupyter/models:/models
  160. - /data/docker/jupyter/data:/data
  161. - rocm_pytorch_data:/root/.cache
  162. - /backups/docker/rocm-pytorch:/backups
  163. - /etc/localtime:/etc/localtime
  164. working_dir: /workspace
  165. cap_add:
  166. - SYS_PTRACE
  167. security_opt:
  168. - seccomp=unconfined
  169. ipc: host
  170. shm_size: 8G
  171. group_add:
  172. - video
  173. networks:
  174. - ai_network
  175. command: >
  176. bash -c "pip install jupyter notebook tensorboard transformers datasets huggingface_hub scikit-learn pandas psycopg2-binary &&
  177. jupyter notebook --ip=0.0.0.0 --port=8888 --no-browser --allow-root --NotebookApp.token='ai_pytorch_2026'"
  178. rag-api:
  179. mem_limit: 4g
  180. build:
  181. context: /opt/docker-compose/main/Dockerfile/rag-api
  182. dockerfile: Dockerfile
  183. container_name: rag_api
  184. restart: always
  185. ports:
  186. - "8072:8000"
  187. environment:
  188. LLAMA_CPP_URL: http://100.87.1.24:8070/completion
  189. WEAVIATE_HOST: weaviate
  190. WEAVIATE_HTTP_PORT: 8080
  191. WEAVIATE_URL: http://weaviate:8080
  192. WEAVIATE_CLASS: ScientificArticle
  193. DB_HOST: postgres
  194. DB_PORT: 5432
  195. DB_NAME: pdf_research
  196. DB_USER: osm
  197. DB_PASSWORD: osm
  198. OLLAMA_URL: http://100.87.1.24:11434
  199. TZ: Europe/Tallinn
  200. LANG: C.UTF-8
  201. MARIADB_HOST: mariadb
  202. MARIADB_PORT: 3306
  203. MARIADB_DB: research_mariadb
  204. MARIADB_USER: ai_mariadb_user
  205. MARIADB_PASSWORD: ai_mariadb_pass_2026
  206. volumes:
  207. - /data/docker/rag-api/src:/app/src
  208. - /backups/docker/rag-api:/backups
  209. - /etc/localtime:/etc/localtime
  210. depends_on:
  211. - weaviate
  212. - postgres
  213. networks:
  214. - ai_network
  215. healthcheck:
  216. test: ["CMD", "true"]
  217. interval: 30s
  218. timeout: 10s
  219. retries: 3
  220. start_period: 40s
  221. volumes:
  222. portainer_data:
  223. driver: local
  224. postgres_data:
  225. driver: local
  226. weaviate_data:
  227. driver: local
  228. jupyter_data:
  229. driver: local
  230. rocm_pytorch_data:
  231. driver: local
  232. mariadb_data:
  233. driver: local
  234. qdrant_data:
  235. external: true
  236. name: qdrant_data
  237. networks:
  238. ai_network:
  239. driver: bridge