Skip to content

Commit 83a10e8

Browse files
committed
fix Dockerfile, docker-compose.yml and other docker files to improve docker build and configure xdebug
1 parent 3625ad8 commit 83a10e8

File tree

7 files changed

+110
-60
lines changed

7 files changed

+110
-60
lines changed

.dockerignore

Lines changed: 0 additions & 1 deletion
This file was deleted.

.env

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0
4040
MAILER_DSN=null://null
4141
###< symfony/mailer ###
4242

43-
# Настройки Xdebug
44-
XDEBUG_CLIENT_HOST=host.docker.internal
45-
XDEBUG_IDEKEY=PHPSTORM
43+
###> redis ###
44+
REDIS_HOST=127.0.0.1
45+
REDIS_PORT=6379
46+
REDIS_DB=0
47+
###< redis ###

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
## IndigoLab test project
55

66
### Requirements
7-
- PHP >= 8.4
7+
- PHP >= 8.3
88
- Composer >= 2
99
- Make >= 4
1010
- Docker

docker-compose.yml

Lines changed: 50 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,88 @@
11
version: '3.8'
22

33
services:
4-
ilyaguev_igor-indigolab-php:
4+
app:
55
build:
66
context: .
7-
dockerfile: ./docker/php/Dockerfile
8-
container_name: ilyaguev_igor-indigolab-php
7+
dockerfile: docker/php/Dockerfile
8+
args:
9+
UID: ${UID}
10+
GID: ${GID}
11+
APP_ENV: ${APP_ENV}
12+
container_name: "${PROJECT_NAME}-app"
913
restart: unless-stopped
10-
volumes:
11-
- .:/var/www/html
14+
user: "${UID:-1000}:${GID:-1000}"
15+
working_dir: /var/www/html
1216
environment:
13-
- DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@ilyaguev_igor-indigolab-postgres:5432/${POSTGRES_DB}
14-
- REDIS_URL=redis://ilyaguev_igor-indigolab-redis:6379
15-
# - XDEBUG_CLIENT_HOST=${XDEBUG_CLIENT_HOST}
16-
# - XDEBUG_IDEKEY=${XDEBUG_IDEKEY}
17+
APP_ENV: ${APP_ENV}
18+
APP_DEBUG: ${APP_DEBUG}
19+
DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${PROJECT_NAME}-postgres:${POSTGRES_PORT}/${POSTGRES_DB}
20+
REDIS_URL: redis://${PROJECT_NAME}-redis:${REDIS_PORT}
21+
XDEBUG_MODE: ${XDEBUG_MODE:-off}
22+
XDEBUG_TRIGGER: ${XDEBUG_TRIGGER:-TRIGGER}
23+
XDEBUG_CONFIG: "client_host=${XDEBUG_HOST:-host.docker.internal} discover_client_host=1 log=/var/log/xdebug/xdebug.log"
24+
PHP_IDE_CONFIG: "serverName=Docker"
25+
TZ: ${TZ}
26+
volumes:
27+
- ./:/var/www/html
1728
depends_on:
18-
- ilyaguev_igor-indigolab-postgres
19-
- ilyaguev_igor-indigolab-redis
29+
- db
30+
- redis
2031
networks:
21-
- indigolab-network
32+
- app-network
2233

23-
ilyaguev_igor-indigolab-nginx:
24-
image: nginx:latest
25-
container_name: ilyaguev_igor-indigolab-nginx
34+
nginx:
35+
image: nginx:1.25-alpine
36+
container_name: "${PROJECT_NAME}-nginx"
2637
restart: unless-stopped
2738
ports:
2839
- "${HTTP_PORT}:80"
40+
- "${HTTPS_PORT}:443"
2941
volumes:
3042
- ./docker/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
3143
- ./public:/var/www/html/public
3244
depends_on:
33-
- ilyaguev_igor-indigolab-php
45+
- app
3446
networks:
35-
- indigolab-network
47+
- app-network
3648

37-
ilyaguev_igor-indigolab-postgres:
38-
image: postgres:latest
39-
container_name: ilyaguev_igor-indigolab-postgres
49+
db:
50+
image: postgres:16
51+
container_name: "${PROJECT_NAME}-postgres"
4052
restart: unless-stopped
4153
environment:
4254
POSTGRES_DB: ${POSTGRES_DB}
4355
POSTGRES_USER: ${POSTGRES_USER}
4456
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
4557
POSTGRES_ROOT_PASSWORD: ${POSTGRES_ROOT_PASSWORD}
46-
TZ: "Europe/Moscow"
58+
TZ: ${TZ}
4759
ports:
4860
- "${POSTGRES_PORT}:5432"
4961
volumes:
50-
- ./docker/pgdata:/var/lib/postgresql/data
62+
- pgdata:/var/lib/postgresql/data
63+
healthcheck:
64+
test: [ "CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}" ]
65+
interval: 5s
66+
timeout: 5s
67+
retries: 5
5168
networks:
52-
- indigolab-network
69+
- app-network
5370

