| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- version: '3.8'
- services:
- # Backend PHP Service
- backend:
- build:
- context: .
- dockerfile: Dockerfile
- container_name: inventory-backend-prod
- ports:
- - "8080:80"
- environment:
- - DB_HOST=${DB_HOST:-mysql}
- - DB_PORT=${DB_PORT:-3306}
- - DB_NAME=${DB_NAME:-inventory_db}
- - DB_USER=${DB_USER:-inventory_user}
- - DB_PASS=${DB_PASS}
- - COMPANY_NAME=${COMPANY_NAME}
- - COMPANY_ADDRESS=${COMPANY_ADDRESS}
- - COMPANY_CITY=${COMPANY_CITY}
- - COMPANY_POSTAL_CODE=${COMPANY_POSTAL_CODE}
- - COMPANY_COUNTRY=${COMPANY_COUNTRY}
- - COMPANY_PHONE=${COMPANY_PHONE}
- - COMPANY_EMAIL=${COMPANY_EMAIL}
- - COMPANY_Y_TUNNUS=${COMPANY_Y_TUNNUS}
- - UPLOAD_MAX_SIZE=${UPLOAD_MAX_SIZE:-10M}
- - ALLOWED_FILE_TYPES=${ALLOWED_FILE_TYPES:-pdf,doc,docx,xls,xlsx,jpg,jpeg,png,gif}
- volumes:
- - uploads_data:/var/www/html/uploads
- depends_on:
- - mysql
- networks:
- - inventory-network
- restart: unless-stopped
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost/api/company.php"]
- interval: 30s
- timeout: 10s
- retries: 3
- # Frontend Vue.js Service
- frontend:
- build:
- context: ./frontend
- dockerfile: Dockerfile
- args:
- - VUE_APP_API_URL=${VUE_APP_API_URL:-http://localhost:8080}
- container_name: inventory-frontend-prod
- ports:
- - "3000:80"
- depends_on:
- - backend
- networks:
- - inventory-network
- restart: unless-stopped
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost/"]
- interval: 30s
- timeout: 10s
- retries: 3
- # MySQL Database Service
- mysql:
- image: mysql:8.0
- container_name: inventory-mysql-prod
- environment:
- - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- - MYSQL_DATABASE=${DB_NAME:-inventory_db}
- - MYSQL_USER=${DB_USER:-inventory_user}
- - MYSQL_PASSWORD=${DB_PASS}
- volumes:
- - mysql_data:/var/lib/mysql
- - ./database/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
- - ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf:ro
- networks:
- - inventory-network
- restart: unless-stopped
- command: --default-authentication-plugin=mysql_native_password --innodb-buffer-pool-size=256M --max-connections=100
- healthcheck:
- test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "${DB_USER:-inventory_user}", "-p${DB_PASS}"]
- interval: 30s
- timeout: 10s
- retries: 5
- # Redis Cache Service
- redis:
- image: redis:7-alpine
- container_name: inventory-redis-prod
- volumes:
- - redis_data:/data
- - ./docker/redis/redis.conf:/usr/local/etc/redis/redis.conf:ro
- networks:
- - inventory-network
- restart: unless-stopped
- command: redis-server /usr/local/etc/redis/redis.conf
- healthcheck:
- test: ["CMD", "redis-cli", "ping"]
- interval: 30s
- timeout: 10s
- retries: 3
- volumes:
- mysql_data:
- driver: local
- redis_data:
- driver: local
- uploads_data:
- driver: local
- driver_opts:
- type: none
- o: bind
- device: ${UPLOADS_PATH:-/var/inventory/uploads}
- networks:
- inventory-network:
- driver: bridge
|