255 lines
5.7 KiB
YAML
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 |