Giter VIP home page Giter VIP logo

jkaninda / laravel-php-fpm Goto Github PK

View Code? Open in Web Editor NEW
63.0 5.0 25.0 200 KB

๐Ÿณ Docker PHP-FPM image created to run Laravel or any php based application, with extensions for Redis, Memcached, MySQL, Postgres, Events, Redis, Kafka, Laravel Schedule, Cron job and custom default configuration.

Dockerfile 89.32% Shell 10.58% PHP 0.10%
docker php-fpm laravel-kafka docker-container laravel-docker laravel-redis php-kafka php-rdkafka php-redis laravel

laravel-php-fpm's Introduction

Build Integration Test Docker Image Size (latest by date) Docker Pulls

Logo

Laravel PHP-FPM Docker image

๐Ÿณ Full Docker image for a PHP-FPM container created to run Laravel or any php based applications.

PHP Microservices ready Docker container image.

PHP Version:

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

Specifications:

  • Composer
  • OpenSSL PHP Extension
  • XML PHP Extension
  • PDO PHP Extension
  • PDO Mysql
  • PDO Pgsql
  • Rdkafka PHP Extension
  • Redis PHP Extension
  • Mbstring PHP Extension
  • PCNTL PHP Extension
  • ZIP PHP Extension
  • GD PHP Extension
  • BCMath PHP Extension
  • Memcached
  • Opcache
  • Laravel Cron Job
  • Laravel Schedule
  • Laravel Envoy
  • Supervisord
  • Node
  • NPM

Simple docker-compose usage:

version: '3'
services:
    php-fpm:
        image: jkaninda/laravel-php-fpm:latest
        container_name: php-fpm
        restart: unless-stopped
        user: www-data #Use www-data user for production usage     
        volumes:
        #Project root
            - ./:/var/www/html
        networks:
            - default #if you're using networks between containers

Laravel artisan command usage:

Open php-fpm

docker compose exec php-fpm /bin/bash

Configurations

  • Supervisor config folder: /etc/supervisor/conf.d/
  • PHP ini config foler /usr/local/etc/php/conf.d/

Example Laravel-php-fpm with nginx:

docker-compose.yml

version: '3'
services:
    php-fpm:
        image: jkaninda/laravel-php-fpm
        container_name: php-fpm
        restart: unless-stopped     
        volumes:
        #Project root
            - ./:/var/www/html
        networks:
            - default #if you're using networks between containers
    #Nginx server
    nginx-server:
     image: jkaninda/nginx-fpm:alpine
     container_name: nginx-server
     restart: unless-stopped
     ports:
      - 80:80
     volumes:
      - ./:/var/www/html
     environment:
       - DOCUMENT_ROOT=/var/www/html/public
       - CLIENT_MAX_BODY_SIZE=20M
       - PHP_FPM_HOST=php-fpm:9000 
     networks:
      - default

Simple Nginx config file content

default.conf


server {
    listen 80;
    index index.php index.html;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    ##Public directory
    root /var/www/html/public;
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        ## PHP FPM ( php-fpm:9000 ) or [servicename:9000]
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        
    }
    client_max_body_size 15M;
    server_tokens off;

     # Hide PHP headers 
    fastcgi_hide_header X-Powered-By; 
    fastcgi_hide_header X-CF-Powered-By;
    fastcgi_hide_header X-Runtime;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
        gzip_static on;
    }
}

Advanced Laravel-php-fpm with nginx:

docker-compose.yml

version: '3'
services:
    php-fpm:
        image: jkaninda/laravel-php-fpm
        container_name: php-fpm
        restart: unless-stopped     
        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=1 # Optional, Laravel queue:work process number
    #Nginx server
    nginx-server:
    image: nginx:alpine
    container_name: nginx-server
    restart: unless-stopped
    ports:
      - 80:80
    volumes:
      - ./:/var/www/html
      - ./default.conf:/etc/nginx/conf.d/default.conf
    networks:
      - default
volumes:
 storage-data: 

Docker run

 docker-compose up -d

Build from base

Dockerfile

FROM jkaninda/laravel-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
# Run composer install / Optional
#RUN composer install
# Fix permissions
RUN chown -R www-data:www-data /var/www/html

Supervisord

Add 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

Custom php.ini

/var/www/html/conf/php/php.ini

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 ๐Ÿ˜‰

laravel-php-fpm's People

Contributors

jkaninda avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

laravel-php-fpm's Issues

Supervisord worker seems not working queeus

The section [supervisorctl] missing from supervisor.conf main file.

[unix_http_server]
file=/var/run/supervisor.sock
chmod=0700

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock

Previous sections able to start, stop supervisorctl but restarting container no persisting config

More info about file config?

Can you give more information on how to use this?

image

Great job, by the way.
I want to be able to adapt my docker configuration to your images.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.