Skip to content

Commit 23da1e6

Browse files
author
Alcides Ramos
committed
feat: add entrypoint to customize xDebug
improve the .env management from Makefile
1 parent d7c8043 commit 23da1e6

File tree

9 files changed

+102
-56
lines changed

9 files changed

+102
-56
lines changed

.env.makefile

Lines changed: 0 additions & 6 deletions
This file was deleted.

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
.idea
2-
2+
.env
33
caddy-root-ca-authority.crt

Makefile

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,26 @@ MAKEFLAGS += $(if $(value VERBOSE),,--no-print-directory)
66
# ENVIRONMENT VARIABLES
77
###
88

9-
include .env.makefile
9+
# Create a dotEnv file if does not exists
10+
$(shell test -f .env || echo "APP_ENV=dev" > .env)
1011

11-
export $(shell sed 's/=.*//' .env.makefile)
12+
# Load variables from dotEnv file
13+
include .env
14+
export $(shell sed 's/=.*//' .env);
1215

1316
###
1417
# CONSTANTS
1518
###
1619

20+
SERVICE_CADDY = caddy
21+
SERVICE_APP = app1
22+
23+
#---
24+
25+
WEBSITE_URL = https://localhost
26+
27+
#---
28+
1729
HOST_USER_ID := $(shell id --user)
1830
HOST_USER_NAME := $(shell id --user --name)
1931
HOST_GROUP_ID := $(shell id --group)
@@ -60,7 +72,7 @@ endef
6072
set-environment:
6173
$(eval APP_ENV=$(shell gum choose --header "Setting up Makefile environment..." --selected "dev" "dev" "prod"))
6274
@gum spin --spinner dot --title "Persisting your selection..." -- sleep 1
63-
@sed -i 's/^APP_ENV=.*/APP_ENV=$(APP_ENV)/' .env.makefile
75+
@sed -i 's/^APP_ENV=.*/APP_ENV=$(APP_ENV)/' .env
6476
$(MAKE) help
6577

6678
.PHONY: ensure_gum_is_installed
@@ -93,16 +105,11 @@ welcome:
93105
$(eval SERVICES=$(shell docker ps --format '{{.Names}}'))
94106
@clear
95107
@gum style --align center --width 80 --padding "1 2" --border double --border-foreground 99 ".: AVAILABLE COMMANDS :."
96-
@echo ':small_blue_diamond: ENVIRONMENT ... {{ Color "212" "0" " $(APP_ENV) " }}' | gum format -t emoji | gum format -t template
97-
@echo ''
98-
@echo ':small_blue_diamond: DOMAIN URL .... {{ Color "212" "0" " $(WEBSITE_URL) " }}' | gum format -t emoji | gum format -t template
99-
@echo ''
100-
@echo ':small_blue_diamond: USER .......... {{ Color "212" "0" " ($(HOST_USER_ID)) $(HOST_USER_NAME) " }}' | gum format -t emoji | gum format -t template
101-
@echo ''
102-
@echo ':small_blue_diamond: GROUP ......... {{ Color "212" "0" " ($(HOST_GROUP_ID)) $(HOST_GROUP_NAME) " }}' | gum format -t emoji | gum format -t template
103-
@echo ''
104-
@echo ':small_blue_diamond: SERVICE(S) .... {{ Color "212" "0" " $(SERVICES) " }}' | gum format -t emoji | gum format -t template
105-
@echo ''
108+
@echo ':small_blue_diamond: HOST USER ..... {{ Color "212" "0" " ($(HOST_USER_ID)) $(HOST_USER_NAME) " }}' | gum format -t emoji | gum format -t template; echo ''
109+
@echo ':small_blue_diamond: HOST GROUP .... {{ Color "212" "0" " ($(HOST_GROUP_ID)) $(HOST_GROUP_NAME) " }}' | gum format -t emoji | gum format -t template; echo ''
110+
@echo ':small_blue_diamond: ENVIRONMENT ... {{ Color "212" "0" " $(APP_ENV) " }}' | gum format -t emoji | gum format -t template; echo ''
111+
@echo ':small_blue_diamond: DOMAIN URL .... {{ Color "212" "0" " $(WEBSITE_URL) " }}' | gum format -t emoji | gum format -t template; echo ''
112+
@echo ':small_blue_diamond: SERVICE(S) .... {{ Color "212" "0" " $(SERVICES) " }}' | gum format -t emoji | gum format -t template; echo ''
106113
@echo ''
107114

