Skip to content

Commit 74cde7b

Browse files
author
DKravtsov
committed
Symfony 6.1, performance optimization for Mac.
1 parent 906ab32 commit 74cde7b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+2220
-2552
lines changed

Dockerfile

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
FROM php:8.1-apache
22

33
# set main params
4-
ARG BUILD_ARGUMENT_DEBUG_ENABLED=false
5-
ENV DEBUG_ENABLED=$BUILD_ARGUMENT_DEBUG_ENABLED
64
ARG BUILD_ARGUMENT_ENV=dev
75
ENV ENV=$BUILD_ARGUMENT_ENV
86
ENV APP_HOME /var/www/html
9-
ARG UID=1000
10-
ARG GID=1000
7+
ARG HOST_UID=1000
8+
ARG HOST_GID=1000
119
ENV USERNAME=www-data
10+
ARG INSIDE_DOCKER_CONTAINER=1
11+
ENV INSIDE_DOCKER_CONTAINER=$INSIDE_DOCKER_CONTAINER
1212

1313
# check environment
1414
RUN if [ "$BUILD_ARGUMENT_ENV" = "default" ]; then echo "Set BUILD_ARGUMENT_ENV in docker build-args like --build-arg BUILD_ARGUMENT_ENV=dev" && exit 2; \
@@ -58,8 +58,8 @@ RUN rm -r $APP_HOME
5858
# create document root, fix permissions for www-data user and change owner to www-data
5959
RUN mkdir -p $APP_HOME/public && \
6060
mkdir -p /home/$USERNAME && chown $USERNAME:$USERNAME /home/$USERNAME \
61-
&& usermod -u $UID $USERNAME -d /home/$USERNAME \
62-
&& groupmod -g $GID $USERNAME \
61+
&& usermod -o -u $HOST_UID $USERNAME -d /home/$USERNAME \
62+
&& groupmod -o -g $HOST_GID $USERNAME \
6363
&& chown -R ${USERNAME}:${USERNAME} $APP_HOME
6464

6565
# put apache and php config for Symfony, enable sites

Makefile

+160-64
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,113 @@
1-
dir=${CURDIR}
2-
31
ifndef APP_ENV
42
include .env
53
# Determine if .env.local file exist
6-
ifneq ("$(wildcard .env.local)","")
4+
ifneq ("$(wildcard .env.local)", "")
75
include .env.local
86
endif
97
endif
108

11-
symfony_user=-u www-data
12-
project=-p ${COMPOSE_PROJECT_NAME}
13-
service=${COMPOSE_PROJECT_NAME}:latest
14-
openssl_bin:=$(shell which openssl)
15-
interactive:=$(shell [ -t 0 ] && echo 1)
16-
ifneq ($(interactive),1)
17-
optionT=-T
9+
ifndef INSIDE_DOCKER_CONTAINER
10+
INSIDE_DOCKER_CONTAINER = 0
11+
endif
12+
13+
HOST_UID := $(shell id -u)
14+
HOST_GID := $(shell id -g)
15+
PHP_USER := -u www-data
16+
PROJECT_NAME := -p ${COMPOSE_PROJECT_NAME}
17+
OPENSSL_BIN := $(shell which openssl)
18+
INTERACTIVE := $(shell [ -t 0 ] && echo 1)
19+
ERROR_ONLY_FOR_HOST = @printf "\033[33mThis command for host machine\033[39m\n"
20+
ifneq ($(INTERACTIVE), 1)
21+
OPTION_T := -T
1822
endif
19-
ifeq ($(GITLAB_CI),1)
23+
ifeq ($(GITLAB_CI), 1)
2024
# Determine additional params for phpunit in order to generate coverage badge on GitLabCI side
21-
phpunitOptions=--coverage-text --colors=never
25+
PHPUNIT_OPTIONS := --coverage-text --colors=never
2226
endif
2327

2428
build:
25-
@docker-compose -f docker-compose.yml build
29+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
30+
@HOST_UID=$(HOST_UID) HOST_GID=$(HOST_GID) docker-compose -f docker-compose.yml build
31+
else
32+
$(ERROR_ONLY_FOR_HOST)
33+
endif
2634

2735
build-test:
28-
@docker-compose -f docker-compose-test-ci.yml build
36+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
37+
@HOST_UID=$(HOST_UID) HOST_GID=$(HOST_GID) docker-compose -f docker-compose-test-ci.yml build
38+
else
39+
$(ERROR_ONLY_FOR_HOST)
40+
endif
2941

