docker-compose.yml 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  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. environment:
  15. - TZ=Europe/Tallinn
  16. networks:
  17. - ai_network
  18. postgres:
  19. image: kartoza/postgis:16
  20. container_name: postgres_postgis
  21. restart: always
  22. ports:
  23. - "5432:5432"
  24. environment:
  25. POSTGRES_USER: ai_user
  26. POSTGRES_PASSWORD: ai_secure_pass_2026
  27. POSTGRES_DB: research_db
  28. POSTGRES_INITDB_ARGS: "-c shared_buffers=256MB -c max_connections=200"
  29. PGDATA: /var/lib/postgresql/data/pgdata
  30. TZ: Europe/Tallinn
  31. volumes:
  32. - postgres_data:/var/lib/postgresql/data
  33. - ./init-db:/docker-entrypoint-initdb.d
  34. healthcheck:
  35. test: ["CMD-SHELL", "pg_isready -U ai_user -d research_db"]
  36. interval: 10s
  37. timeout: 5s
  38. retries: 5
  39. networks:
  40. - ai_network
  41. weaviate:
  42. image: semitechnologies/weaviate:latest
  43. container_name: weaviate
  44. restart: always
  45. ports:
  46. - "8080:8080"
  47. - "50051:50051"
  48. environment:
  49. QUERY_DEFAULTS_LIMIT: 25
  50. AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
  51. PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
  52. DEFAULT_VECTORIZER_MODULE: 'none'
  53. CLUSTER_HOSTNAME: 'weaviate'
  54. volumes:
  55. - weaviate_data:/var/lib/weaviate
  56. networks:
  57. - ai_network
  58. ollama:
  59. image: ollama/ollama:latest
  60. container_name: ollama
  61. restart: always
  62. ports:
  63. - "11434:11434"
  64. volumes:
  65. - ollama_data:/root/.ollama
  66. environment:
  67. - OLLAMA_HOST=0.0.0.0:11434
  68. - NVIDIA_VISIBLE_DEVICES=all
  69. - CUDA_VISIBLE_DEVICES=0
  70. devices:
  71. - /dev/kfd:/dev/kfd
  72. - /dev/dri:/dev/dri
  73. networks:
  74. - ai_network
  75. jupyter:
  76. image: jupyter/datascience-notebook:latest
  77. container_name: jupyter
  78. restart: always
  79. ports:
  80. - "8888:8888"
  81. environment:
  82. - JUPYTER_ENABLE_LAB=yes
  83. - JUPYTER_TOKEN=ai_server_2026
  84. - TZ=Europe/Tallinn
  85. volumes:
  86. - ./notebooks:/home/jovyan/work
  87. - ./data:/home/jovyan/data
  88. - jupyter_data:/home/jovyan/.jupyter
  89. networks:
  90. - ai_network
  91. command: start-notebook.sh --NotebookApp.token='ai_server_2026' --NotebookApp.allow_root=True
  92. # ROCm PyTorch - GPU-kiirendatud ML/DL
  93. rocm-pytorch:
  94. image: rocm/pytorch:latest
  95. container_name: rocm_pytorch
  96. restart: always
  97. ports:
  98. - "8889:8888"
  99. - "6006:6006"
  100. environment:
  101. - HSA_OVERRIDE_GFX_VERSION=11.5.1
  102. - PYTORCH_ROCM_ARCH=gfx1151
  103. - ROCM_HOME=/opt/rocm
  104. - TZ=Europe/Tallinn
  105. - TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1 # ← UUS!
  106. devices:
  107. - /dev/kfd:/dev/kfd
  108. - /dev/dri:/dev/dri
  109. volumes:
  110. - ./pytorch-workspace:/workspace
  111. - ./models:/models
  112. - ./data:/data
  113. - rocm_pytorch_data:/root/.cache
  114. working_dir: /workspace
  115. cap_add:
  116. - SYS_PTRACE
  117. security_opt:
  118. - seccomp=unconfined
  119. ipc: host
  120. shm_size: 8G
  121. group_add:
  122. - video
  123. networks:
  124. - ai_network
  125. command: >
  126. bash -c "pip install jupyter notebook tensorboard transformers datasets huggingface_hub scikit-learn pandas psycopg2-binary &&
  127. jupyter notebook --ip=0.0.0.0 --port=8888 --no-browser --allow-root --NotebookApp.token='ai_pytorch_2026'"
  128. # ===== RAG API =====
  129. rag-api:
  130. #image: rag-api:latest
  131. build:
  132. #context: /home/ardo/rag-demo/pdf-pipeline
  133. context: /opt/docker-compose/rag-api
  134. dockerfile: Dockerfile
  135. container_name: rag_api
  136. restart: always
  137. ports:
  138. - "8072:8000"
  139. environment:
  140. LLAMA_CPP_URL: http://100.87.1.24:8070/completion
  141. WEAVIATE_HOST: weaviate
  142. WEAVIATE_HTTP_PORT: 8080
  143. WEAVIATE_URL: http://weaviate:8080
  144. WEAVIATE_CLASS: ScientificArticle
  145. DB_HOST: postgres
  146. DB_PORT: 5432
  147. DB_NAME: pdf_research
  148. DB_USER: osm
  149. DB_PASSWORD: osm
  150. OLLAMA_URL: http://ollama:11434
  151. TZ: Europe/Tallinn
  152. volumes:
  153. - /home/ardo/rag-demo/pdf-pipeline/src:/app/src
  154. - /home/ardo/rag-demo/pdf-pipeline/data:/app/data
  155. - /home/ardo/rag-demo/pdf-pipeline/output:/app/output
  156. depends_on:
  157. - weaviate
  158. - ollama
  159. - postgres
  160. networks:
  161. - ai_network
  162. healthcheck:
  163. test: ["CMD", "curl", "-f", "http://localhost:8000/docs"]
  164. interval: 30s
  165. timeout: 10s
  166. retries: 3
  167. start_period: 40s
  168. volumes:
  169. portainer_data:
  170. driver: local
  171. postgres_data:
  172. driver: local
  173. weaviate_data:
  174. driver: local
  175. ollama_data:
  176. driver: local
  177. jupyter_data:
  178. driver: local
  179. rocm_pytorch_data:
  180. driver: local
  181. networks:
  182. ai_network:
  183. driver: bridge