Newwebshop/docker-compose.yml

255 lines
5.7 KiB
YAML

version: '3.8'
services:
# PHP Application
app:
build:
context: .
dockerfile: docker/php/Dockerfile
container_name: webshop_app
restart: unless-stopped
working_dir: /var/www/html
volumes:
- ./:/var/www/html
- ./docker/php/local.ini:/usr/local/etc/php/conf.d/local.ini
- ./docker/php/php.ini:/usr/local/etc/php/php.ini
networks:
- webshop_network
depends_on:
- db
- redis
environment:
- APP_ENV=local
- APP_DEBUG=true
- DB_HOST=db
- DB_PORT=3306
- DB_DATABASE=webshop
- DB_USERNAME=webshop
- DB_PASSWORD=webshop_password
- REDIS_HOST=redis
- REDIS_PORT=6379
- MAIL_HOST=mailhog
- MAIL_PORT=1025
# Nginx Web Server
nginx:
image: nginx:alpine
container_name: webshop_nginx
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./:/var/www/html
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
- ./docker/nginx/conf.d:/etc/nginx/conf.d
- ./docker/nginx/ssl:/etc/nginx/ssl
- ./logs/nginx:/var/log/nginx
networks:
- webshop_network
depends_on:
- app
# MySQL Database
db:
image: mysql:8.0
container_name: webshop_db
restart: unless-stopped
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: webshop
MYSQL_USER: webshop
MYSQL_PASSWORD: webshop_password
MYSQL_ROOT_PASSWORD: root_password
volumes:
- db_data:/var/lib/mysql
- ./docker/mysql/init:/docker-entrypoint-initdb.d
- ./docker/mysql/conf.d:/etc/mysql/conf.d
- ./logs/mysql:/var/log/mysql
networks:
- webshop_network
command: --default-authentication-plugin=mysql_native_password
# Redis Cache
redis:
image: redis:7-alpine
container_name: webshop_redis
restart: unless-stopped
ports:
- "6379:6379"
volumes:
- redis_data:/data
- ./docker/redis/redis.conf:/usr/local/etc/redis/redis.conf
networks:
- webshop_network
command: redis-server /usr/local/etc/redis/redis.conf
# MailHog for Email Testing
mailhog:
image: mailhog/mailhog:latest
container_name: webshop_mailhog
restart: unless-stopped
ports:
- "1025:1025"
- "8025:8025"
networks:
- webshop_network
# phpMyAdmin
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
container_name: webshop_phpmyadmin
restart: unless-stopped
ports:
- "8080:80"
environment:
PMA_HOST: db
PMA_PORT: 3306
PMA_USER: webshop
PMA_PASSWORD: webshop_password
networks:
- webshop_network
depends_on:
- db
# Adminer (Alternative to phpMyAdmin)
adminer:
image: adminer:latest
container_name: webshop_adminer
restart: unless-stopped
ports:
- "8081:8080"
networks:
- webshop_network
depends_on:
- db
# Elasticsearch for Search
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
container_name: webshop_elasticsearch
restart: unless-stopped
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- elasticsearch_data:/usr/share/elasticsearch/data
networks:
- webshop_network
ports:
- "9200:9200"
# Kibana for Elasticsearch Management
kibana:
image: docker.elastic.co/kibana/kibana:8.11.0
container_name: webshop_kibana
restart: unless-stopped
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
networks:
- webshop_network
depends_on:
- elasticsearch
ports:
- "5601:5601"
# RabbitMQ for Message Queue
rabbitmq:
image: rabbitmq:3-management-alpine
container_name: webshop_rabbitmq
restart: unless-stopped
environment:
RABBITMQ_DEFAULT_USER: webshop
RABBITMQ_DEFAULT_PASS: webshop_password
volumes:
- rabbitmq_data:/var/lib/rabbitmq
networks:
- webshop_network
ports:
- "5672:5672"
- "15672:15672"
# MinIO for Object Storage
minio:
image: minio/minio:latest
container_name: webshop_minio
restart: unless-stopped
ports:
- "9000:9000"
- "9001:9001"
environment:
MINIO_ROOT_USER: webshop
MINIO_ROOT_PASSWORD: webshop_password
volumes:
- minio_data:/data
networks:
- webshop_network
command: server /data --console-address ":9001"
# Varnish Cache
varnish:
image: varnish:7.3
container_name: webshop_varnish
restart: unless-stopped
ports:
- "6081:6081"
- "6082:6082"
volumes:
- ./docker/varnish/default.vcl:/etc/varnish/default.vcl
networks:
- webshop_network
depends_on:
- nginx
# Monitoring Stack
prometheus:
image: prom/prometheus:latest
container_name: webshop_prometheus
restart: unless-stopped
ports:
- "9090:9090"
volumes:
- ./docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
networks:
- webshop_network
grafana:
image: grafana/grafana:latest
container_name: webshop_grafana
restart: unless-stopped
ports:
- "3000:3000"
environment:
GF_SECURITY_ADMIN_PASSWORD: admin
volumes:
- grafana_data:/var/lib/grafana
networks:
- webshop_network
depends_on:
- prometheus
volumes:
db_data:
driver: local
redis_data:
driver: local
elasticsearch_data:
driver: local
rabbitmq_data:
driver: local
minio_data:
driver: local
prometheus_data:
driver: local
grafana_data:
driver: local
networks:
webshop_network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16