108115
###
@@ -143,9 +150,9 @@ restart:
143150
$(call taskDone)
144151

145152
.PHONY: logs
146-
logs:
147-
$(call showInfo,"Exposing service\(s\) logs...")
148-
@$(DOCKER_COMPOSE) logs -f
153+
logs: choose-service
154+
$(call showInfo,"Exposing [ $(SERVICE) ] logs...")
155+
@$(DOCKER_COMPOSE) logs -f $(SERVICE)
149156
$(call taskDone)
150157

151158
.PHONY: inspect

docker/Dockerfile

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ COPY --from=composer /usr/bin/composer /usr/bin/composer
6767

6868
# Add OS dependencies related with development
6969
RUN apk update && apk add --no-cache \
70+
envsubst \
7071
git \
71-
make \
7272
ncurses \
7373
util-linux
7474

@@ -86,10 +86,22 @@ COPY docker/php-fpm/www.conf /usr/local/etc/php-fpm.d/www.conf
8686
RUN sed -i -r "s/USER-NAME/${HOST_USER_NAME}/g" /usr/local/etc/php-fpm.d/www.conf \
8787
&& sed -i -r "s/GROUP-NAME/${HOST_GROUP_NAME}/g" /usr/local/etc/php-fpm.d/www.conf
8888

89-
# Setup xDebug
90-
COPY docker/php-fpm/xdebug.ini /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
91-
RUN touch /var/log/xdebug.log \
92-
&& chown ${HOST_USER_NAME}:${HOST_GROUP_NAME} /var/log/xdebug.log
89+
# Setup PHP-FPM slow log
90+
RUN touch /var/log/www.log.slow \
91+
&& chown ${HOST_USER_NAME}:${HOST_GROUP_NAME} /var/log/www.log.slow
92+
93+
# Setup entrypoint
94+
# Ensure the `entrypoint.sh` can be executed inside the container
95+
96+
COPY docker/php-fpm/xdebug.ini.tmpl /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini.tmpl
97+
COPY --chmod=755 docker/entrypoint.sh /entrypoint.sh
98+
99+
RUN touch /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
100+
&& chown ${HOST_USER_NAME}:root /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
101+
102+
ENTRYPOINT ["/entrypoint.sh"]
103+
104+
CMD ["php-fpm"]
93105

