@@ -27,6 +27,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
27
27
&& docker-php-ext-enable redis \
28
28
&& apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
29
29
30
+
30
31
# Set the working directory inside the container
31
32
WORKDIR /var/www
32
33
@@ -51,8 +52,9 @@ COPY . /var/www
51
52
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
52
53
&& composer install --no-dev --optimize-autoloader --no-interaction --no-progress --prefer-dist
53
54
55
+
54
56
# Stage 2: Production environment
55
- FROM php:8.3-fpm
57
+ FROM php:8.3-fpm AS production
56
58
57
59
# Install only runtime libraries needed in production
58
60
# libfcgi-bin and procps are required for the php-fpm-healthcheck script
@@ -113,3 +115,65 @@ ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
113
115
# Expose port 9000 and start php-fpm server
114
116
EXPOSE 9000
115
117
CMD ["php-fpm" ]
118
+
119
+
120
+ # Stage 3: Development image
121
+ FROM production AS development
122
+
123
+ # Use ARG to define environment variables passed from the Docker build command or Docker Compose.
124
+ ARG XDEBUG_ENABLED=true
125
+ ARG XDEBUG_MODE=develop,coverage,debug,profile
126
+ ARG XDEBUG_HOST=host.docker.internal
127
+ ARG XDEBUG_IDE_KEY=DOCKER
128
+ ARG XDEBUG_LOG=/dev/stdout
129
+ ARG XDEBUG_LOG_LEVEL=0
130
+
131
+ USER root
132
+
133
+ # Configure Xdebug if enabled
134
+ RUN if [ "${XDEBUG_ENABLED}" = "true" ]; then \
135
+ pecl install xdebug && \
136
+ docker-php-ext-enable xdebug && \
137
+ echo "xdebug.mode=${XDEBUG_MODE}" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \
138
+ echo "xdebug.idekey=${XDEBUG_IDE_KEY}" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \
139
+ echo "xdebug.log=${XDEBUG_LOG}" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \
140
+ echo "xdebug.log_level=${XDEBUG_LOG_LEVEL}" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \
141
+ echo "xdebug.client_host=${XDEBUG_HOST}" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini ; \
142
+ echo "xdebug.start_with_request=yes" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini ; \
143
+ fi
144
+
145
+ # Add ARGs for syncing permissions
146
+ ARG UID=1000
147
+ ARG GID=1000
148
+
149
+ # Create a new user with the specified UID and GID, reusing an existing group if GID exists
150
+ RUN if getent group ${GID}; then \
151
+ group_name=$(getent group ${GID} | cut -d: -f1); \
152
+ useradd -m -u ${UID} -g ${GID} -s /bin/bash www; \
153
+ else \
154
+ groupadd -g ${GID} www && \
155
+ useradd -m -u ${UID} -g www -s /bin/bash www; \
156
+ group_name=www; \
157
+ fi
158
+
159
+ # Dynamically update php-fpm to use the new user and group
160
+ RUN sed -i "s/user = www-data/user = www/g" /usr/local/etc/php-fpm.d/www.conf && \
161
+ sed -i "s/group = www-data/group = $group_name/g" /usr/local/etc/php-fpm.d/www.conf
162
+
163
+
164
+ # Set the working directory
165
+ WORKDIR /var/www
166
+
167
+ # Copy the entrypoint script
168
+ COPY ./docker/development/php-fpm/entrypoint.sh /usr/local/bin/entrypoint.sh
169
+ RUN chmod +x /usr/local/bin/entrypoint.sh
170
+
171
+ # Switch back to the non-privileged user to run the application
172
+ USER www-data
173
+
174
+ # Change the default command to run the entrypoint script
175
+ ENTRYPOINT ["/usr/local/bin/entrypoint.sh" ]
176
+
177
+ # Expose port 9000 and start php-fpm server
178
+ EXPOSE 9000
179
+ CMD ["php-fpm" ]
0 commit comments