Skip to content

Commit 14d192e

Browse files
authored
Merge pull request #57 from usabilla/feature/split-debug-conf
Improve development mode
2 parents 92b7e8a + 7169093 commit 14d192e

File tree

8 files changed

+138
-60
lines changed

8 files changed

+138
-60
lines changed

Dockerfile-cli

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ RUN set -x \
2323
# Patch CVE-2018-14618
2424
RUN apk upgrade --no-cache curl
2525

26-
COPY src/php/conf/default.ini /usr/local/etc/php/conf.d/
26+
COPY src/php/conf/ /usr/local/etc/php/conf.d/
2727
COPY src/php/cli/conf/*.ini /usr/local/etc/php/conf.d/
2828

2929
# Install shush
@@ -45,16 +45,9 @@ HEALTHCHECK NONE
4545
## CLI-DEV STAGE ##
4646
FROM cli as cli-dev
4747

48-
# Enable XDebug
49-
RUN set -x \
50-
&& apk add --no-cache --virtual .phpize-deps $PHPIZE_DEPS \
51-
&& pecl install xdebug \
52-
&& docker-php-ext-enable xdebug \
53-
&& pecl clear-cache \
54-
&& docker-php-source-tarball clean \
55-
&& apk del .phpize-deps
56-
57-
COPY src/php/conf/debug.ini /usr/local/etc/php/conf.d/zzz_debug.ini
48+
# Install Xdebug and development specific configuration
49+
RUN docker-php-dev-mode xdebug \
50+
&& docker-php-dev-mode config
5851

5952
# Change entrypoint back to the default because we don't need shush in development
6053
ENTRYPOINT ["docker-php-entrypoint"]

Dockerfile-fpm

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ RUN apk add --no-cache --virtual .phpize-deps $PHPIZE_DEPS \
2424
# Patch CVE-2018-14618
2525
RUN apk upgrade --no-cache curl
2626

27-
COPY src/php/conf/default.ini /usr/local/etc/php/conf.d/
27+
COPY src/php/conf/ /usr/local/etc/php/conf.d/
2828
COPY src/php/fpm/conf/*.conf /usr/local/etc/php-fpm.d/
2929

3030
# Install shush
@@ -48,16 +48,9 @@ VOLUME [ "/var/run" ]
4848
## FPM-DEV STAGE ##
4949
FROM fpm as fpm-dev
5050

51-
# Enable XDebug
52-
RUN set -x \
53-
&& apk add --no-cache --virtual .phpize-deps $PHPIZE_DEPS \
54-
&& pecl install xdebug \
55-
&& docker-php-ext-enable xdebug \
56-
&& pecl clear-cache \
57-
&& docker-php-source-tarball clean \
58-
&& apk del .phpize-deps
59-
60-
COPY src/php/conf/debug.ini /usr/local/etc/php/conf.d/zzz_debug.ini
51+
# Install Xdebug and development specific configuration
52+
RUN docker-php-dev-mode xdebug \
53+
&& docker-php-dev-mode config
6154

6255
# Change entrypoint back to the default because we don't need shush in development
6356
CMD ["docker-php-entrypoint", "--force-stderr"]

Makefile

Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -56,46 +56,44 @@ lint:
5656
lint-shell:
5757
docker run --rm -v ${current_dir}:/mnt:ro koalaman/shellcheck src/http/nginx/docker* src/php/utils/install-* src/php/utils/docker/* build*
5858

59+
DOCKER_TEST_RUN=docker run --rm -t \
60+
--network php-docker-template-tests_backend-php \
61+
-v "${current_dir}/test:/tests" \
62+
-v /var/run/docker.sock:/var/run/docker.sock:ro \
63+
renatomefi/docker-testinfra:1 --verbose
64+
5965
test:
6066
docker-compose -p php-docker-template-tests up --force-recreate --build -d \
6167
|| (docker-compose -p php-docker-template-tests down; echo "tests failed" && exit 1)
62-
docker run --rm -t \
63-
--network php-docker-template-tests_backend-php \
64-
-v "${current_dir}/test:/tests" \
65-
-v /var/run/docker.sock:/var/run/docker.sock:ro \
66-
renatomefi/docker-testinfra:1 --verbose --hosts='docker://php-docker-template-tests_php_fpm_1' -m "php or php_fpm" \
68+
$(DOCKER_TEST_RUN) --hosts='docker://php-docker-template-tests_php_fpm_1' \
69+
-m "php or php_fpm or php_no_dev and not php_dev" \
70+
|| (docker-compose -p php-docker-template-tests down; echo "tests failed" && exit 1)
71+
$(DOCKER_TEST_RUN) --hosts='docker://php-docker-template-tests_php_fpm_dev_1' \
72+
-m "php or php_dev" \
73+
|| (docker-compose -p php-docker-template-tests down; echo "tests failed" && exit 1)
74+
$(DOCKER_TEST_RUN) --hosts='docker://php-docker-template-tests_php_cli_1' \
75+
-m "php or php_cli or php_no_dev and not php_dev" \
6776
|| (docker-compose -p php-docker-template-tests down; echo "tests failed" && exit 1)
68-
docker run --rm -t \
69-
--network php-docker-template-tests_backend-php \
70-
-v "${current_dir}/test:/tests" \
71-
-v /var/run/docker.sock:/var/run/docker.sock:ro \
72-
renatomefi/docker-testinfra:1 --verbose --hosts='docker://php-docker-template-tests_php_cli_1' -m "php or php_cli" \
77+
$(DOCKER_TEST_RUN) --hosts='docker://php-docker-template-tests_php_cli_dev_1' \
78+
-m "php or php_cli or php_dev" \
7379
|| (docker-compose -p php-docker-template-tests down; echo "tests failed" && exit 1)
74-
docker run --rm -t \
75-
--network php-docker-template-tests_backend-php \
76-
-v "${current_dir}/test:/tests" \
77-
-v /var/run/docker.sock:/var/run/docker.sock:ro \
78-
renatomefi/docker-testinfra:1 --verbose --hosts='docker://php-docker-template-tests_nginx_1' -m nginx \
80+
$(DOCKER_TEST_RUN) --hosts='docker://php-docker-template-tests_nginx_1' \
81+
-m "nginx" \
7982
|| (docker-compose -p php-docker-template-tests down; echo "tests failed" && exit 1)
8083
docker-compose -p php-docker-template-tests down
8184

8285
ci-test:
8386
docker-compose -p php-docker-template-tests up --force-recreate -d
84-
docker run --rm -t \
85-
--network php-docker-template-tests_backend-php \
86-
-v "${current_dir}/test:/tests" \
87-
-v /var/run/docker.sock:/var/run/docker.sock:ro \
88-
renatomefi/docker-testinfra:1 --verbose --hosts='docker://php-docker-template-tests_php_fpm_1' -m "php or php_fpm" --junitxml=/tests/test-results/php-fpm.xml
89-
docker run --rm -t \
90-
--network php-docker-template-tests_backend-php \
91-
-v "${current_dir}/test:/tests" \
92-
-v /var/run/docker.sock:/var/run/docker.sock:ro \
93-
renatomefi/docker-testinfra:1 --verbose --hosts='docker://php-docker-template-tests_php_cli_1' -m "php or php_cli" --junitxml=/tests/test-results/php-cli.xml
94-
docker run --rm -t \
95-
--network php-docker-template-tests_backend-php \
96-
-v "${current_dir}/test:/tests" \
97-
-v /var/run/docker.sock:/var/run/docker.sock:ro \
98-
renatomefi/docker-testinfra:1 --verbose --hosts='docker://php-docker-template-tests_nginx_1' -m nginx --junitxml=/tests/test-results/nginx.xml
87+
$(DOCKER_TEST_RUN) --hosts='docker://php-docker-template-tests_php_fpm_1' \
88+
-m "php or php_fpm or php_no_dev and not php_dev" --junitxml=/tests/test-results/php-fpm.xml
89+
$(DOCKER_TEST_RUN) --hosts='docker://php-docker-template-tests_php_fpm_dev_1' \
90+
-m "php or php_dev" --junitxml=/tests/test-results/php-fpm.xml
91+
$(DOCKER_TEST_RUN) --hosts='docker://php-docker-template-tests_php_cli_1' \
92+
-m "php or php_cli or php_no_dev and not php_dev" --junitxml=/tests/test-results/php-cli.xml
93+
$(DOCKER_TEST_RUN) --hosts='docker://php-docker-template-tests_php_cli_dev_1' \
94+
-m "php or php_cli or php_dev" --junitxml=/tests/test-results/php-cli.xml
95+
$(DOCKER_TEST_RUN) --hosts='docker://php-docker-template-tests_nginx_1' \
96+
-m nginx --junitxml=/tests/test-results/nginx.xml
9997

10098
scan-vulnerability:
10199
docker-compose -f test/security/docker-compose.yml -p clair-ci up -d

docker-compose.yml

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,14 @@ services:
44
image: usabillabv/php:7.2-cli-alpine3.8
55
command:
66
- "-r"
7-
- "while (true){};"
7+
- "while (true){sleep(1);};"
8+
networks:
9+
- backend-php
10+
php_cli_dev:
11+
image: usabillabv/php:7.2-cli-alpine3.8-dev
12+
command:
13+
- "-r"
14+
- "while (true){sleep(1);};"
815
networks:
916
- backend-php
1017
php_fpm:
@@ -14,6 +21,12 @@ services:
1421
- ./test/functional/web:/opt/project/public
1522
networks:
1623
- backend-php
24+
php_fpm_dev:
25+
image: usabillabv/php:7.2-fpm-alpine3.8-dev
26+
volumes:
27+
- ./test/functional/web:/opt/project/public
28+
networks:
29+
- backend-php
1730
nginx:
1831
image: usabillabv/php:nginx
1932
ports:

src/php/conf/available/dev.ini

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
expose_php=on
2+
3+
opcache.validate_timestamps=1
4+
5+
zend.assertions=1
Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
1-
expose_php=on
2-
3-
opcache.validate_timestamps=1
4-
51
xdebug.default_enable=0
62
xdebug.remote_enable=1
7-
xdebug.remote_host=docker.for.mac.localhost
3+
xdebug.remote_host=host.docker.internal
84
xdebug.remote_connect_back=0
95
xdebug.profiler_enable_trigger=1
10-
11-
zend.assertions=1
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#!/bin/sh
2+
set -e
3+
4+
usage() {
5+
echo "usage: $0 COMMAND"
6+
echo
7+
echo "Turns PHP into development mode."
8+
echo "There's not option to revert it since this should only be executed for dev images or runtime debugging."
9+
echo
10+
echo "Commands:"
11+
echo " xdebug downloads, installs and enable xdebug in the container"
12+
echo " config adds standard development configuration for PHP"
13+
echo
14+
}
15+
16+
case "$1" in
17+
xdebug)
18+
apkDel=
19+
if [ -n "$PHPIZE_DEPS" ]; then
20+
if apk info --installed .phpize-deps-configure > /dev/null; then
21+
apkDel='.phpize-deps-configure'
22+
elif ! apk info --installed .phpize-deps > /dev/null; then
23+
# shellcheck disable=SC2086
24+
apk add --no-cache --virtual .phpize-deps $PHPIZE_DEPS
25+
apkDel='.phpize-deps'
26+
fi
27+
else
28+
>&2 echo "\$PHPIZE_DEPS env variable is necessary to run this script"
29+
exit 1
30+
fi
31+
32+
pecl install xdebug
33+
docker-php-ext-enable xdebug
34+
apk del $apkDel
35+
36+
cp /usr/local/etc/php/conf.d/available/xdebug.ini /usr/local/etc/php/conf.d/zzz_xdebug.ini
37+
;;
38+
39+
config)
40+
cp /usr/local/etc/php/conf.d/available/dev.ini /usr/local/etc/php/conf.d/zzz_dev.ini
41+
;;
42+
43+
*)
44+
usage
45+
exit 1
46+
;;
47+
esac

test/container/test_dev.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import pytest
2+
3+
@pytest.mark.php_dev
4+
def test_configuration_is_present(host):
5+
assert host.file('/usr/local/etc/php/conf.d/zzz_xdebug.ini').exists is True
6+
assert host.file('/usr/local/etc/php/conf.d/zzz_dev.ini').exists is True
7+
8+
@pytest.mark.php_dev
9+
def test_configuration_is_effective(host):
10+
configuration = host.run('php -i').stdout
11+
12+
assert u'expose_php => On => On' in configuration
13+
assert u'opcache.validate_timestamps => On => On' in configuration
14+
assert u'zend.assertions => 1 => 1' in configuration
15+
16+
@pytest.mark.php_dev
17+
def test_xdebug_is_loaded(host):
18+
assert 'Xdebug' in host.run('php -m').stdout
19+
20+
@pytest.mark.php_no_dev
21+
def test_configuration_is_not_present(host):
22+
assert host.file('/usr/local/etc/php/conf.d/zzz_xdebug.ini').exists is False
23+
assert host.file('/usr/local/etc/php/conf.d/zzz_dev.ini').exists is False
24+
25+
@pytest.mark.php_no_dev
26+
def test_configuration_is_not_effective(host):
27+
configuration = host.run('php -i').stdout
28+
29+
assert u'expose_php => Off => Off' in configuration
30+
assert u'opcache.validate_timestamps => Off => Off' in configuration
31+
assert u'zend.assertions => -1 => -1' in configuration
32+
33+
@pytest.mark.php_no_dev
34+
def test_xdebug_is_not_loaded(host):
35+
assert 'Xdebug' not in host.run('php -m').stdout

0 commit comments

Comments
 (0)