139 lines
4.4 KiB
YAML
139 lines
4.4 KiB
YAML
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 应用于 ThinkPHP 6.x 框架, .env.local 要想启用,需要在项目根目录下创建 .env.local 文件,并将 APP_ENV 设置为 local
|
||
# 同理,如果要启用开发环境,则将 APP_ENV 设置为 development,如果要启用生产环境,则将 APP_ENV 设置为 production
|
||
# 不然,ThinkPHP 6.x 系列,会只加载 .env 文件,而不会加载 .env.local 文件,导致 .env.local 文件中的配置不会生效
|
||
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:
|
||
# 挂载项目代码到 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:
|
||
- 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:
|
||
driver: local
|
||
driver_opts:
|
||
type: none
|
||
o: bind
|
||
device: ./docker/mysql_db_data
|
||
redis_data:
|
||
driver: local
|
||
driver_opts:
|
||
type: none
|
||
o: bind
|
||
device: ./docker/redis_data
|
||
xdebug_logs:
|
||
driver: local
|
||
driver_opts:
|
||
type: none
|
||
o: bind
|
||
device: ./docker/xdebug_logs
|
||
|
||
networks:
|
||
sass-platform-net:
|
||
driver: bridge |