docker-compose.yml 6.6 KB

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