docker-compose.yml 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. #ident "@(#)$Format:LocalFoodAI_lanfr144:docker-compose.yml:%an:%ae:%ad:%cn:%ce:%cd:%H:%D:%N$"
  2. services:
  3. mysql:
  4. build:
  5. context: ./docker/mysql
  6. ports:
  7. - "3306:3306"
  8. volumes:
  9. - mysql_data:/var/lib/mysql
  10. - ./my.cnf:/etc/mysql/conf.d/custom_ai_app.cnf
  11. - ./init.sql:/docker-entrypoint-initdb.d/1-init.sql
  12. environment:
  13. - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
  14. healthcheck:
  15. test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
  16. interval: 10s
  17. timeout: 5s
  18. retries: 20
  19. restart: always
  20. logging:
  21. driver: "json-file"
  22. options:
  23. max-size: "50m"
  24. max-file: "3"
  25. ingest:
  26. build:
  27. context: .
  28. dockerfile: docker/ingest/Dockerfile
  29. environment:
  30. - DB_HOST=mysql
  31. - DB_USER=food_loader
  32. - DB_PASS=${DB_LOADER_PASS}
  33. volumes:
  34. - ./:/app
  35. profiles:
  36. - manual
  37. ollama:
  38. image: ollama/ollama:latest
  39. volumes:
  40. - ollama_data:/root/.ollama
  41. restart: always
  42. logging:
  43. driver: "json-file"
  44. options:
  45. max-size: "50m"
  46. max-file: "3"
  47. searxng:
  48. image: searxng/searxng:latest
  49. ports:
  50. - "8085:8080"
  51. volumes:
  52. - ./searxng:/etc/searxng
  53. environment:
  54. - SEARXNG_BASE_URL=http://localhost:8080/
  55. restart: always
  56. logging:
  57. driver: "json-file"
  58. options:
  59. max-size: "50m"
  60. max-file: "3"
  61. app:
  62. build:
  63. context: .
  64. dockerfile: docker/app/Dockerfile
  65. ports:
  66. - "8502:8501"
  67. environment:
  68. - DB_HOST=mysql
  69. - DB_USER=food_reader
  70. - DB_PASS=${DB_READER_PASS}
  71. - APP_AUTH_USER=food_app_auth
  72. - APP_AUTH_PASS=${DB_APP_AUTH_PASS}
  73. - OLLAMA_HOST=http://ollama:11434
  74. - SEARXNG_HOST=http://searxng:8080
  75. - LLM_MODEL=${LLM_MODEL}
  76. volumes:
  77. - ./.env:/app/.env
  78. restart: always
  79. logging:
  80. driver: "json-file"
  81. options:
  82. max-size: "50m"
  83. max-file: "3"
  84. nginx:
  85. image: nginx:latest
  86. ports:
  87. - "80:80"
  88. volumes:
  89. - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
  90. restart: always
  91. logging:
  92. driver: "json-file"
  93. options:
  94. max-size: "50m"
  95. max-file: "3"
  96. zabbix-server:
  97. image: zabbix/zabbix-server-mysql:ubuntu-7.0-latest
  98. environment:
  99. - DB_SERVER_HOST=mysql
  100. - MYSQL_USER=zabbix
  101. - MYSQL_PASSWORD=${MYSQL_ZABBIX_PASSWORD}
  102. - ZBX_SNMPTRAPPER=1
  103. restart: always
  104. logging:
  105. driver: "json-file"
  106. options:
  107. max-size: "50m"
  108. max-file: "3"
  109. ports:
  110. - "10051:10051"
  111. zabbix-web:
  112. image: zabbix/zabbix-web-nginx-mysql:ubuntu-7.0-latest
  113. ports:
  114. - "8081:8080"
  115. - "8444:8443"
  116. environment:
  117. - DB_SERVER_HOST=mysql
  118. - MYSQL_USER=zabbix
  119. - MYSQL_PASSWORD=${MYSQL_ZABBIX_PASSWORD}
  120. - ZBX_SERVER_HOST=zabbix-server
  121. - PHP_TZ=Europe/Paris
  122. restart: always
  123. logging:
  124. driver: "json-file"
  125. options:
  126. max-size: "50m"
  127. max-file: "3"
  128. zabbix-agent:
  129. image: zabbix/zabbix-agent:ubuntu-7.0-latest
  130. environment:
  131. - ZBX_HOSTNAME=DistributedNode
  132. - ZBX_SERVER_HOST=zabbix-server
  133. privileged: true
  134. pid: "host"
  135. volumes:
  136. - /var/run:/var/run
  137. restart: always
  138. logging:
  139. driver: "json-file"
  140. options:
  141. max-size: "50m"
  142. max-file: "3"
  143. airflow-webserver:
  144. image: apache/airflow:2.8.1
  145. environment:
  146. - AIRFLOW__CORE__EXECUTOR=SequentialExecutor
  147. - AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=sqlite:////opt/airflow/data/airflow.db
  148. - AIRFLOW__CORE__LOAD_EXAMPLES=False
  149. ports:
  150. - "8082:8080"
  151. volumes:
  152. - ./dags:/opt/airflow/dags
  153. - ./logs:/opt/airflow/logs
  154. - ./data:/opt/airflow/data
  155. - /var/run/docker.sock:/var/run/docker.sock
  156. command: webserver
  157. restart: always
  158. logging:
  159. driver: "json-file"
  160. options:
  161. max-size: "50m"
  162. max-file: "3"
  163. airflow-scheduler:
  164. image: apache/airflow:2.8.1
  165. environment:
  166. - AIRFLOW__CORE__EXECUTOR=SequentialExecutor
  167. - AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=sqlite:////opt/airflow/data/airflow.db
  168. - AIRFLOW__CORE__LOAD_EXAMPLES=False
  169. volumes:
  170. - ./dags:/opt/airflow/dags
  171. - ./logs:/opt/airflow/logs
  172. - ./data:/opt/airflow/data
  173. - /var/run/docker.sock:/var/run/docker.sock
  174. command: bash -c "airflow db migrate && airflow users create --role Admin --username admin --email admin --firstname admin --lastname admin --password admin && airflow scheduler"
  175. restart: always
  176. logging:
  177. driver: "json-file"
  178. options:
  179. max-size: "50m"
  180. max-file: "3"
  181. volumes:
  182. mysql_data:
  183. ollama_data: