Skip to content

Latest commit

 

History

History
183 lines (156 loc) · 4.17 KB

README.md

File metadata and controls

183 lines (156 loc) · 4.17 KB

Build Tests Docker Image Size (latest by date) Docker Pulls

Nginx PHP-FPM Docker image

🐳 Full Docker image for Nginx PHP-FPM container created to run Laravel or any php based applications.

PHP Versions:

  • 8.3
  • 8.2
  • 8.1
  • 8.0
  • 7.4
  • 7.2

Specifications:

  • Composer
  • OpenSSL PHP Extension
  • XML PHP Extension
  • PDO PHP Extension
  • Rdkafka PHP Extension
  • Redis PHP Extension
  • Mbstring PHP Extension
  • PCNTL PHP Extension
  • ZIP PHP Extension
  • GD PHP Extension
  • BCMath PHP Extension
  • Memcached
  • Laravel Cron Job
  • Laravel Schedule
  • Supervisord
  • Nodejs
  • NPM

Simple docker-compose usage:

services:
    app:
        image: jkaninda/nginx-php-fpm:8.3
        container_name: app
        restart: unless-stopped 
        user: www-data # Optional - for production usage    
        volumes:
        #Project root
            - ./src:/var/www/html
        ports:
           - "80:80"
        networks:
            - default #if you're using networks between containers

Docker:

Run

 docker compose up -d

Create Laravel project

docker compose exec app composer create-project --prefer-dist laravel/laravel .

Artisan generate key

docker compose exec app php artisan key:generate

Storage link

docker compose exec app php artisan storage:link

Fix permissions

docker compose exec app chmod -R 777 storage bootstrap/cache

Laravel migration

 docker compose exec app php artisan migrate

docker exec -it app bash

Advanced Nignx-php-fpm:

docker-compose.yml

version: '3'
services:
    app:
        image: jkaninda/nginx-php-fpm
        container_name: app
        restart: unless-stopped 
        ports:
           - "80:80"    
        volumes:
        #Project root
            - ./:/var/www/html
            - ~/.ssh:/root/.ssh # If you use private CVS
             #./php.ini:/usr/local/etc/php/conf.d/php.ini # Optional, your custom php init file
        environment:
           - APP_ENV=development # Optional, or production
           - LARAVEL_PROCS_NUMBER=2 # Optional, Laravel queue:work process number
           #- CLIENT_MAX_BODY_SIZE=20M # Optional
           #- DOMAIN=example.com # Optional
           - DOCUMENT_ROOT=/var/www/html #Optional
 

Default web root:

/var/www/html

Docker run

 docker compose up -d

Build from base

Dockerfile

FROM jkaninda/nginx-php-fpm:8.3
# Copy laravel project files
COPY . /var/www/html
# Storage Volume
VOLUME /var/www/html/storage

WORKDIR /var/www/html

# Custom cache invalidation / optional
#ARG CACHEBUST=1
# composer install / Optional
#RUN composer install
# Fix permissions
RUN chown -R www-data:www-data /var/www/html

USER www-data

Nginx custom config:

Enable custom nginx config files

/var/www/html/conf/nginx/nginx.conf

/var/www/html/conf/nginx/nginx-site.conf

Supervisord

Add more supervisor process in

/etc/supervisor/conf.d/

In case you want to execute and maintain a task or process with supervisor.

Find below an example with Apache Kafka, when you want to maintain a consumer process.

Example:

[program:kafkaconsume-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/artisan kafka:consumer
autostart=true
autorestart=true
numprocs=1
user=www-data
redirect_stderr=true
stdout_logfile=/var/www/html/storage/logs/kafka.log

Storage permision issue

 docker compose exec php-fpm /bin/bash 
chown -R www-data:www-data /var/www/html/

chmod -R 775 /var/www/html/storage

P.S. please give a star if you like it 😉