- Запуск PHP приложения на Docker контейнерах (PHP-FPM, Nginx, PostgreSQL)
- 1. Установка Docker
- 2. Создание образов
- DockerFileNginx
- DockerFilePostgresql
- DockerFile
- Создание образов на основе DockerFile’ов
- Запуск образов на сервере
- Установка NextCloud+Nginx+PHP+PostgreSQL на Linux
- Системные требования для NextCloud:
- Установка
- Установка PostgreSQL
- Установка PHP
- Установка Web-сервера Nginx
- Установка NextCloud
- Настройка
- Настройка Nginx для NextCloud
- Настройка PHP
- Настройка PostgreSQL
- GNet Solutions » GNU/Linux Administration
- Support #692
- Install an Nginx, PostgreSQL, PHP 5.6 Web Server on Arch
- Prepare the Environment¶
- Install Nginx¶
- Default Static Website¶
- Install PostgreSQL 9.4¶
- Create a new user and database¶
- Install PHP¶
- PHP Website¶
- (Extra) Install Phusion Passenger¶
- Ruby Website¶
- Securing Nginx With SSL¶
- Certificate Bundles¶
- Установка Nginx и PHP-FPM в Ubuntu 20.04
- Установка Nginx на Ubuntu 20.04
- 1. Официальные репозитории Ubuntu
- 2. Официальные репозитории Nginx
- 3. Запуск Nginx
- 4. Настройка брандмауэра
- 5. Проверка работы Nginx
- Установка PHP-FPM в Ubuntu
- Подключение Nginx к PHP-FPM
- Настройка PHP-FPM для прослушивания на сокете UNIX
- Настройка PHP-FPM для прослушивания через сокет TCP/IP
- Настройка NGINX для работы PHP-FPM
- Удаление Nginx и PHP-FPM с Ubuntu
- Выводы
Запуск PHP приложения на Docker контейнерах (PHP-FPM, Nginx, PostgreSQL)
За последний год программное обеспечение для автоматизации развертывания в среде виртуализации на уровне операционной системы набирает большие обороты. Эта статья послужит новичкам в этой сфере примером, как нужно упаковывать свое приложение в Docker контейнеры.
В классическом виде, PHP приложение представляет из себя следующие составляющие:
- Веб-сервер
- СУБД
- PHP приложение
В нашем примере мы будем использовать Nginx, PostgreSQL и PHP-FPM.
1. Установка Docker
Для начала работы, нам потребуется Docker. Скачать его можно на официальном сайте Docker.
2. Создание образов
Docker создает образы на основе DockerFile файлов, в котором описывается функционал. Мы создадим 3 образа для наших составляющих.
DockerFileNginx
В данном DockerFile мы создаем пользователя www-data с группой 82 и устанавливаем Nginx. Последняя строка COPY предполагает, что у вас конфигурация приложения лежит в папке config/website.conf. Она скопируется в /etc/nginx/conf.d/website.conf.
DockerFilePostgresql
В этом образе, мы будем отталкиваться от образа postgres:9.5.2 и выполним команду для определения локали и языка.
DockerFile
Этот образ послужит нам основным образом для нашего приложения. Сначала мы устанавливаем все необходимое для PHP и PHP-FPM. Далее, мы копируем текущую папку приложения в /usr/src/app, где будет распологаться наше приложение. В самом конце мы запускаем PHP-FPM.
Создание образов на основе DockerFile’ов
И так, у нас есть есть DockerFile’ы, на основе которых мы должны создать образы. Образы создаются очень просто. Достаточно выполнить следующие команды:
В дальнейшем советую добавить к этим командам —no-cache, чтобы каждый раз не компилировать составляющие.
Мы создаем образы, прикрепляем их к нашему аккаунту на Docker Hub. Теперь, нам нужно отправить наши образы на репозиторий в Docker Hub. Выполняем следующие команды:
Запуск образов на сервере
Мы почти у цели! Нам осталось загрузить образы из репозитория и запустить их. Загружаем их с помощью следующих команд:
Осталось их запустить. Делается это так же просто.
Вуаля! Наше приложение запущено на Docker контейнерах. И тем не менее, всем читателям-новичкам я бы обязательно ознакомиться с документацией Docker.
Всем желаю успехов в освоении новых технологий!
Источник
Установка NextCloud+Nginx+PHP+PostgreSQL на Linux
Сегодня в статье рассмотрим пример по установке и настройке домашнего облака NextCloud в среде Linux, также установим базу данных PostgreSQL и Web-сервер Nginx с PHP-FPM. Установка будет производиться на чистую Ubuntu Server 20.04 LTS.
Системные требования для NextCloud:
- База данных: MySQL 5.7+, или MariaDB 10.2, или PostgreSQL 9.5+
- Веб-сервер: Apache с mod_php или php-fpm или nginx с php-fpm
- Php: 7.3+
- ОЗУ: 512Мб+ или 2ГБ+, если использовать пакета Collabora или OnlyOffice
Установка
Разобьем установку на части. Установим базу данных PostgreSQL, интерпретатор PHP, далее web-сервер Nginx, ну и последним пунктом наше облако NextCloud:
Установка PostgreSQL
Для установки базы данных в терминале набираем:
Установка PHP
Для установки PHP для начала добавим более новый репозиторий:
После этого устанавливаем PHP и необходимые зависимости для NextCloud.
Предупреждение: в данный момент NextCloud поддерживает PHP версии не выше 7.4
Установка Web-сервера Nginx
Для установки nginx для начала добавим, как и с PHP, более новый репозиторий:
Теперь можно установить наш web-сервер. Устанавливать будем сборку в которую включен модуль для проигрывания потокового видео с нашего сервера (поддержка модуля mp4). Открываем терминал и набираем:
Установка NextCloud
После всех пунктов выше приступим к установки нашего домашнего облака NextCloud. Для этого переходим в директорию /var/www :
Скачиваем последнюю версию NextCloud (на момент написания статьи версия NextCloud была 21.0.0), а также сразу распакуем и изменим права на директорию NextCloud:
Настройка
Как и в пункте с установкой, настройка также будет разбита по пунктам. Давайте приступим.
Настройка Nginx для NextCloud
Приступим к настройке web-сервера nginx. Создадим файл конфигурации для NextCloud, работать наш сервер будет на порту 80. И так начнем:
Заполняем в соответствии с моим листингом:
Адрес https://mynextcloud.ru измените на свой.
Настройка PHP
Настроим PHP для работы с NextCloud. В терминале набираем:
Находим и редактируем следующие строки:
Настройка PostgreSQL
Сперва настроим наш PostgreSQL для прослушивания всех внутренних адресов сервера. Для этого открываем следующий файл:
Находим и редактируем данную строчку к такому виду:
Теперь можно создать нашу БД для NextCloud, а также создадим пользователя БД и пароль для него. Подключаемся к postgresql:
Создаем базу данных и пользователя для nextcloud
Далее переходим по адресу нашего сервера (локальному или внешнему например: http://mynextcloud.ru ) и видим первоначальную установку NextCloud
Из скриншота видим, что на самом верху нам предлагается придумать учетную запись и пароль администратора nextcloud.
Далее идет поле для выбора каталога с данными. Данное поле отвечает за размещение всех данных пользователей в директории на сервере. Я оставляю без изменений.
Последняя группа полей ответственна за подключение к базе данных. Чуть выше мы создавали и настраивали БД PostgreSQL, вот эти данные и вводим сюда. И нажимаем кнопку продолжить.
Если все сделали правильно, то после обновления окна нам будет предложено войти в свою учетную запись.
Замечание: В панели администратора в пункте общие сведения Вы можете наблюдать различные ошибки и предупреждения от системы. Как их устранить я писал тут.
На этом наша настройка домашнего облака NextCloud завершается. Всем удачи.
Если есть вопросы, то пишем в комментариях.
Также можете вступить в Телеграм канал, ВК или подписаться на Twitter. Ссылки в шапки страницы.
Заранее всем спасибо.
Источник
GNet Solutions » GNU/Linux Administration
Support #692
Install an Nginx, PostgreSQL, PHP 5.6 Web Server on Arch
Description
- Table of contents
- Prepare the Environment
- Install Nginx
- Default Static Website
- Install PostgreSQL 9.4
- Create a new user and database
- Install PHP
- PHP Website
- (Extra) Install Phusion Passenger
- Ruby Website
- Securing Nginx With SSL
- Certificate Bundles
- Resources
Here is a procedure to install Nginx, PostgreSQL and PHP web server stack on Arch Linux.
Prepare the Environment¶
- Before installation of the components, make sure everything is up to date using the following command:
- Install a few dependencies:
- Add the sudo group
- Edit the sudoers file:
- And uncomment the %sudo line to allow users in the sudo group access to sudo:
- Add a webuser
- And add webuser to the sudo group:
- Start and enable ntpd:
Install Nginx¶
- Install Nginx
- Start and enable nginx at boot:
- Create a configuration directory to make managing individual server blocks easier
- Edit the main nginx config file:
- And strip down the config file and add the include statement at the end to make it easier to handle various server blocks:
Default Static Website¶
Start by setting up a simple static website, no server-side stuff PHP or Ruby; just plain HTML, CSS, JavaScript, etc.
- Create a directory for the web site:
- Add a default site server block:
- Add the following:
Install PostgreSQL 9.4¶
- Make sure to enable en_US.UTF-8 in the locale generation file:
- And regenerate the local locales:
- Install PostgreSQL:
- Enable PostgreSQL at boot:
- NOTE: If the postgresql database is on a btrfs filesystem, make sure to disable Copy-on-Write for the postgresql database folder:
- Switch to the postgresql user:
- Initialize the database:
- Then exit the postgresql user:
- Start PostgreSQL:
- Edit the postgres config file:
- And modify the following:
- Edit the pg_hba config file:
- And modify the following:
- And wrap up by restarting the postgresql server:
Create a new user and database¶
- Switch to the pgsql user:
- Create the somepgdb database:
- Then create the somepguser user:
- Grant all privileges to somepgdb to somepguser:
- Exit from the postgresql user
Install PHP¶
- Install PHP 5.6 and php-fpm:
- Install PHP extensions and a few modules:
- NOTE: There are many more PHP modules, to search for more PHP modules run:
- Enable php-fpm at boot:
- Edit the php-fpm config:
- Make the following changes:
- Start php-fpm:
PHP Website¶
- Create a directory for the web application:
- Add a phpapp.example.com server block:
- Add the following:
- Add the PHP files for the site and change the ownership to the http user:
- Restart nginx:
(Extra) Install Phusion Passenger¶
- Remove the system nginx package:
- Remove the old nginx configuration directory
- Install the base-devel package:
- Import the RVM GPG signing key:
- Install RVM:
- Then add the following line to the end of your
/.bash_login file
- Now logout and log back in for rvm to take effect
- Add the http user to the rvm group:
- See if there are any dependency requirements for your installation by running:
- Install ruby 2.1.5:
- Run the following to allow passenger install nginx:
- Link the new nginx configuration folder in the /etc folder:
- Don’t forget to remake the conf.d folder in the nginx configuration folder:
- Edit the main nginx config file:
- And add the Passenger config parameters:
- Create a new nginx systemd init script:
- And add the following:
- Start and enable nginx at boot::
Ruby Website¶
- Create a directory for the web application:
- Add a rubyapp.example.com server block:
- Add the following:
- Restart nginx to load the website config:
Securing Nginx With SSL¶
Enabling SSL in Nginx is simple. First add the ssl directive in the server listen option, then add the SSL certificate and key paths.
- The basic SSL server block should be look similar to the following:
- Setup the Diffie-Hellman Key Exchange Parameters
- Generate a strong SSL key and a CSR to send for signing by a CA:
- If the received SSL certificate requires additional bundle certificates, add them together like so:
- Setup the default site configuration:
- Then add or modify the configuration to look similar to the following:
- Restart nginx to load the new website config:
Certificate Bundles¶
Some browsers may complain about a certificate signed by a well-known certificate authority, while other browsers may accept the certificate without issues. This occurs because the issuing authority has signed the server certificate using an intermediate certificate that is not present in the certificate base of well-known trusted certificate authorities which is distributed with a particular browser. In this case the authority provides a bundle of chained certificates which should be concatenated to the signed server certificate.
- The server certificate must appear before the chained certificates in the combined file:
- The resulting file should be used in the ssl_certificate directive:
Источник
Установка Nginx и PHP-FPM в Ubuntu 20.04
Интерпретатор языка программирования PHP может работать в нескольких режимах. Он может быть интегрирован в веб-сервер в виде специального модуля или использоваться как отдельный сервис PHP-FPM. Аббревиатура FPM расшифровывается как FastCGI Process Manager. Это сервис, который запускает несколько процессов, которые могут выполнять PHP скрипты.
PHP-FPM может получать скрипты, которые надо выполнить, с помощью TCP или Unix сокетов. Именно такой способ выполнения скриптов используется в Nginx. В этой статье мы рассмотрим как выполняется установка Nginx с PHP-FPM в Ubuntu.
Установка Nginx на Ubuntu 20.04
Установить Nginx можно двумя способами. Первый способ заключается в установки пакета из официального репозитория Ubuntu. На момент написания статьи (1 августа 2021 года) актуальной версией Nginx присутствующей в репозитории Ubuntu была версия 1.18.0. Данная версия считается устаревшей. Актуальной же версией считается 1.20.1 (по состоянию на 1 августа 2021 года).
1. Официальные репозитории Ubuntu
Если вы хотите установить версию Nginx из репозиториев Ubuntu необходимо выполнить следующие действия. Для начала обновляем списки пакетов при помощи команды:
sudo apt update
Для того, чтобы установить Nginx, достаточно выполнить команду:
sudo apt -y install nginx
После этого программу можно использовать. Проверка и настройка программы будет описана в разделах ниже.
2. Официальные репозитории Nginx
Второй способ заключается в установке последней версии Nginx из официальных репозиториев, которые предоставляют разработчики Nginx. Если вы хотите использовать данный метод установки, для начала необходимо обновить списки пакетов при помощи команды:
sudo apt update
Установите необходимые пакеты:
sudo apt -y install curl gnupg2 ca-certificates lsb-release
Далее у вас на выбор есть два пути – подключить репозиторий со стабильной версией nginx или подключить репозиторий с основной версией. Стабильная версия является более проверенной и работоспособной. Эту версию можно использовать, как и в тестовых средах так и на производственных. Основная версия не такая стабильная и может содержать ошибки. Данную версию не рекомендуется использовать в производственных средах.
Для подключения репозитория со стабильной версией nginx, выполните следующую команду:
echo «deb http://nginx.org/packages/ubuntu `lsb_release -cs` nginx» | sudo tee /etc/apt/sources.list.d/nginx.list
Для подключения репозитория с основной версией nginx, выполните следующую команду:
echo «deb http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx» | sudo tee /etc/apt/sources.list.d/nginx.list
Следующие шаги необходимо выполнять вне зависимости от выбранного репозитория. Импортируйте официальный ключ, используемый пакетным менеджером для проверки подлинности пакетов:
curl -o /tmp/nginx_signing.key https://nginx.org/keys/nginx_signing.key
Проверьте, верный ли ключ был загружен:
gpg —dry-run —quiet —import —import-options import-show /tmp/nginx_signing.key
Вывод команды должен содержать полный отпечаток ключа 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62:
Переместите ключ в каталог доверенных ключей apt:
sudo mv /tmp/nginx_signing.key /etc/apt/trusted.gpg.d/nginx_signing.asc
Чтобы установить nginx, выполните следующие команды:
sudo apt update
sudo apt -y install nginx
Версия Nginx от разработчиков немного отличается от версии из официальных репозиториев. Все дополнительные конфигурационные файлы здесь находятся в папке /etc/nginx/conf.d. Если вы хотите использовать папки sites-available и sites-enabled, то необходимо их создать:
sudo mkdir /etc/nginx/sites-available
sudo mkdir /etc/nginx/sites-enabled
Затем добавьте следующую строчку в конец секции http файла /etc/nginx.conf для того чтобы из папки /etc/nginx/sites-enabled загружалась конфигурация сайтов:
sudo vi /etc/nginx/nginx.conf
Затем перезапустите Nginx:
sudo nginx -s reload
3. Запуск Nginx
После установки пакета, проверяем что Nginx успешно запустился при помощи команды:
sudo systemctl status nginx
Если в статусе вместо active будет inactive (dead), то сервис необходимо запустить вручную при помощи команды:
sudo systemctl start nginx
Так же обратите внимание, что вы не можете запускать Apache и Nginx на одном порту. В таком случае вы получите ошибку nginx address already in use 80. Для корректной работы Nginx, необходимо будет отключить веб-сервер Apache (если он у вас используется) или изменить его порт с 80 (который используется по умолчанию) на другой свободный порт.
4. Настройка брандмауэра
По умолчанию брандмауэр закрывает все неразрешённые входящие подключения. Поэтому, чтобы к вашему веб-серверу можно было получить доступ извне, необходимо добавить его порт в исключения:
sudo ufw allow in 80/tcp
5. Проверка работы Nginx
После того, как Nginx будет запущен, он будет доступен по адресу сервера, на который он устанавливался. Вы можете проверить, всё ли работает, просто перейдя по адресу сервера, введя его в браузере. Для примера Nginx был установлен на localhost:
Если вы увидите приветственное сообщение как на скриншоте выше это означает что Nginx успешно установлен и запущен.
Установка PHP-FPM в Ubuntu
Следующим шагом будет установка интерпретатора языка программирования PHP и всех необходимых модулей для работы с PHP-FPM. Для установки всех необходимых модулей выполните команду:
sudo apt -y install php7.4 php7.4-cli php7.4-fpm php7.4-json php7.4-pdo php7.4-mysql php7.4-zip php7.4-gd php7.4-mbstring php7.4-curl php7.4-xml php-pear php7.4-bcmath
На момент написания статьи (1 августа 2021) актуальной версией PHP в официальных репозиториях Ubuntu считалась версия 7.4. Самая же последняя официальная версия PHP от разработчиков 8.0.9 (по состоянию на 29 июля 2021 года). После установки всех необходимых пакетов проверяем статус PHP-FPM:
systemctl status php7.4-fpm.service
Если в статусе вместо active будет inactive (dead), то сервис необходимо запустить вручную при помощи команды:
sudo systemctl start php7.4-fpm.service
После того, как сервис запустился, установка будет считаться выполненной.
Подключение Nginx к PHP-FPM
Чтобы принимать запросы FastCGI от Nginx, PHP-FPM может прослушивать сокет TCP/IP или UNIX сокет. Сокеты UNIX являются средством межпроцессного взаимодействия, которое обеспечивает эффективный обмен данными между процессами, работающими в одной и той же операционной системе, в то время как сокеты TCP/IP позволяют процессам обмениваться данными по сети.
В отличие от сокета TCP/IP, который идентифицирует сервер по IP-адресу и порту (например, 127.0.0.1:9000), вы можете привязать сервер к сокету UNIX, используя путь к файлу (например, /run/php-fpm/www.sock), который виден в файловой системе.
Сокет UNIX — это особый тип файла — к нему применяются разрешения на доступ к файлам и каталогам (как в случае с любым другим типом файла UNIX), и его можно использовать для ограничения того, какие процессы на хосте могут читать и записывать в файл, (и, таким образом, общаться с внутренним сервером).
Таким образом, сокет UNIX является безопасным, поскольку его могут использовать только процессы на локальном хосте. Сокет TCP/IP может быть доступен из Интернета, и это может представлять угрозу безопасности, если не будут приняты дополнительные меры безопасности, такие как настройка брандмауэра.
Настройка PHP-FPM для прослушивания на сокете UNIX
Чтобы настроить PHP-FPM на прослушивание сокета UNIX, откройте файл конфигурации пула PHP-FPM по умолчанию, используя свой любимый текстовый редактор при помощи команды:
sudo nano /etc/php/7.4/fpm/pool.d/www.conf
Затем найдите директиву listen и задайте для нее путь к файлу сокета UNIX следующим образом — listen = /run/php/php7.4-fpm.sock
Если вы используете сокет UNIX, вам также необходимо установить соответствующие разрешения на чтение/запись для файла, чтобы разрешить подключения с веб-сервера NGINX. По умолчанию NGINX работает как пользователь www-data в Ubuntu.
Найдите параметры listen.owner и listen.group и задайте им значение www-data. Также установите режим на 0660, для параметра listen.mode.
Настройка PHP-FPM для прослушивания через сокет TCP/IP
Хотя сокет UNIX быстрее сокета TCP/IP, он менее масштабируем, поскольку он может поддерживать межпроцессное взаимодействие только в одной и той же ОС. Если NGINX и внутренний сервер приложений (PHP-FPM) работают в разных системах, вам придется настроить PHP-FPM для прослушивания сокетов TCP/IP для удаленного подключения.
В файле конфигурации пула PHP-FPM установите адрес прослушивания, например: 127.0.0.1:9000. Убедитесь, что выбранный вами порт не используется другим процессом или службой в той же системе.
sudo nano /etc/php/7.4/fpm/pool.d/www.conf
Найдите параметр listen и пропишите адрес — 127.0.0.1:9000:
Сохраните изменения и закройте файл. Установка Nginx php fpm практически завершена.
Настройка NGINX для работы PHP-FPM
После того, как вы настроили адрес, который прослушивает PHP-FPM, вам нужно настроить Nginx для запроса прокси к нему через этот адрес, используя параметр конфигурации fastcgi_pass, который располагается в файле конфигурации блока виртуального хоста.
Для примера, возьмем файл конфигурации стандартной странички сайта nginx которая открывается при первом запуске nginx, расположенный по следующему пути — /etc/nginx/conf.d/default.conf, откроем его для редактирования:
sudo nano /etc/nginx/conf.d/default.conf
Если вы настроили PHP-FPM для прослушивания на сокете UNIX, найдите блок местоположения для обработки файлов .php и установите следующие параметры для fastcgi:
\.php$ <
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
>
Если используется TCP/IP сокет, замените значение в параметре fastcgi_pass на IP-адрес и порт сервера, на котором работает PHP-FPM FastCGI:
\.php$ <
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
>
После внесения изменений в конфигурации Nginx проверьте правильность синтаксиса при помощи команды:
Далее вам необходимо перезапустить службы, чтобы применить изменения, используя для этого команды:
sudo systemctl restart nginx
sudo systemctl restart php7.4-fpm
После перезапуска служб, подключение считается выполненным успешно. Для дальнейшей настройки PHP-FPM воспользуйтесь статьей по настройке PHP-FPM на Ubuntu 20.04 – Настройка PHP-FPM
Удаление Nginx и PHP-FPM с Ubuntu
Чтобы полностью удалить Nginx и PHP-FPM из системы, достаточно удалить все пакеты, которые вы установили ранее:
sudo apt -y purge nginx php7.4 php7.4-cli php7.4-fpm php7.4-json php7.4-pdo php7.4-mysql php7.4-zip php7.4-gd php7.4-mbstring php7.4-curl php7.4-xml php-pear php7.4-bcmath
Команда purge позволяет удалить не только пакеты, но и их конфигурационные файлы. Если вы хотите оставить конфигурационные файлы, используйте команду remove.
Выводы
В этой статье мы разобрали, как выполняется установка Nginx PHP-FPM в Ubuntu 20.04. Как видите, это не очень сложно и с такой задачей может справиться даже новичок. Если у вас остались вопросы, оставляйте их в комментариях!
Источник