# ============================================ # PHP API Stack — Environment Configuration # Image: kariricode/php-api-stack # ============================================ # Application # ============================================ APP_NAME=php-api-stack APP_ENV=development APP_DEBUG=true APP_PORT=8089 APP_DOMAIN=localhost # Paths (container) APP_ROOT=/var/www/html APP_PUBLIC_PATH=/var/www/html/public LOG_PATH=/var/log DATA_PATH=/var/lib # ============================================+ # Build-time component versions (informational) # ============================================= PHP_VERSION=8.4 NGINX_VERSION=1.27.3 REDIS_VERSION=7.2 ALPINE_VERSION=3.21 COMPOSER_VERSION=2.8.12 SYMFONY_CLI_VERSION=5.15.1 # ============================================ # PECL Extension Versions # ============================================ PHP_REDIS_VERSION=6.1.0 PHP_APCU_VERSION=5.1.24 PHP_UUID_VERSION=1.2.1 PHP_IMAGICK_VERSION=3.7.0 PHP_AMQP_VERSION=2.1.2 XDEBUG_VERSION=3.4.6 # ============================================ # PHP / Extensions # ============================================ # Core PHP extensions (space-separated) # IMPORTANTE: Use aspas duplas para evitar interpretação como comando PHP_CORE_EXTENSIONS="pdo pdo_mysql opcache intl zip bcmath gd mbstring xml sockets" # PECL extensions (space-separated) PHP_PECL_EXTENSIONS="redis apcu uuid" # ============================================ # Nginx # ============================================ NGINX_WORKER_PROCESSES=auto NGINX_WORKER_CONNECTIONS=2048 NGINX_KEEPALIVE_TIMEOUT=65 NGINX_CLIENT_MAX_BODY_SIZE=100M NGINX_FASTCGI_BUFFER_SIZE=16k NGINX_FASTCGI_BUFFERS="16 16k" NGINX_GZIP=on NGINX_GZIP_COMP_LEVEL=6 NGINX_ACCESS_LOG=/var/log/nginx/access.log NGINX_ERROR_LOG=/var/log/nginx/error.log # ============================================ # PHP Runtime # ============================================ PHP_MEMORY_LIMIT=256M PHP_MAX_EXECUTION_TIME=60 PHP_MAX_INPUT_TIME=60 PHP_POST_MAX_SIZE=100M PHP_UPLOAD_MAX_FILESIZE=100M PHP_MAX_FILE_UPLOADS=20 PHP_DATE_TIMEZONE=America/Sao_Paulo PHP_DISPLAY_ERRORS=Off PHP_ERROR_LOG=/var/log/php/error.log # PHP session settings (Redis-backed) PHP_SESSION_SAVE_HANDLER=redis # Do NOT use ${VAR:-default} here; defaults are handled by the entrypoint. # If authentication is not required, remove the "?auth=..." suffix. PHP_SESSION_SAVE_PATH=tcp://redis:6379?auth=${REDIS_PASSWORD} # ============================================ # PHP-FPM # ============================================ PHP_FPM_PM=dynamic PHP_FPM_PM_MAX_CHILDREN=60 PHP_FPM_PM_START_SERVERS=5 PHP_FPM_PM_MIN_SPARE_SERVERS=5 PHP_FPM_PM_MAX_SPARE_SERVERS=10 PHP_FPM_PM_MAX_REQUESTS=500 PHP_FPM_PM_STATUS_PATH=/status PHP_FPM_PING_PATH=/ping PHP_FPM_ACCESS_LOG=/var/log/php/fpm-access.log PHP_FPM_SLOW_LOG=/var/log/php/fpm-slow.log PHP_FPM_REQUEST_SLOWLOG_TIMEOUT=30s # ============================================ # OPcache # ============================================ PHP_OPCACHE_ENABLE=1 PHP_OPCACHE_MEMORY=256 PHP_OPCACHE_MAX_FILES=20000 PHP_OPCACHE_VALIDATE_TIMESTAMPS=1 PHP_OPCACHE_REVALIDATE_FREQ=0 PHP_OPCACHE_JIT=tracing PHP_OPCACHE_JIT_BUFFER_SIZE=128M # ============================================ # Redis (runtime + template-driven) # ============================================ # Host / credentials REDIS_HOST=redis REDIS_PASSWORD=HmlRedis_3Qy7nFTZgW6M2bK9pX4c # External Redis example service (compose profile) REDIS_HOST_PORT=6378 # Database count used by the template REDIS_DATABASES=16 # Memory policy – use lowercase units for Redis (e.g., 256mb) REDIS_MAXMEMORY=256mb REDIS_MAXMEMORY_POLICY=allkeys-lru REDIS_MAXMEMORY_SAMPLES=5 # Connections and timeouts REDIS_MAXCLIENTS=10000 REDIS_TIMEOUT=0 # Persistence (AOF/RDB) REDIS_APPENDONLY=yes REDIS_APPENDFSYNC=everysec REDIS_SAVE="900 1 300 10 60 10000" # Logging (empty string logs to STDOUT via redis.conf.template) REDIS_LOG_LEVEL=notice REDIS_LOG_FILE=/var/log/redis/redis.log # ============================================ # Security (reverse proxy / app layer) # ============================================ SECURITY_HEADERS=true SECURITY_CSP="default-src 'self'" SECURITY_HSTS_MAX_AGE=31536000 RATE_LIMIT_ZONE_SIZE=10m RATE_LIMIT_RATE=10r/s RATE_LIMIT_BURST=20 # ============================================ # Performance (reverse proxy / app layer) # ============================================ ENABLE_CACHE=true CACHE_TTL=3600 ENABLE_COMPRESSION=true ENABLE_HTTP2=true # ============================================ # Development (enable only in non-production) # ============================================ XDEBUG_ENABLE=1 XDEBUG_MODE=develop,debug,coverage XDEBUG_HOST=host.docker.internal XDEBUG_PORT=9003 XDEBUG_IDE_KEY=VSCODE XDEBUG_VERSION=3.4.6 # ============================================ # Build / Registry # ============================================ BUILD_TARGET=production IMAGE_TAG=dev REGISTRY=docker.io REPOSITORY=kariricode/php-api-stack # ============================================ # Container Resources (Docker/K8s hints) # ============================================ CONTAINER_MEMORY_LIMIT=1G CONTAINER_CPU_LIMIT=2 CONTAINER_MEMORY_RESERVATION=512M CONTAINER_CPU_RESERVATION=0.5 # ============================================ # Optional — docker-compose.example.yml helpers # (Not required by the base image) # ============================================ # Observability / health ENABLE_METRICS=true ENABLE_HEALTH_CHECK=true HEALTH_CHECK_PATH=/health METRICS_BIND=0.0.0.0 METRICS_PATH=/metrics # Metrics ports # Internal PHP-FPM metrics exporter port METRICS_PHP_FPM_PORT=9000 # Host port exposed for Prometheus (example compose profile) PROMETHEUS_PORT=9091 # MySQL example service (compose profile) # Tip: if your host already uses 3306, prefer 3307 here. DB_ROOT_PASSWORD=HmlRoot_9dY7q!Sg DB_DATABASE=php_api_hml DB_USERNAME=phpapi_hml DB_PASSWORD=HmlUser_3kT8zQf DB_PORT=3307 # Grafana example service (compose profile) GRAFANA_PORT=3000 GRAFANA_PASSWORD=HmlGrafana_7uV4mRp # Supervisor (disabled by default; enable only if your image includes it) # SUPERVISOR_LOG_LEVEL=info # SUPERVISOR_LOG_FILE=/var/log/supervisor/supervisord.log # SUPERVISOR_PID_FILE=/var/run/supervisord.pid