94106
#----------------------------------------------------------
95107
# STAGE: OPTIMIZE-PHP-DEPENDENCIES
@@ -136,10 +148,11 @@ COPY --from=extensions-builder-required /usr/local/etc/php/conf.d/* /usr/local/e
136148
# Add the optimized for production application
137149
COPY --from=optimize-php-dependencies --chown=www-data:www-data /app /var/www/html
138150

139-
# Setup the FPM service name and port
140-
RUN sed -i -r "s/LISTEN/${LISTEN}/g" /healthcheck.sh
141-
142151
# Setup PHP-FPM
143152
COPY docker/php-fpm/www.conf /usr/local/etc/php-fpm.d/www.conf
144153
RUN sed -i -r "s/USER-NAME/www-data/g" /usr/local/etc/php-fpm.d/www.conf \
145154
&& sed -i -r "s/GROUP-NAME/www-data/g" /usr/local/etc/php-fpm.d/www.conf
155+
156+
# Setup PHP-FPM slow log
157+
RUN touch /var/log/www.log.slow \
158+
&& chown www-data:www-data /var/log/www.log.slow

docker/docker-compose.override.dev.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,16 @@ services:
1515
extends:
1616
file: docker-compose.yml
1717
service: app1
18+
environment:
19+
- PHP_XDEBUG_MODE=debug
20+
- PHP_XDEBUG_START_WITH_REQUEST=yes
21+
- PHP_XDEBUG_CLIENT_HOST=host.docker.internal
22+
- PHP_XDEBUG_CLIENT_PORT=9900
23+
- PHP_XDEBUG_MAX_NESTING_LEVEL=3000
24+
- PHP_XDEBUG_OUTPUT_DIR=/tmp/xdebug
25+
- PHP_XDEBUG_DISCOVER_CLIENT_HOST=false
26+
- PHP_XDEBUG_LOG=/dev/stdout
27+
- PHP_XDEBUG_LOG_LEVEL=0
1828
build:
1929
context: ..
2030
dockerfile: docker/Dockerfile

docker/entrypoint.sh

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#!/bin/sh
2+
3+
set -e
4+
5+
export PHP_XDEBUG_MODE="${PHP_XDEBUG_MODE:-debug}"
6+
export PHP_XDEBUG_START_WITH_REQUEST="${PHP_XDEBUG_START_WITH_REQUEST:-yes}"
7+
export PHP_XDEBUG_CLIENT_HOST="${PHP_XDEBUG_CLIENT_HOST:-127.0.0.1}"
8+
export PHP_XDEBUG_CLIENT_PORT="${PHP_XDEBUG_CLIENT_PORT:-9900}"
9+
export PHP_XDEBUG_MAX_NESTING_LEVEL="${PHP_XDEBUG_MAX_NESTING_LEVEL:-3000}"
10+
export PHP_XDEBUG_OUTPUT_DIR="${PHP_XDEBUG_OUTPUT_DIR:-/tmp/xdebug}"
11+
export PHP_XDEBUG_DISCOVER_CLIENT_HOST="${PHP_XDEBUG_DISCOVER_CLIENT_HOST:-false}"
12+
export PHP_XDEBUG_LOG="${PHP_XDEBUG_LOG:-/dev/stdout}"
13+
export PHP_XDEBUG_LOG_LEVEL="${PHP_XDEBUG_LOG_LEVEL:-0}"
14+
15+
envsubst < /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini.tmpl > /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
16+
17+
# Executes original command
18+
19+
exec "$@"

docker/php-fpm/www.conf

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
[www]
2-
group = GROUP-NAME
3-
listen = :9000
4-
ping.path = /status/ping
5-
pm = dynamic
6-
pm.max_children = 300
7-
pm.max_requests = 10240
8-
pm.max_spare_servers = 35
9-
pm.min_spare_servers = 5
10-
pm.process_idle_timeout = 0s;
11-
pm.start_servers = 20
12-
pm.status_path = /status/php-fpm
13-
request_slowlog_timeout = 5
14-
request_terminate_timeout = 1200
15-
rlimit_files = 65535
16-
slowlog = /var/log/$pool.log.slow
17-
user = USER-NAME
2+
group=GROUP-NAME
3+
listen=:9000
4+
ping.path=/status/ping
5+
pm=dynamic
6+
pm.max_children=300
7+
pm.max_requests=10240
8+
pm.max_spare_servers=35
9+
pm.min_spare_servers=5
10+
pm.process_idle_timeout=0s
11+
pm.start_servers=20
12+
pm.status_path=/status/php-fpm
13+
request_slowlog_timeout=5
14+
request_terminate_timeout=1200
15+
rlimit_files=65535
16+
slowlog=/var/log/$pool.log.slow
17+
user=USER-NAME

docker/php-fpm/xdebug.ini

Lines changed: 0 additions & 9 deletions
This file was deleted.

docker/php-fpm/xdebug.ini.tmpl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[xdebug]
2+
zend_extension=xdebug.so
3+
4+
xdebug.mode=${PHP_XDEBUG_MODE}
5+
xdebug.start_with_request=${PHP_XDEBUG_START_WITH_REQUEST}
6+
xdebug.client_host=${PHP_XDEBUG_CLIENT_HOST}
7+
xdebug.client_port=${PHP_XDEBUG_CLIENT_PORT}
8+
xdebug.max_nesting_level=${PHP_XDEBUG_MAX_NESTING_LEVEL}
9+
xdebug.output_dir=${PHP_XDEBUG_OUTPUT_DIR}
10+
xdebug.discover_client_host=${PHP_XDEBUG_DISCOVER_CLIENT_HOST}
11+
xdebug.log=${PHP_XDEBUG_LOG}
12+
xdebug.log_level=${PHP_XDEBUG_LOG_LEVEL}

0 commit comments

Comments
 (0)