3042
build-staging:
31-
@docker-compose -f docker-compose-staging.yml build
43+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
44+
@HOST_UID=$(HOST_UID) HOST_GID=$(HOST_GID) docker-compose -f docker-compose-staging.yml build
45+
else
46+
$(ERROR_ONLY_FOR_HOST)
47+
endif
3248

3349
build-prod:
34-
@docker-compose -f docker-compose-prod.yml build
50+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
51+
@HOST_UID=$(HOST_UID) HOST_GID=$(HOST_GID) docker-compose -f docker-compose-prod.yml build
52+
else
53+
$(ERROR_ONLY_FOR_HOST)
54+
endif
3555

3656
start:
37-
@docker-compose -f docker-compose.yml $(project) up -d
57+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
58+
@HOST_UID=$(HOST_UID) HOST_GID=$(HOST_GID) docker-compose -f docker-compose.yml $(PROJECT_NAME) up -d
59+
else
60+
$(ERROR_ONLY_FOR_HOST)
61+
endif
3862

3963
start-test:
40-
@docker-compose -f docker-compose-test-ci.yml $(project) up -d
64+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
65+
@HOST_UID=$(HOST_UID) HOST_GID=$(HOST_GID) docker-compose -f docker-compose-test-ci.yml $(PROJECT_NAME) up -d
66+
else
67+
$(ERROR_ONLY_FOR_HOST)
68+
endif
4169

4270
start-staging:
43-
@docker-compose -f docker-compose-staging.yml $(project) up -d
71+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
72+
@HOST_UID=$(HOST_UID) HOST_GID=$(HOST_GID) docker-compose -f docker-compose-staging.yml $(PROJECT_NAME) up -d
73+
else
74+
$(ERROR_ONLY_FOR_HOST)
75+
endif
4476

4577
start-prod:
46-
@docker-compose -f docker-compose-prod.yml $(project) up -d
78+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
79+
@HOST_UID=$(HOST_UID) HOST_GID=$(HOST_GID) docker-compose -f docker-compose-prod.yml $(PROJECT_NAME) up -d
80+
else
81+
$(ERROR_ONLY_FOR_HOST)
82+
endif
4783

4884
stop:
49-
@docker-compose -f docker-compose.yml $(project) down
85+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
86+
@HOST_UID=$(HOST_UID) HOST_GID=$(HOST_GID) docker-compose -f docker-compose.yml $(PROJECT_NAME) down
87+
else
88+
$(ERROR_ONLY_FOR_HOST)
89+
endif
5090

5191
stop-test:
52-
@docker-compose -f docker-compose-test-ci.yml $(project) down
92+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
93+
@HOST_UID=$(HOST_UID) HOST_GID=$(HOST_GID) docker-compose -f docker-compose-test-ci.yml $(PROJECT_NAME) down
94+
else
95+
$(ERROR_ONLY_FOR_HOST)
96+
endif
5397

5498
stop-staging:
55-
@docker-compose -f docker-compose-staging.yml $(project) down
99+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
100+
@HOST_UID=$(HOST_UID) HOST_GID=$(HOST_GID) docker-compose -f docker-compose-staging.yml $(PROJECT_NAME) down
101+
else
102+
$(ERROR_ONLY_FOR_HOST)
103+
endif
56104

57105
stop-prod:
58-
@docker-compose -f docker-compose-prod.yml $(project) down
106+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
107+
@HOST_UID=$(HOST_UID) HOST_GID=$(HOST_GID) docker-compose -f docker-compose-prod.yml $(PROJECT_NAME) down
108+
else
109+
$(ERROR_ONLY_FOR_HOST)
110+
endif
59111

60112
restart: stop start
61113
restart-test: stop-test start-test
@@ -69,31 +121,66 @@ env-staging:
69121
@make exec cmd="composer dump-env staging"
70122

71123
ssh:
72-
@docker-compose $(project) exec $(optionT) $(symfony_user) symfony bash
124+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
125+
@HOST_UID=$(HOST_UID) HOST_GID=$(HOST_GID) docker-compose $(PROJECT_NAME) exec $(OPTION_T) $(PHP_USER) symfony bash
126+
else
127+
$(ERROR_ONLY_FOR_HOST)
128+
endif
129+
130+
ssh-root:
131+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
132+
@HOST_UID=$(HOST_UID) HOST_GID=$(HOST_GID) docker-compose $(PROJECT_NAME) exec $(OPTION_T) symfony bash
133+
else
134+
$(ERROR_ONLY_FOR_HOST)
135+
endif
73136

