Php fpm docker postgres

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Docker Compose configuration to run PHP7.1 with Nginx, PHP-FPM, PostgreSQL 10.1 and Composer.

License

ineat/docker-php-nginx-postgres-composer

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Docker Compose configuration to run PHP 7.1 with Nginx, PHP-FPM, PostgreSQL 10.1 and Composer.

This Docker Compose configuration lets you run easily PHP 7.1 with Nginx, PHP-FPM, PostgreSQL 10.1 and Composer. It exposes 4 services:

The PHP image comes with the most commonly used extensions and is configured with xdebug. The UUID extension for PostgreSQL has been added. Nginx default configuration is set up for Symfony 4 (but can be easily changed) and will serve your working directory. Composer is run at boot time and will automatically install the vendors.

For now the project has been tested on Linux only but should run fine on Docker for Windows and Docker for Mac.

Checkout the repository or download the sources.

Simply run docker-compose up and you are done.

Читайте также:  Java iterator remove all elements

Nginx will be available on localhost:80 and PostgreSQL on localhost:5432 .

docker-compose run composer

Where cmd is any of the available composer command.

docker-compose exec db psql -U postgres

Using .env file default parameters:

docker-compose exec db psql -U dbuser dbname

If you want to connect to the DB from another container (from the php one for instance), the host will be the service name: db .

You can execute any command on the php container as you would do on any docker-compose container:

docker-compose exec php php -v

To change PHP’s configuration edit .docker/conf/php/php.ini . Same goes for .docker/conf/php/xdebug.ini .

You can add any .ini file in this directory, don’t forget to map them by adding a new line in the php’s volume section of the docker-compose.yml file.

Any .sh or .sql file you add in ./.docker/conf/postgres will be automatically loaded at boot time.

If you want to change the db name, db user and db password simply edit the .env file at the project’s root.

If you connect to PostgreSQL from localhost a password is not required however from another container you will have to supply it.

To avoid typing over and over again the same commands you can add two useful aliases in your shell’s configuration ( .bashrc or .zshrc for instance):

alias dcu="docker-compose up" alias dcr="docker-compose run" alias dce="docker-compose exec" 

It then becomes way faster to execute a composer command for instance:

dcr composer require —dev phpunit/phpunit

About

Docker Compose configuration to run PHP7.1 with Nginx, PHP-FPM, PostgreSQL 10.1 and Composer.

Источник

Php fpm docker postgres

Представьте что вы приходите в качестве разработчика в новую компанию у которого есть веб-сайт. Для его работы нужны допустим nginx, php-fpm и postgres, вот схематично как работает веб-сайт компании:

enter image description here

  1. Вы вводите в браузере адрес веб-сайта, браузер запрашивает html-страницу с котиками по указанному адресу
  2. http-сервер nginx принимает ваш запрос и делегирует создание страницы php-fpm
  3. php-fpm запрашивает данные о котиках из базы postgres, строит html-страницу и отдает обратно его nginx-у, а тот в свою очередь клиенту-браузеру и вы видите красивых котиков

Введение в проблему

Перед началом работы над сайтом, вам придется развернуть проект — это значит:

  • установить nginx
  • установить php-fpm и все нужные расширения
  • настроить совместную работу nginx и php-fpm
  • установить postgres, создать пользователей и создать нужные базы и схемы
Читайте также:  Javascript appending text to div

Зачастую это сделать не так просто и не так быстро, также сложности добавляют различия в операционных системах (далее ОС), один коллега предпочитает Mac OS, а другой Ubuntu или Windows.

Неплохо было бы автоматизировать эти рутинные действия и иметь одну магическую команду “установи мне всё, и где угодно и настрой как надо”, верно?

Передав такой инструмент коллеге, он сможет развернуть проект за считанные минуты, причём, его приложение будет работать в точности как и ваше. Всему этому есть решение — docker!

В этой статье мы разберёмся с основами работы docker, docker compose узнаем о контейнеризации и docker-контейнере, научимся скачивать готовые docker-образы и создавать свои, в конце развернём простое веб-приложение с использованием php-fpm + nginx + postgres.

Контейнеризация и docker-контейнер

В основе программы Docker лежит технология контейнеризации.

Контейнеризация (виртуализация на уровне ОС) — это технология, которая помогает запускать приложения изолированно от ОС. Приложение упаковывается в специальную оболочку-контейнер, внутри которой — среда, необходимая для работы.

Простыми словами контейнер — это некая изолированная песочница для запуска ваших приложений

enter image description here

Приложение 1 и приложение 2 изолированы друг от друга и от операционной системы.

