Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

FireBlade's avatar

Too slow Laravel 9 + Nginx + Docker app in production

Dockerfile


FROM php:8.1-fpm

# Arguments defined in docker-compose.yml
ARG user
ARG uid
ARG NODE_VERSION=16
# Install system dependencies
RUN apt-get update && apt-get install -y \
    git \
    curl \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    libzip-dev \
    zip \
    unzip

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip

# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

RUN apt-get update && apt-get install -y \
    libmagickwand-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* \
    && pecl install imagick \
	&& docker-php-ext-enable imagick \
    && curl -sL https://deb.nodesource.com/setup_$NODE_VERSION.x | bash - \
    && apt-get install -y nodejs \
    && npm install -g npm

RUN apt-get update && apt-get install -y ghostscript

RUN sed -i 's/policy domain="coder" rights="none" pattern="PDF"/policy domain="coder" rights="read|write" pattern="PDF"/' /etc/ImageMagick-6/policy.xml
COPY ./php/uploads.ini /usr/local/etc/php/conf.d/uploads.ini
RUN sed -i 's/9000/9005/' /usr/local/etc/php-fpm.d/zz-docker.conf
 
# Create system user to run Composer and Artisan Commands
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
    chown -R $user:$user /home/$user

# Set working directory
WORKDIR /var/www/html

USER $user

docker-compose.yml


version: "3.7"
services:
  baseline-app:
    build:
      args:
        user: sammy
        uid: 1000
      context: ./
      dockerfile: Dockerfile
    image: baseline-1
    container_name: baseline-app
    restart: unless-stopped
    working_dir: /var/www/html/
    volumes:
      - web-root:/var/www/html
    ports:
      - "9005:9000"
    networks:
      - baseline

  baseline-db:
    image: mysql/mysql-server:8.0
    container_name: baseline-db
    restart: unless-stopped
    tty: true
    ports:
      - "3310:3306"
    environment:
      MYSQL_DATABASE: ${DB_DATABASE}
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_USER: ${DB_USERNAME}
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    volumes:
      - ./mysql:/etc/mysql/conf.d/
      - ./mysqlinit:/docker-entrypoint-initdb.d
      - mysqldata:/var/lib/mysql
    networks:
      - baseline

  baseline-nginx:
    image: nginx:1.21-alpine
    container_name: baseline-nginx
    tty: true
    restart: unless-stopped
    ports:
      - "8009:80"
    volumes:
      - web-root:/var/www/html
      - ./nginx:/etc/nginx/conf.d/
    depends_on:
      - baseline-app
    networks:
      - baseline
networks:
  baseline:
    driver: bridge

# Volumes
volumes:

  mysqldata:
  web-root:
    driver: local
    driver_opts:
      type: none
      device: /home/sammy/app/src/
      o: bind

i have already ran the following commands:


composer install --optimize-autoloader --no-dev

php artisan config:cache

php artisan route:cache

php artisan view:cache

What do I need to speed up the app ?

0 likes
1 reply
FireBlade's avatar
FireBlade
OP
Best Answer
Level 2

Installing PHP Opcache made a big difference...

Please or to participate in this conversation.