74137
ssh-supervisord:
75-
@docker-compose $(project) exec supervisord bash
138+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
139+
@HOST_UID=$(HOST_UID) HOST_GID=$(HOST_GID) docker-compose $(PROJECT_NAME) exec supervisord bash
140+
else
141+
$(ERROR_ONLY_FOR_HOST)
142+
endif
76143

77144
ssh-mysql:
78-
@docker-compose $(project) exec mysql bash
145+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
146+
@HOST_UID=$(HOST_UID) HOST_GID=$(HOST_GID) docker-compose $(PROJECT_NAME) exec mysql bash
147+
else
148+
$(ERROR_ONLY_FOR_HOST)
149+
endif
79150

80151
ssh-rabbitmq:
81-
@docker-compose $(project) exec rabbitmq /bin/sh
152+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
153+
@HOST_UID=$(HOST_UID) HOST_GID=$(HOST_GID) docker-compose $(PROJECT_NAME) exec rabbitmq /bin/sh
154+
else
155+
$(ERROR_ONLY_FOR_HOST)
156+
endif
82157

83158
exec:
84-
@docker-compose $(project) exec $(optionT) $(symfony_user) symfony $$cmd
159+
ifeq ($(INSIDE_DOCKER_CONTAINER), 1)
160+
@$$cmd
161+
else
162+
@HOST_UID=$(HOST_UID) HOST_GID=$(HOST_GID) docker-compose $(PROJECT_NAME) exec $(OPTION_T) $(PHP_USER) symfony $$cmd
163+
endif
85164

86165
exec-bash:
87-
@docker-compose $(project) exec $(optionT) $(symfony_user) symfony bash -c "$(cmd)"
166+
ifeq ($(INSIDE_DOCKER_CONTAINER), 1)
167+
@bash -c "$(cmd)"
168+
else
169+
@HOST_UID=$(HOST_UID) HOST_GID=$(HOST_GID) docker-compose $(PROJECT_NAME) exec $(OPTION_T) $(PHP_USER) symfony bash -c "$(cmd)"
170+
endif
88171

89172
exec-by-root:
90-
@docker-compose $(project) exec $(optionT) symfony $$cmd
173+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
174+
@HOST_UID=$(HOST_UID) HOST_GID=$(HOST_GID) docker-compose $(PROJECT_NAME) exec $(OPTION_T) symfony $$cmd
175+
else
176+
$(ERROR_ONLY_FOR_HOST)
177+
endif
91178

92179
report-prepare:
93-
mkdir -p $(dir)/reports/coverage
180+
@make exec cmd="mkdir -p reports/coverage"
94181

