PHP-fpm (8.3), nginx и PostgreSQL: Обзор Dockerfile docker-compose.yml и Makefile Как с этим работать

docker-compose.yml:

version: '3.9'
services:
  # Nginx service
  nginx:
    image: nginx:alpine
    container_name: ktu-articles_nginx
    ports:
      - 19741:80
    expose:
      - "80"
    environment:
      - VIRTUAL_HOST=auth.ktu10.loc
      - VIRTUAL_PORT=80
    volumes:
      - './config/nginx/:/etc/nginx/conf.d/'
      - '..:/var/www'
    depends_on:
      - app
    networks:
      - proxy_network
      - auth_network

  app:
    build: 
        context: .
        dockerfile: Dockerfile
    container_name: ktu-articles_php
    working_dir: /var/www/
    volumes:
      - '../:/var/www'
      - ./config/php-fpm/docker-php-ext-xdebug.ini:/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
    extra_hosts:
      - "host.docker.internal:host-gateway"
    depends_on:
      - db
    networks:
      - auth_network

  db:
    image: postgres:14.2
    container_name: ktu-articles_db
    volumes:
     - './config/postgresql:/docker-entrypoint-initdb.d'
    environment:
      POSTGRES_USER: ktu-articles_user
      POSTGRES_PASSWORD: ktu-articles_password
      POSTGRES_MULTIPLE_DATABASES: ktu-articles_db,ktu-articles_db_test
    ports:
      - 19745:5432
    networks:
      - auth_network

networks:
  proxy_network:
    name: nginx_dev_local_network
    external: true
  auth_network:
    name: auth_network

nginx_dev_local_network -- тут не нужна, ее можно удалить

Dockerfile:

FROM php:8.3.0-fpm-alpine3.19

RUN apk --no-cache update \
    && apk add --no-cache autoconf g++ make \
    postgresql-dev linux-headers
RUN pecl install xdebug-3.3.0 \
    && rm -rf /tmp/pear 
RUN docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
    \
    && docker-php-ext-install pdo_pgsql
    
#composer
ENV COMPOSER_ALLOW_SUPERUSER 1
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

#codeception alias
RUN echo 'alias cept="./vendor/bin/codecept"' >> ~/.profile

WORKDIR /var/www

Упоминаемый в docker-compose.yml файл ./config/php-fpm/docker-php-ext-xdebug.ini может иметь такое содержимое:

zend_extension=xdebug
xdebug.mode=debug
xdebug.client_host=host.docker.internal
xdebug.client_port=9004
;xdebug.start_with_request=yes
xdebug.idekey="netbeans-xdebug"

Makefile:

#Задаем подкоманды для изменения цвета
export red=`tput setaf 1`
export green=`tput setaf 2`
export yellow=`tput setaf 3`
export blue=`tput setaf 4`
export magenta=`tput setaf 5`
export cyan=`tput setaf 6`
export white=`tput setaf 7`
export reset=`tput sgr0`

PROJECT_NAME = ktu-articles
APP_CONTANER_COMMAND_PREF_PHP = @docker exec -it $(PROJECT_NAME)_php
APP_CONTANER_COMMAND_PREF_NGINX = @docker exec -it $(PROJECT_NAME)_nginx
APP_CONTANER_COMMAND_PREF_DB = @docker exec -it $(PROJECT_NAME)_db
APP_CONTANER_COMMAND_PROD_PREF = @docker exec -it $(PROJECT_NAME)_web_prod
LOCAL_APP_URL_MESSAGE = @echo  "Локальное приложение  ${cyan}ktu-articles${reset}: http://localhost:19741"
COMPOSE_DEV = docker compose -f ./docker/docker-compose.yml  --project-name $(PROJECT_NAME)

about:
	@echo "${cyan}Привет!)${reset} Это мэйкфайл для удобной работы с командами ${cyan};)${reset}  \
     \n Выполняйте нужные действия с помощью ${yellow}make имякоманды${reset}, доступные команды: \
     \n ${green}migrate${reset} - применит миграции \
     \n ${green}docker.start.all${reset} - Запустит все контейнеры приложения (соберет образы, если их нет) \
     \n ${green}docker.stop.all${reset} - Остановит все контейнеры приложения \
     \n ${green}docker.restart.all${reset} - Остановит все контейнеры приложения и запустит их заново \
	 \n ${green}docker.rebuild.all${reset} - Остановит все контейнеры приложения, пересоберет их запустит их заново \
	"

# DOCKER---------------------------------------
sh.php:
	$(APP_CONTANER_COMMAND_PREF_PHP) sh -l
sh.nginx:
	$(APP_CONTANER_COMMAND_PREF_NGINX) sh
sh.db:
	$(APP_CONTANER_COMMAND_PREF_DB) sh

docker.start.all:
	$(COMPOSE_DEV)  up -d
	$(LOCAL_APP_URL_MESSAGE)

docker.stop.all:
	$(COMPOSE_DEV)  stop   

docker.rebuild.all: docker.stop.all
	$(COMPOSE_DEV)  up -d --build
	$(LOCAL_APP_URL_MESSAGE)

docker.restart.all: docker.stop.all docker.start.all

docker.remove.db:
	docker rm $(PROJECT_NAME)_db

docker.reset.all: docker.stop.all docker.remove.db docker.rebuild.all

docker.php.sh:
	$(APP_CONTANER_COMMAND_PREF_PHP) sh

#APPLICATION--------------------------------------
composer.install:
	@echo  "Устанавливаем ${yellow}зависимости${reset}..."
	$(APP_CONTANER_COMMAND_PREF_PHP) composer install
migrate:
	@echo  "Выполняем ${yellow}миграции${reset}..."
	$(APP_CONTANER_COMMAND_PREF_PHP) php bin/console doctrine:migrations:migrate -n

# TMP--------------------------------------------
sh.db.test:
	$(APP_CONTANER_COMMAND_PREF_DB) psql -U ktu-articles_user ktu-articles_db

docker.test.proxy:
	curl -H "Host: auth.ktu10.loc" localhost:8888


Key Words for FKN + antitotal forum (CS VSU):