docker-compose.prod.yml 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. version: '3.8'
  2. services:
  3. # Backend PHP Service
  4. backend:
  5. build:
  6. context: .
  7. dockerfile: Dockerfile
  8. container_name: inventory-backend-prod
  9. ports:
  10. - "8080:80"
  11. environment:
  12. - DB_HOST=${DB_HOST:-mysql}
  13. - DB_PORT=${DB_PORT:-3306}
  14. - DB_NAME=${DB_NAME:-inventory_db}
  15. - DB_USER=${DB_USER:-inventory_user}
  16. - DB_PASS=${DB_PASS}
  17. - COMPANY_NAME=${COMPANY_NAME}
  18. - COMPANY_ADDRESS=${COMPANY_ADDRESS}
  19. - COMPANY_CITY=${COMPANY_CITY}
  20. - COMPANY_POSTAL_CODE=${COMPANY_POSTAL_CODE}
  21. - COMPANY_COUNTRY=${COMPANY_COUNTRY}
  22. - COMPANY_PHONE=${COMPANY_PHONE}
  23. - COMPANY_EMAIL=${COMPANY_EMAIL}
  24. - COMPANY_Y_TUNNUS=${COMPANY_Y_TUNNUS}
  25. - UPLOAD_MAX_SIZE=${UPLOAD_MAX_SIZE:-10M}
  26. - ALLOWED_FILE_TYPES=${ALLOWED_FILE_TYPES:-pdf,doc,docx,xls,xlsx,jpg,jpeg,png,gif}
  27. volumes:
  28. - uploads_data:/var/www/html/uploads
  29. depends_on:
  30. - mysql
  31. networks:
  32. - inventory-network
  33. restart: unless-stopped
  34. healthcheck:
  35. test: ["CMD", "curl", "-f", "http://localhost/api/company.php"]
  36. interval: 30s
  37. timeout: 10s
  38. retries: 3
  39. # Frontend Vue.js Service
  40. frontend:
  41. build:
  42. context: ./frontend
  43. dockerfile: Dockerfile
  44. args:
  45. - VUE_APP_API_URL=${VUE_APP_API_URL:-http://localhost:8080}
  46. container_name: inventory-frontend-prod
  47. ports:
  48. - "3000:80"
  49. depends_on:
  50. - backend
  51. networks:
  52. - inventory-network
  53. restart: unless-stopped
  54. healthcheck:
  55. test: ["CMD", "curl", "-f", "http://localhost/"]
  56. interval: 30s
  57. timeout: 10s
  58. retries: 3
  59. # MySQL Database Service
  60. mysql:
  61. image: mysql:8.0
  62. container_name: inventory-mysql-prod
  63. environment:
  64. - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
  65. - MYSQL_DATABASE=${DB_NAME:-inventory_db}
  66. - MYSQL_USER=${DB_USER:-inventory_user}
  67. - MYSQL_PASSWORD=${DB_PASS}
  68. volumes:
  69. - mysql_data:/var/lib/mysql
  70. - ./database/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
  71. - ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf:ro
  72. networks:
  73. - inventory-network
  74. restart: unless-stopped
  75. command: --default-authentication-plugin=mysql_native_password --innodb-buffer-pool-size=256M --max-connections=100
  76. healthcheck:
  77. test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "${DB_USER:-inventory_user}", "-p${DB_PASS}"]
  78. interval: 30s
  79. timeout: 10s
  80. retries: 5
  81. # Redis Cache Service
  82. redis:
  83. image: redis:7-alpine
  84. container_name: inventory-redis-prod
  85. volumes:
  86. - redis_data:/data
  87. - ./docker/redis/redis.conf:/usr/local/etc/redis/redis.conf:ro
  88. networks:
  89. - inventory-network
  90. restart: unless-stopped
  91. command: redis-server /usr/local/etc/redis/redis.conf
  92. healthcheck:
  93. test: ["CMD", "redis-cli", "ping"]
  94. interval: 30s
  95. timeout: 10s
  96. retries: 3
  97. volumes:
  98. mysql_data:
  99. driver: local
  100. redis_data:
  101. driver: local
  102. uploads_data:
  103. driver: local
  104. driver_opts:
  105. type: none
  106. o: bind
  107. device: ${UPLOADS_PATH:-/var/inventory/uploads}
  108. networks:
  109. inventory-network:
  110. driver: bridge