x-shared-env: &shared-api-env MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-rootpassword} MYSQL_ROOT_HOST: ${MYSQL_ROOT_HOST:-'%'} # 允许root从任何主机连接 MYSQL_DATABASE: ${MYSQL_DATABASE:-shop_mallnew} MYSQL_USER: ${MYSQL_USER:-shop_mallnew} MYSQL_PASSWORD: ${MYSQL_PASSWORD:-shop_mallnew} REDIS_PASSWORD: ${REDIS_PASSWORD:-luckyshop123!@#} REDIS_PORT: ${REDIS_PORT:-6379} # 将服务归类到目录 A 中 services: php-fpm: build: context: ./docker/php dockerfile: Dockerfile container_name: ${PROJECT_NAME}_php restart: always extra_hosts: - "host.docker.internal:host-gateway" # 支持主机名解析 environment: PHP_ENV: ${PHP_ENV:-development} APP_ENV: ${APP_ENV:-development} APP_DEBUG: ${APP_DEBUG:-true} XDEBUG_CONFIG: ${XDEBUG_CONFIG:-client_host=host.docker.internal client_port=9003} PHP_IDE_CONFIG: serverName=docker-php ports: - "${PHP_FPM_PORT:-9000}:9000" # PHP-FPM - "${XDEBUG_POST:-9003}:9003" # Xdebug volumes: - ./:/var/www/all_source - ./src:/var/www/html # 更新下载源列表以加速apt-get - ./docker/debian/sources.list:/etc/apt/sources.list:ro - ./docker/php/php.ini:/usr/local/etc/php/php.ini:ro - ./docker/php/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini - xdebug_logs:/tmp # Xdebug 日志目录 depends_on: - db healthcheck: test: ["CMD", "bash", "-c", "curl -f http://localhost:9000/status && ps aux | grep '[p]hp think cron:schedule'"] interval: 30s timeout: 10s retries: 3 start_period: 60s networks: - sass-platform-net labels: - "com.docker.compose.project.working_dir=${PROJECT_NAME}" nginx: build: context: ./docker/nginx dockerfile: Dockerfile container_name: ${PROJECT_NAME}_nginx restart: always ports: - "${NGINX_PORT:-80}:80" - "${NGINX_SSL_PORT:-443}:443" volumes: - ./src:/var/www/html:ro # 更新下载源列表以加速apt-get - ./docker/debian/sources.list:/etc/apt/sources.list:ro # 创建临时目录 - /var/www/server/nginx/proxy_temp_dir - /var/www/server/nginx/proxy_cache_dir depends_on: - php-fpm networks: - sass-platform-net labels: - "com.docker.compose.project.working_dir=${PROJECT_NAME}" db: image: mysql:5.7.44 container_name: ${PROJECT_NAME}_mysql environment: <<: *shared-api-env volumes: - mysql_db_data:/var/lib/mysql - ./docker/mysql/init:/docker-entrypoint-initdb.d - ./docker/mysql/my.cnf:/etc/mysql/conf.d/custom.cnf ports: - ${MYSQL_PORT:-3306}:3306 networks: - sass-platform-net restart: unless-stopped command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci - --innodb_buffer_pool_size=256M labels: - "com.docker.compose.project.working_dir=${PROJECT_NAME}" # Redis 服务(可选) redis: image: redis:8.2 container_name: ${PROJECT_NAME}_redis environment: REDIS_PASSWORD: ${REDIS_PASSWORD:-luckyshop123!@#} REDISCLI_AUTH: ${REDIS_PASSWORD:-luckyshop123!@#} ports: - "${REDIS_PORT:-6379}:6379" volumes: - redis_data:/data - ./docker/redis/redis.conf:/etc/redis/redis.conf networks: - sass-platform-net restart: unless-stopped labels: - "com.docker.compose.project.working_dir=${PROJECT_NAME}" volumes: mysql_db_data: redis_data: xdebug_logs: networks: sass-platform-net: driver: bridge