95182
report-clean:
96-
rm -rf $(dir)/reports/*
183+
@make exec-by-root cmd="rm -rf reports/*"
97184

98185
wait-for-db:
99186
@make exec cmd="php bin/console db:wait"
@@ -112,16 +199,32 @@ info:
112199
@make exec cmd="bin/console about"
113200

114201
logs:
202+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
115203
@docker logs -f ${COMPOSE_PROJECT_NAME}_symfony
204+
else
205+
$(ERROR_ONLY_FOR_HOST)
206+
endif
116207

117208
logs-supervisord:
209+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
118210
@docker logs -f ${COMPOSE_PROJECT_NAME}_supervisord
211+
else
212+
$(ERROR_ONLY_FOR_HOST)
213+
endif
119214

120215
logs-mysql:
216+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
121217
@docker logs -f ${COMPOSE_PROJECT_NAME}_mysql
218+
else
219+
$(ERROR_ONLY_FOR_HOST)
220+
endif
122221

123222
logs-rabbitmq:
223+
ifeq ($(INSIDE_DOCKER_CONTAINER), 0)
124224
@docker logs -f ${COMPOSE_PROJECT_NAME}_rabbitmq
225+
else
226+
$(ERROR_ONLY_FOR_HOST)
227+
endif
125228

126229
drop-migrate:
127230
@make exec cmd="php bin/console doctrine:schema:drop --full-database --force"
@@ -142,31 +245,22 @@ messenger-setup-transports:
142245
@make exec cmd="php bin/console messenger:setup-transports"
143246

144247
phpunit:
145-
@make exec-bash cmd="rm -rf ./var/cache/test* && bin/console cache:warmup --env=test && ./vendor/bin/phpunit -c phpunit.xml.dist --coverage-html reports/coverage $(phpunitOptions) --coverage-clover reports/clover.xml --log-junit reports/junit.xml"
248+
@make exec-bash cmd="rm -rf ./var/cache/test* && bin/console cache:warmup --env=test && ./vendor/bin/phpunit -c phpunit.xml.dist --coverage-html reports/coverage $(PHPUNIT_OPTIONS) --coverage-clover reports/clover.xml --log-junit reports/junit.xml"
146249

147-
###> php-coveralls ###
148250
report-code-coverage: ## update code coverage on coveralls.io. Note: COVERALLS_REPO_TOKEN should be set on CI side.
149251
@make exec-bash cmd="export COVERALLS_REPO_TOKEN=${COVERALLS_REPO_TOKEN} && php ./vendor/bin/php-coveralls -v --coverage_clover reports/clover.xml --json_path reports/coverals.json"
150-
###< php-coveralls ###
151252

152-
###> phpcs ###
153-
phpcs: ## Run PHP CodeSniffer
253+
phpcs: ## Runs PHP CodeSniffer
154254
@make exec-bash cmd="./vendor/bin/phpcs --version && ./vendor/bin/phpcs --standard=PSR12 --colors -p src tests"
155-
###< phpcs ###
156255

157-
###> ecs ###
158-
ecs: ## Run Easy Coding Standard
256+
ecs: ## Runs Easy Coding Standard
159257
@make exec-bash cmd="./vendor/bin/ecs --version && ./vendor/bin/ecs --clear-cache check src tests"
160258

161259
ecs-fix: ## Run The Easy Coding Standard to fix issues
162260
@make exec-bash cmd="./vendor/bin/ecs --version && ./vendor/bin/ecs --clear-cache --fix check src tests"
163-
###< ecs ###
164261

165-
###> phpmetrics ###
166-
phpmetrics:
167-
@make exec-by-root cmd="make phpmetrics-process"
168-
169-
phpmetrics-process: ## Generates PhpMetrics static analysis, should be run inside symfony container
262+
phpmetrics: ## Runs phpmetrics
263+
ifeq ($(INSIDE_DOCKER_CONTAINER), 1)
170264
@mkdir -p reports/phpmetrics
171265
@if [ ! -f reports/junit.xml ] ; then \
172266
printf "\033[32;49mjunit.xml not found, running tests...\033[39m\n" ; \
@@ -175,28 +269,30 @@ phpmetrics-process: ## Generates PhpMetrics static analysis, should be run insid
175269
@echo "\033[32mRunning PhpMetrics\033[39m"
176270
@php ./vendor/bin/phpmetrics --version
177271
@php ./vendor/bin/phpmetrics --junit=reports/junit.xml --report-html=reports/phpmetrics .
178-
###< phpmetrics ###
272+
else
273+
@make exec-by-root cmd="make phpmetrics"
274+
endif
179275

180-
###> php copy/paste detector ###
181-
phpcpd:
276+
phpcpd: ## Runs php copy/paste detector
182277
@make exec cmd="php phpcpd.phar --fuzzy src tests"
183-
###< php copy/paste detector ###
184278

185-
###> php mess detector ###
186-
phpmd:
279+
phpmd: ## Runs php mess detector
187280
@make exec cmd="php ./vendor/bin/phpmd src text phpmd_ruleset.xml --suffixes php"
188-
###< php mess detector ###
189281

190-
###> PHPStan static analysis tool ###
191-
phpstan:
282+
phpstan: ## Runs PHPStan static analysis tool
283+
ifeq ($(INSIDE_DOCKER_CONTAINER), 1)
192284
@echo "\033[32mRunning PHPStan - PHP Static Analysis Tool\033[39m"
193-
@make exec cmd="bin/console cache:clear --env=test"
194-
@make exec cmd="./vendor/bin/phpstan --version"
195-
@make exec cmd="./vendor/bin/phpstan analyze src tests"
196-
###< PHPStan static analysis tool ###
285+
@bin/console cache:clear --env=test
286+
@./vendor/bin/phpstan --version
287+
@./vendor/bin/phpstan analyze src tests
288+
else
289+
@make exec cmd="make phpstan"
290+
endif
197291

198-
###> Phpinsights PHP quality checks ###
199-
phpinsights:
292+
phpinsights: ## Runs Php Insights PHP quality checks
293+
ifeq ($(INSIDE_DOCKER_CONTAINER), 1)
200294
@echo "\033[32mRunning PHP Insights\033[39m"
201-
@make exec cmd="php -d error_reporting=0 ./vendor/bin/phpinsights analyse --no-interaction --min-quality=100 --min-complexity=85 --min-architecture=100 --min-style=100"
202-
###< Phpinsights PHP quality checks ###
295+
@php -d error_reporting=0 ./vendor/bin/phpinsights analyse --no-interaction --min-quality=100 --min-complexity=84 --min-architecture=100 --min-style=100
296+
else
297+
@make exec cmd="make phpinsights"
298+
endif

0 commit comments

Comments
 (0)