Docker — это программа, которая является наиболее популярной реализацией технологии контейнеризации, она позволяет запускать docker-контейнеры с приложениями из заранее заготовленных шаблонов — docker-образов (Docker image)

Для чего вам может понадобиться docker:

  • запуск изолированных приложений, и управление ими
  • ускорение и автоматизация развертывания приложений
  • доставка этих приложений до серверов
  • масштабирование
  • запуск на одном компьютере разных версий одной программы

Установка

Для начала нам нужно установить:

Сразу в бой!

Концепцию docker легче понять на практике. Например, давайте попробуем запустить http-сервер nginx на нашем компьютере.

docker run -p 8080:80 nginx:latest 

Идём в браузер, открываем 127.0.0.1:8080 . И уже видим страницу приветствия nginx! И всё!

enter image description here

Теперь разберёмся подробнее, что тут происходит.

enter image description here

Команда docker run -p 8080:80 nginx:latest делает следующее:

  1. Скачивает docker-образ nginx:latest (если ранее не скачивался) из Docker Hub
  2. Запускает docker-контейнер используя этот docker-образ
  3. Ранее уже упоминалось, что процессы в docker-контейнерах запускаются в изоляции от ОС, то есть все порты между ОС и docker-контейнером закрыты. И для того чтобы мы смогли обратиться к nginx, нужно пробросить порт. Как раз для этого служит опция -p 8080:80 , 80 — порт nginx-а внутри контейнера, 8080 — порт в локальной сети ОС.

Docker-образ (Docker image) — шаблон для создания docker-контейнеров. Представляет собой исполняемый пакет, содержащий все необходимое для запуска приложения: код, среду выполнения, библиотеки, переменные окружения и файлы конфигурации.

Читайте также:  List has value python

Docker Hub — это публичный репозиторий docker-образов, куда может любой желающий загрузить его или скачать. На странице nginx в Docker Hub как раз можно найти тот самый наш docker-образ nginx:latest, latest — это tag который ссылается на самый свежий docker-образ

Создание собственных docker-образов

А давайте попробуем создать свой docker-образ, взяв за основу nginx:latest ?

Docker умеет создавать docker-образ читая текстовые команды записанный в файл, этот файл называется Dockerfile

Пример простейшего Dockerfile:

enter image description here

Давайте разбираться что тут происходит и посмотрим на рисунок.

enter image description here

Каждый сервис у нас находится внутри docker-контейнера. Точкой входа в наше приложение как и в случае с веб-сайтом компании, является NGINX. Пользователи веб-сайта делают запросы к NGINX у которого проброшен порт 80.

  1. test-network . Мы помним что каждое приложение в docker-контейнере находится в изоляции. test-network объединяет все docker-контейнеры в одну сеть, и это позволяет обращаться к нужному контейнеру по имени сервиса.
  2. Volumes — это механизм для хранения данных вне docker-контейнера, т.е в файловой системе нашей ОС. И решает проблему совместного использования файлов.

Все примеры, а так же исходники dockerFile-ов можно взять из репозитория на https://github.com/ildarsaitkulov/docker-for-kids

Простое веб-приложение

Создадим самое простое веб-приложение, которое показывает нам сообщение об успешном подключении к базе данных. Вместо адреса базы данных мы используем host= postgres , такое же имя нашего сервиса как и в YAML-файле, помним что эта возможность появилась благодаря общей сети test-network

 try  $pdo = new \PDO("pgsql:host=postgres;dbname=postgres", 'postgres', 'mysecretpass'); echo "Подключение к базе данных установлено! 
"
; return; > catch (PDOException $exception) echo "Ошибка при подключении к базе данных
$exception->getMessage()>
"
; >

PDO — это интерфейс для доступа к базам данных в PHP, подробнее.

Теперь, для того чтобы создать все docker-образы и запустить docker-контейнеры нужно выполнить:

enter image description here

Увидим успешное соединение с базой данных!

Заключение

Как и обещал одной лишь командой мы развернули все сервисы, и это можно сделать где угодно, нужен только docker, и везде у вас будет единое окружение!

Придя на новую работу, вместо долгой и сложной подготовки проекта к работе, вам стоит лишь выполнить одну команду.

В этой статье мы разобрались с основами работы docker, docker compose узнали о контейнеризации и docker-контейнере, научились скачивать готовые docker-образы и создавать свои, развернули простое веб-приложение с использованием php-fpm + nginx + postgres.

Docker отличный инструмент для быстрого развертывания приложений, доставки до серверов, тестирования. Подробнее можно почитать на официальном сайте.

Источник

Оцените статью