Hi All
I was wondering if someone could please help. Ive been struggling a while to run nginx and php in a container with npm.
Php and nginx are run by supervisor and this all works fine. The issue comes in when i change the folder owners of my project and then run npm ci
and npm run prod
for laravel.
I get the following issue:
#PHP
FROM php:8.1.4-fpm-alpine AS digital_dealer_php
ARG APP_ENV
ENV APP_HOME /var/www/html
ARG UID=1000
ARG GID=1000
ENV USERNAME=root
ENV TZ=UTC
WORKDIR $APP_HOME
RUN apk add --update bash zip unzip curl sqlite nginx supervisor php8 \
php8-common \
php8-fpm \
php8-pdo \
php8-opcache \
php8-zip \
php8-phar \
php8-iconv \
php8-cli \
php8-curl \
php8-openssl \
php8-mbstring \
php8-tokenizer \
php8-fileinfo \
php8-json \
php8-xml \
php8-xmlwriter \
php8-simplexml \
php8-dom \
php8-pdo_mysql \
php8-pdo_sqlite \
php8-tokenizer \
php8-pecl-redis \
php8-xdebug \
npm
RUN npm install -g npm
RUN echo http://dl-2.alpinelinux.org/alpine/edge/community/ >> /etc/apk/repositories
RUN apk --no-cache add shadow && usermod -u 1000 www-data
RUN docker-php-ext-install mysqli pdo pdo_mysql
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
# Add user for laravel application
#RUN addgroup -g ${GID} ${USERNAME}
#RUN adduser -D -s /bin/bash -G ${USERNAME} -u 1337 ${USERNAME}
#RUN usermod -a -G ${USERNAME} nginx
# Copy existing application directory contents
#COPY . $APP_HOME
COPY --chown=${USERNAME}:${USERNAME} . $APP_HOME
#Copy supervisor to manage nginx and php processes
COPY ./docker/php-fpm/supervisord.conf /etc/
#Nginx config
COPY ./docker/nginx/default.conf /etc/nginx/http.d/default.conf
#PHP ini config
COPY ./docker/php-fpm/php.ini /usr/local/etc/php/php.ini
# Docker entrypoint script
COPY ./docker/php-fpm/docker-entrypoint.sh /usr/local/bin/start-container
RUN chmod +x /usr/local/bin/start-container
#USER sail
EXPOSE 80
ENTRYPOINT ["start-container"]
#Prod
FROM digital_dealer_php AS digital_dealer_php_prod
RUN composer install --ignore-platform-reqs --optimize-autoloader --no-dev
RUN echo "building Prod with composer and npm"
#COPY --chown=${USERNAME}:${USERNAME} .env.production $APP_HOME/.env
COPY .env.production $APP_HOME/.env
#RUN chown -R root /var/www/html
RUN php artisan optimize:clear
RUN php artisan storage:link
RUN npm ci
RUN npm run prod
If i change my project back to root using RUN chown -R root /var/www/html
then npm works again and has access to installing and placing files where it needs to.
I would like to run the container non root however for security.
Thanks