docker-compose.yml 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. services:
  2. # Main app -laravel
  3. app:
  4. &base-app
  5. build:
  6. context: .
  7. dockerfile: Dockerfile
  8. args:
  9. - UID=${UID:-1000}
  10. - GID=${GID:-1000}
  11. restart: unless-stopped
  12. tty: true
  13. environment:
  14. - SERVICE_NAME=app
  15. - SERVICE_TAGS=production
  16. volumes:
  17. - ./:/var/www
  18. - ./docker/php/local.ini:/usr/local/etc/php/conf.d/local.ini
  19. networks:
  20. - str-network
  21. depends_on:
  22. db:
  23. condition: service_healthy
  24. redis:
  25. condition: service_healthy
  26. webserver:
  27. condition: service_started
  28. websocket:
  29. condition: service_started
  30. profiles:
  31. - local
  32. - prod
  33. # Laravel`s queue
  34. app-queue:
  35. <<: *base-app
  36. command: php artisan queue:work --tries=3
  37. environment:
  38. - SERVICE_NAME=app-queue
  39. # Laravel`s scheduler - disabled
  40. # app-schedule:
  41. # <<: *base-app
  42. # command: php artisan schedule:work
  43. # environment:
  44. # SERVICE_NAME: ${COMPOSE_PROJECT_NAME}-schedule
  45. # hostname: ${COMPOSE_PROJECT_NAME}-schedule
  46. # Nginx Service ----------------------------------------------------------------------------------------------------
  47. webserver:
  48. &base-nginx
  49. build:
  50. context: .
  51. dockerfile: docker/nginx/Dockerfile
  52. restart: unless-stopped
  53. tty: true
  54. command: '/bin/sh -c ''while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g "daemon off;"'''
  55. ports:
  56. - ${WEB_PORT:-80}:80
  57. volumes:
  58. - ./public:/var/frontend
  59. - ./:/var/www
  60. - ./docker/nginx/conf.d/:/etc/nginx/conf.d/
  61. networks:
  62. - str-network
  63. profiles:
  64. - local
  65. - prod
  66. # Vite Service -----------------------------------------------------------------------------------------------------
  67. vite:
  68. <<: *base-nginx
  69. restart: no
  70. command: '/bin/sh -c ''npm run dev'''
  71. ports:
  72. - 5172:5172
  73. profiles:
  74. - local
  75. #MySQL Service
  76. db:
  77. image: mysql:8.0
  78. command: --default-authentication-plugin=mysql_native_password
  79. restart: unless-stopped
  80. tty: true
  81. environment:
  82. - MYSQL_DATABASE=${DB_DATABASE}
  83. - MYSQL_ROOT_PASSWORD=root
  84. - MYSQL_USER=${DB_USERNAME}
  85. - MYSQL_PASSWORD=${DB_PASSWORD}
  86. - SERVICE_TAGS=production
  87. - SERVICE_NAME=mysql
  88. - TZ=${APP_TIMEZONE}
  89. healthcheck:
  90. test: mysqladmin ping -h 127.0.0.1 -u $$MYSQL_USER --password=$$MYSQL_PASSWORD
  91. start_period: 5s
  92. interval: 5s
  93. timeout: 5s
  94. retries: 255
  95. volumes:
  96. - ./docker/mysql/my.cnf:/etc/my.cnf
  97. - ./docker/database:/var/lib/mysql:delegated
  98. networks:
  99. - str-network
  100. profiles:
  101. - local
  102. - prod
  103. # Websocket service
  104. websocket:
  105. build:
  106. context: docker/simple-ws
  107. dockerfile: Dockerfile
  108. volumes:
  109. - ./docker/simple-ws/server.js:/app/server.js
  110. restart: unless-stopped
  111. environment:
  112. - JWT_SECRET=${JWT_SECRET}
  113. - REDIS_PASSWORD=${REDIS_PASSWORD}
  114. tty: true
  115. command: '/bin/sh -c ''node server'''
  116. networks:
  117. - str-network
  118. depends_on:
  119. redis:
  120. condition: service_healthy
  121. profiles:
  122. - local
  123. - prod
  124. # Redis service
  125. redis:
  126. image: "redis:alpine"
  127. restart: unless-stopped
  128. command: redis-server --requirepass ${REDIS_PASSWORD}
  129. environment:
  130. - REDIS_REPLICATION_MODE=master
  131. networks:
  132. - str-network
  133. healthcheck:
  134. test: redis-cli -a ${REDIS_PASSWORD} --raw incr ping
  135. start_period: 1s
  136. interval: 5s
  137. timeout: 3s
  138. retries: 255
  139. profiles:
  140. - local
  141. - prod
  142. # Converter service
  143. pdf-converter:
  144. image: wteja/pdf-converter
  145. platform: linux/amd64
  146. restart: unless-stopped
  147. networks:
  148. - str-network
  149. hostname: pdf-converter
  150. profiles:
  151. - local
  152. - prod
  153. #Docker Networks
  154. networks:
  155. str-network:
  156. driver: bridge
  157. name: ${COMPOSE_PROJECT_NAME}-network