x-shared-env: &shared-api-env MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-rootpassword} MYSQL_ROOT_HOST: ${MYSQL_ROOT_HOST:-'%'} # 允许root从任何主机连接 MYSQL_DATABASE: ${MYSQL_DATABASE:-eyoucms} MYSQL_USER: ${MYSQL_USER:-eyoucms} MYSQL_PASSWORD: ${MYSQL_PASSWORD:-eyoucms} # 将服务归类到目录 A 中 services: php-fpm: build: context: ./docker/php dockerfile: Dockerfile container_name: ${PROJECT_NAME}_${APP_ENV}_php restart: always extra_hosts: - "host.docker.internal:host-gateway" # 支持主机名解析 environment: PHP_ENV: ${PHP_ENV:-dev} APP_ENV: ${APP_ENV:-dev} APP_DEBUG: ${APP_DEBUG:-true} ports: - "${PHP_FPM_PORT:-9000}:9000" # PHP-FPM volumes: - ./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 depends_on: - db healthcheck: test: ["CMD", "bash", "-c", "curl -f http://localhost:9000/status"] interval: 30s timeout: 10s retries: 3 start_period: 60s networks: - net-php-ooficial-website labels: - "com.docker.compose.project.working_dir=${PROJECT_NAME}_${APP_ENV}" nginx: build: context: ./docker/nginx dockerfile: Dockerfile container_name: ${PROJECT_NAME}_${APP_ENV}_nginx restart: always ports: - "${NGINX_PORT:-80}:80" - "${NGINX_SSL_PORT:-443}:443" volumes: # 挂载项目代码到 Nginx 容器中 - ./src:/var/www/html:rw # 更新下载源列表以加速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: - net-php-ooficial-website labels: - "com.docker.compose.project.working_dir=${PROJECT_NAME}_${APP_ENV}" db: image: mysql:5.7.44 container_name: ${PROJECT_NAME}_${APP_ENV}_mysql environment: <<: *shared-api-env volumes: - mysql_db:/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: - net-php-ooficial-website 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}_${APP_ENV}" volumes: mysql_db: name: ${PROJECT_NAME}_${APP_ENV}_mysql_db driver: local driver_opts: type: none o: bind device: ./docker-volumes/mysql/${APP_ENV} redis_data: name: ${PROJECT_NAME}_${APP_ENV}_redis_data driver: local driver_opts: type: none o: bind device: ./docker-volumes/redis/${APP_ENV} networks: net-php-ooficial-website: name: ${PROJECT_NAME}_${APP_ENV}_net driver: bridge external: true