docker-compose.yml 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. #ident "@(#)$Format:LocalFoodAI:app.py:%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. restart: always
  76. logging:
  77. driver: "json-file"
  78. options:
  79. max-size: "50m"
  80. max-file: "3"
  81. nginx:
  82. image: nginx:latest
  83. ports:
  84. - "80:80"
  85. volumes:
  86. - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
  87. restart: always
  88. logging:
  89. driver: "json-file"
  90. options:
  91. max-size: "50m"
  92. max-file: "3"
  93. zabbix-server:
  94. image: zabbix/zabbix-server-mysql:ubuntu-7.0-latest
  95. environment:
  96. - DB_SERVER_HOST=mysql
  97. - MYSQL_USER=zabbix
  98. - MYSQL_PASSWORD=${MYSQL_ZABBIX_PASSWORD}
  99. - ZBX_SNMPTRAPPER=1
  100. restart: always
  101. logging:
  102. driver: "json-file"
  103. options:
  104. max-size: "50m"
  105. max-file: "3"
  106. ports:
  107. - "10051:10051"
  108. zabbix-web:
  109. image: zabbix/zabbix-web-nginx-mysql:ubuntu-7.0-latest
  110. ports:
  111. - "8081:8080"
  112. - "8444:8443"
  113. environment:
  114. - DB_SERVER_HOST=mysql
  115. - MYSQL_USER=zabbix
  116. - MYSQL_PASSWORD=${MYSQL_ZABBIX_PASSWORD}
  117. - ZBX_SERVER_HOST=zabbix-server
  118. - PHP_TZ=Europe/Paris
  119. restart: always
  120. logging:
  121. driver: "json-file"
  122. options:
  123. max-size: "50m"
  124. max-file: "3"
  125. zabbix-agent:
  126. image: zabbix/zabbix-agent:ubuntu-7.0-latest
  127. environment:
  128. - ZBX_HOSTNAME=DistributedNode
  129. - ZBX_SERVER_HOST=zabbix-server
  130. privileged: true
  131. pid: "host"
  132. volumes:
  133. - /var/run:/var/run
  134. restart: always
  135. logging:
  136. driver: "json-file"
  137. options:
  138. max-size: "50m"
  139. max-file: "3"
  140. airflow-webserver:
  141. image: apache/airflow:2.8.1
  142. environment:
  143. - AIRFLOW__CORE__EXECUTOR=SequentialExecutor
  144. - AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=sqlite:////opt/airflow/data/airflow.db
  145. - AIRFLOW__CORE__LOAD_EXAMPLES=False
  146. ports:
  147. - "8082:8080"
  148. volumes:
  149. - ./dags:/opt/airflow/dags
  150. - ./logs:/opt/airflow/logs
  151. - ./data:/opt/airflow/data
  152. - /var/run/docker.sock:/var/run/docker.sock
  153. command: webserver
  154. restart: always
  155. logging:
  156. driver: "json-file"
  157. options:
  158. max-size: "50m"
  159. max-file: "3"
  160. airflow-scheduler:
  161. image: apache/airflow:2.8.1
  162. environment:
  163. - AIRFLOW__CORE__EXECUTOR=SequentialExecutor
  164. - AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=sqlite:////opt/airflow/data/airflow.db
  165. - AIRFLOW__CORE__LOAD_EXAMPLES=False
  166. volumes:
  167. - ./dags:/opt/airflow/dags
  168. - ./logs:/opt/airflow/logs
  169. - ./data:/opt/airflow/data
  170. - /var/run/docker.sock:/var/run/docker.sock
  171. command: bash -c "airflow db migrate && airflow users create --role Admin --username admin --email admin --firstname admin --lastname admin --password admin && airflow scheduler"
  172. restart: always
  173. logging:
  174. driver: "json-file"
  175. options:
  176. max-size: "50m"
  177. max-file: "3"
  178. volumes:
  179. mysql_data:
  180. ollama_data: