devkit icon indicating copy to clipboard operation
devkit copied to clipboard

Add docker nginx & php-fpm

Open kenjis opened this issue 3 years ago • 3 comments

  • add Nginx 1.23
  • add PHP-FPM 8.1

kenjis avatar Jul 23 '22 07:07 kenjis

You need to copy files to use Nginx and PHP.

Copy docker/ folder and docker-compose.yaml to your CodeIgniter4 project root. https://github.com/codeigniter4/devkit/pull/37/files#diff-079c8a90be414928ae24510a296a33243d0c17372a82a91876d033137b089544R14

kenjis avatar Jul 23 '22 09:07 kenjis

Got it! I rarely use Docker but let me know when this is ready for review and I will take it for a spin. I should be a good Guinea pig for the instructions given my noobiness

MGatner avatar Jul 23 '22 10:07 MGatner

@kenjis I'm using docker in my development and here is the my setup.

I have folder docker with development and production folders, so I suggest to move development Dockerfile to docker/development and have an opportunity to add production folder if it's needed in future for users.

I started also to build Dockerfile with nginx & php-fpm separated, but there is no customisable options, if we want to customise something during the development it's a pain.

So I started my journey to find suitable image with php-fpm & nginx in one image with customisable options and in the end I found it. Here is the link to image: https://github.com/tiredofit/docker-nginx-php-fpm

It works perfectly for development and even for production.

My Dockerfile for development looks now like:

FROM tiredofit/nginx-php-fpm:8.0-alpine_3.16

ENV STAGE DEVELOPMENT
ENV TIMEZONE Europe/Bratislava
ENV NGINX_WEBROOT /app/public
ENV PHP_MEMORY_LIMIT 1G
ENV PHP_ENABLE_PDO_SQLITE TRUE
ENV PHP_ENABLE_REDIS TRUE

WORKDIR /app

COPY . .

I'm enabling ENV variables directly in Dockerfile and I can overwrite them or add another in docker-compose if needed.

My docker-compose looks like:

version: "3.7"

services:
  app:
    build:
      context: .
      dockerfile: docker/development/Dockerfile
    ports:
      - 8080:80
    volumes:
      - .:/app
    depends_on:
      - redis
      - mariadb
    networks:
      - codeigniter4

  redis:
    image: redis:alpine
    ports:
      - 6379:6379
    volumes:
      - redis:/data
    networks:
      - codeigniter4

  mariadb:
    image: mariadb:latest
    ports:
      - 3306:3306
    volumes:
      - ./initdb:/docker-entrypoint-initdb.d
      - mariadb:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: gponcontrol
      MYSQL_USER: gponcontrol
      MYSQL_PASSWORD: gponcontrol
    networks:
      - codeigniter4

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    environment:
      PMA_HOST: mariadb
      PMA_PORT: 3306
    ports:
      - 8888:80
    volumes:
      - phpmyadmin:/sessions
    depends_on:
      - mariadb
    networks:
      - codeigniter4

networks:
  codeigniter4:

volumes:
  redis:
  mariadb:
  phpmyadmin:

jozefrebjak avatar Aug 07 '22 15:08 jozefrebjak