54-
ilyaguev_igor-indigolab-redis:
55-
image: redis:latest
56-
container_name: ilyaguev_igor-indigolab-redis
71+
redis:
72+
image: redis:7-alpine
73+
container_name: "${PROJECT_NAME}-redis"
5774
restart: unless-stopped
75+
environment:
76+
REDIS_PASSWORD: ${REDIS_PASSWORD}
77+
TZ: ${TZ}
5878
ports:
59-
- "6379:6379"
79+
- "${REDIS_PORT}:6379"
6080
networks:
61-
- indigolab-network
81+
- app-network
6282

6383
volumes:
64-
postgres_data:
84+
pgdata:
6585

6686
networks:
67-
indigolab-network:
87+
app-network:
6888
driver: bridge

docker/php/Dockerfile

Lines changed: 47 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,69 @@
11
FROM php:8.3-fpm
22

3+
# Устанавливаем пользователя/группу из аргументов
4+
ARG UID=${UID}
5+
ARG GID=${GID}
6+
ARG APP_ENV=${APP_ENV}
7+
38
# Устанавливаем необходимые зависимости
49
RUN apt-get update && apt-get install -y \
5-
git \
6-
libmcrypt-dev \
10+
bash-completion \
711
libzip-dev \
812
libpq-dev \
13+
libicu-dev \
14+
unzip \
15+
curl \
916
zip \
10-
&& rm -rf /var/lib/apt/lists/*
17+
git
18+
19+
# Расширения PHP
20+
RUN docker-php-ext-install zip pdo pdo_mysql pdo_pgsql
21+
22+
# Алиасы и автодополнение
23+
RUN echo "alias ll='ls -alF'" >> /etc/bash.bashrc
24+
RUN echo 'source /etc/bash_completion' >> /etc/bash.bashrc
1125

12-
# Устанавливаем расширения PHP
13-
RUN docker-php-ext-install zip pdo pdo_pgsql
26+
# Пользователь и права
27+
RUN groupmod -g ${GID} www-data && \
28+
usermod -u ${UID} www-data && \
29+
chown -R ${UID}:${GID} /var/www/html
1430

15-
# Настройка PHP
16-
COPY docker/php/php.ini /usr/local/etc/php/conf.d/
31+
# Логи Xdebug (только для dev)
32+
RUN if [ "$APP_ENV" = "dev" ]; then \
33+
mkdir -p /var/log/xdebug && \
34+
chown -R ${UID}:${GID} /var/log/xdebug && \
35+
chmod -R 766 /var/log/xdebug; \
36+
fi
37+
38+
# Конфиги PHP
39+
COPY docker/php/conf.d/php.ini /usr/local/etc/php/conf.d/
40+
COPY docker/php/conf.d/xdebug.ini /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
1741

1842
# Устанавливаем Composer
1943
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
2044
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer \
2145
&& php -r "unlink('composer-setup.php');"
2246

23-
# Устанавливаем Xdebug
24-
RUN pecl install xdebug && docker-php-ext-enable xdebug
25-
26-
# Копируем конфигурацию Xdebug
27-
#COPY xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini
47+
# Xdebug (только для dev)
48+
RUN if [ "$APP_ENV" = "dev" ]; then \
49+
pecl install xdebug && \
50+
docker-php-ext-enable xdebug && \
51+
pecl clear-cache \
52+
rm -rf /tmp/pear; \
53+
fi
2854

2955
# Устанавливаем рабочую директорию
3056
WORKDIR /var/www/html
3157

32-
# Копируем весь исходный код
33-
COPY . /var/www/html
58+
# Копируем все файлы
59+
COPY . .
3460

35-
# Устанавливаем зависимости Composer
36-
RUN composer install
61+
# Устанавливаем зависимости
62+
RUN if [ "$APP_ENV" = "prod" ]; then \
63+
composer install --no-dev --optimize-autoloader --no-interaction --prefer-dist; \
64+
else \
65+
composer install --no-interaction --prefer-dist; \
66+
fi
3767

3868
# Указываем пользователя для выполнения команд
39-
USER www-data
40-
41-
# Права для веб-сервера
42-
#RUN chown -R www-data:www-data /var/www/html/var
69+
USER ${UID}:${GID}

docker/php/conf.d/php.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
date.timezone = ${TZ}
1+
date.timezone = Europe/Moscow
22
short_open_tag = Off
33
log_errors = On
44
error_reporting = E_ALL

docker/php/conf.d/xdebug.ini

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
zend_extension=xdebug.so
2-
xdebug.mode=develop,debug
3-
xdebug.client_host=${XDEBUG_CLIENT_HOST}
4-
xdebug.idekey=${XDEBUG_IDEKEY}
1+
zend_extension=xdebug
2+
3+
[xdebug]
4+
xdebug.start_with_request = trigger
5+
xdebug.discover_client_host = 0
6+
xdebug.idekey=PHPSTORM

0 commit comments

Comments
 (0)