Установить сервер nginx php-fpm ubuntu

Установить сервер nginx php-fpm ubuntu

Установим и настроим Nginx сервер на локальный компьютер на OS Ubuntu прям в корень системы, объясню почему.

Однажды я решил заняться налаживанием веб сервера для разработки на линуксе, до этого очень много времени работал на OsPanel(опенсервер) в Windows. Хотел такую же системы сделать и наткнулся на Vagrant. Оказалсь прикольно штукой, но какой-то неказистой и не удобной, но первое время нормально шло, потом мне понадобилось из локального веб сервера подключиться к внешней MSSQL базе с пробросом портов, вот здесь я прифигел от сложности. 2 дня потратил на поиск решений и проб, плюнул и поставил Веб сервер прямо в корень своей домашней Убунты и был счастлив. И так уже работаю 2 года.

Первоначальная установка в Vagrant почти идентичная как если бы устанавливать систему в корень ОС.

P.S. Локальный сервер будет идентичным тому что на боевых серверах, что особенно важно веб разработчику!

Обновляем ОС и устанавливаем nginx

Nginx - это прокси сервер. Он в 10 раз шустрее Apache, но ему для обработки php скриптов нужен php-fpm

Так же он не воспринимает .htaccess файл, но не пугайтесь, большинство их настроек можно легко сделать в конфиге.

Обновляем ubuntu

sudo apt update
sudo apt full-upgrade
sudo apt install -y nginx
nginx -v

Запуск nginx

sudo systemctl start nginx

Добавляем nginx в автозагрузку

sudo systemctl enable nginx

Проверка статуса nginx

sudo systemctl status nginx

Установка php и php-fpm

Установим нужные версии php. Их может быть несколько штук и к разным доменам прикреплены, что очень удобно!

Установка php

Эти строки я делал, чтобы подключиться к нужному репозиторию при установке. Не помню уже зачем, но выручают при разных глюках

sudo add-apt-repository ppa:ondrej/php
sudo apt install -y language-pack-en-base
sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php
sudo apt update

Потом наконец уже установим php7.4 - Аналогично можно установить любую другую версию, просто замените цифру

sudo apt install -y php7.4

Установим нужные дополнения и библиотеки к php

sudo apt install -y php7.4-fpm  php7.4-opcache php7.4-zip php7.4-xmlrpc php7.4-xsl php7.4-mbstring php7.4-mcrypt php7.4-mysql php7.4-odbc php7.4-pgsql php7.4-pspell php7.4-readline php7.4-recode php7.4-snmp php7.4-soap php7.4-sqlite3 php7.4-sybase php7.4-tidy php7.4-xml php7.4-json php7.4-ldap php7.4-intl php7.4-interbase php7.4-imap php7.4-memcached php7.4-curl php7.4-gmp php7.4-gd php7.4-enchant php7.4-dba php7.4-bz2 php7.4-bcmath php7.4-phpdbg php7.4-cgi php7.4-cli unzip

P.S. Если будет ругаться, что нет какой то библиотеки - удалите ее из списка и попробуйте еще раз. Этот список писал для версии php7.1, по этому в новых могут отсутствовать или переименованные какие то библиотеки. Поправлю статью когда буду переустанавливать себе Linux.

Настройка php 7.4

Настройка php будет заключаться в следующем (мне для работы и идентичности совпадения с рабочим сервером нужно было сделать, вдруг и вам будет интересно):

  • Устранение уязвимостей
  • Увеличение размера загружаемого файла
  • Увеличение времени работы скрипта
  • Настройка opcache

Открываем php.ini

sudo nano /etc/php/7.1/fpm/php.ini

ищем строчку ;cgi.fix_pathinfo = 1

раскомментируем строчку и поставим вместо единицы 0. Должно получиться так

cgi.fix_pathinfo = 0

Увеличим размер загружаемых файлов. Находим post_max_size и приводим к виду

post_max_size = 100M

Увеличим время обработки скрипта, ищем max_execution_time выставив 300 секунд — обычно нужно для работы с большими таблицами mysql

max_execution_time = 300

Далее ищем opcache. Приводим данные директивы к такому виду:

opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=64
opcache.interned_strings_buffer=4
opcache.max_accelerated_files=7963
opcache.revalidate_freq=20

Сохраняем файл комбинацией Ctrl+O, потом подтверждаем Enter

Перезапускаем php7.4-fpm

sudo service php7.4-fpm restart

Установка GIT

Если у вас еще не установлен GIT, то настоятельно рекомендую его поставить! Крутая штука.

Установка

sudo apt install git

Узнаем версию

git --version

Установка MariaDB 10.3.20

Установим базу данных mariaDB. Это полный бесплатный официальный аналог MySQL. Имеет только микроскопические отличия. Я ее ставил потому что на работе так сказали))

Чтобы установить MariaDB 10.3 в Ubuntu 16.04, вам необходимо добавить репозиторий MariaDB в систему. Выполните следующие команды, чтобы импортировать ключ PGP репозитория MariaDB и добавить репозиторий.

10.3

sudo apt -y install software-properties-common dirmngr
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64] http://mirror.zol.co.zw/mariadb/repo/10.3/ubuntu xenial main'

10.4

Позже нужно было обновиться до 10.4, поэтому добавил сюда для справки

sudo apt-get install software-properties-common
sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://mirror.mephi.ru/mariadb/repo/10.4/ubuntu focal main'

P.S. Для получения ссылки на репозиторий откройте официальный сайт, выберите ваш дистрибутив, выберите версию дистрибутива, а затем желаемую версию MariaDB

Обновите список системных пакетов и установите MariaDB

sudo apt update
sudo apt -y install mariadb-server mariadb-client

Вам будет предложено ввести корневой пароль MariaDB. Введите пароль для установки root.

Подтвердите Пароль: root

Нажмите Ок, чтобы подтвердить новый пароль и установить MariaDB.

Вы можете подтвердить установленную версию MariaDB, войдя в систему как пользователь root.

mysql -u root -p
SELECT version();

Создать тестовую базу данных / показать все базы данных / удалить и снова показать

CREATE DATABASE test_db;
show databases;
DROP DATABASE test_db;
SHOW DATABASES;

Настройка mariaDB в Ubuntu

Сразу после установки MariaDB ещё не готова к работе. Для обеспечения её безопасности необходимо выполнить команду:

sudo mysql_secure_installation

Сначала надо ввести пароль суперпользователя, который вы задали при установке MariaDB: root

Затем можно поменять пароль, но если он вас устраивает, нажмите n.

Во всех следующих пунктах нужно нажимать Y. Утилита отключит анонимный вход, запретит удалённую авторизацию для суперпользователя, удалит временные таблицы и перезагрузит настройки полномочий:

Теперь MariaDB готова к работе. Давайте создадим первую базу данных. Чтобы запустить клиент, выполните в терминале с пустым паролем:

mysql -u root -p

P.S. Если подключение не будет подключать с пустым паролем (такое возможно по технике безопасности), то просто в начале команды добавьте sudo, введете пароль своего компьютера и потом пустой пароль к базе данных

sudo mysql -u root -p

Для создания базы данных с именем test_database выполните:

CREATE DATABASE muztorg;

Затем необходимо создать пользователя и дать ему все права на эту базу данных, чтобы ваше приложение могло с ней работать:

CREATE USER 'roman' IDENTIFIED BY 'root';

У нашего пользователя имя text_user и пароль password. Теперь дадим ему права на нашу базу данных:

P.S. Замените 'roman' на свое

GRANT ALL ON *.* TO 'roman'@localhost IDENTIFIED BY 'root';
exit;

Установка memcached

Необязательно, но если нужно еще установить memcached тогда выполните следующую команду

sudo apt install -y memcached libmemcached-tools

Настройка memcached

Настройка Memcached Ubuntu выполняется через файл /etc/memcahced.conf. В этом файле содержаться опции, которые будут переданы сервису при запуске:

-d - работать в режиме сервиса;

-v - режим более подробного вывода информации;

-vv - ещё более подробный вывод информации;

-m - количество оперативной памяти, которую будет использовать сервис, рекомендую увеличить этот параметр, так как значения 64 мегабайта, установленных по умолчанию, будет мало;

-p - порт, на котором будет работать сервис;

-u - пользователь, от имени которого запущен сервис;

-l - IP-дрес, на котором Memcached будет ожидать соединения, лучше использовать 127.0.0.1, чтобы из внешней сети ни у кого не было доступа к вашим данным;

-с - количество одновременных подключений;

-P - путь к PID-файлу сервиса в файловой системе.

Таким образом, большинство опций можно оставить по умолчанию. Изменить нужно только объём оперативной памяти и IP-адрес.

Запуск memcached

Даже если сервис был запущен по умолчанию, после изменения настроек его нужно перезапустить:

sudo systemctl restart memcached

Можно ещё убедиться, что Memcached работает именно на том IP и порте, которые нам нужны:

ss -tlpn

Затем вы можете посмотреть статистику использования сервиса командой:

memcstat --servers="127.0.0.1"

Работать с Memcached мы можем уже сейчас. Для этого нужно использовать Telnet. Подключаемся к серверу:

telnet localhost 11211

Если подключение прошло успешно, вы увидите такое сообщение:

Connected to localhost

Используйте команду stats, чтобы получить общую статистику, которую мы видели в выводе команды memcstat:

чтобы выйти, введите команду quit

Создание локального домена

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

P.S. имя пользователя у меня "roman", заменить в пути на свое

mkdir /home/roman/local-web-server/www/

Создадим папку для хранения логов сервера

mkdir /home/roman/local-web-server/www/logs

Создаем папку для домена mysite.loc

Название домена может быть любым, к примеру my-site.ru. Но главное без пробелов

mkdir /home/roman/local-web-server/www/mysite.loc

Настроим и подключим уже домен/ Создадим текстовый файл mysite.loc в конфиге nginx.

sudo nano /etc/nginx/sites-available/mysite.loc
server {
    # слушать порт 80
    listen 80;

    charset utf-8;
    client_max_body_size 128M;
    sendfile off;

    # директория сайта
    root /home/roman/local-web-server/www/mysite.loc;
    # индексные файлы
    index       index.php;
    # домен сайта
    server_name mysite.loc www.mysite.loc;

    # в какой файл записываем серверные ошибки
    error_log   /home/roman/local-web-server/www/logs/mysite-error.log;

    #location / {
    #    try_files \$uri \$uri/ =404;
    #}
    location / {
        # Redirect everything that isn't a real file to index.php
        try_files $uri $uri/ /index.php$is_args$args;
    }


    #если хотите красивую страницу 404
    #error_page 404 /404.html;


    # deny accessing php files for the /assets directory
    location ~ ^/assets/.*\.php$ {
        deny all;
    }

    # PHP скрипты передаются на выполнение FastCGI серверу
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        # указываем какую версию php использует сайт
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        try_files $uri =404;
    }

    location ~* /\. {
        deny all;
    }

}

P.S. пр.кнопкой мыши->вставить

Сохранить Ctrl+O
Enter
Выйти Ctrl+X

Теперь нам нужно активировать созданный виртуальный хост nginx. Для этого создайте символическую ссылку:

sudo ln -s /etc/nginx/sites-available/mysite.loc  /etc/nginx/sites-enabled/mysite.loc

Затем в hosts виртуальной машины прописать (на реальной машине тоже самое!)

sudo nano /etc/hosts
127.0.0.1 mysite.loc

Затем выполните эту команду, чтобы убедится, что вы не допустили ошибок:

sudo nginx -t

Перезапустим php7.4-fpm

sudo service php7.4-fpm restart

Далее перечитайте конфигурацию nginx:

sudo nginx -s reload
sudo service nginx restart

В папку домена положим index.php с текстом:

phpinfo();

Проверяем на рабочей машине домен http://mysite.loc/

На этом настройка завершается. С одним но... Вместе с php у нас установился монструозный Apache! Если сейчас вы перезагрузите компьютер, то при попытке открыть сайт у вас будет выскакиеть страница Apache.

Удалим Apache

sudo apt-get purge apache2 apache2-utils apache2.2-bin
sudo apt-get autoremove

Надо проверить наличие конфигурационных файлов или мануалов, связанных с Apache2, но до сих пор не удаленных.

whereis apache2

Я в ответ получил такую строчку: apache2: /etc/apache2

Это значит, что директория /etc/apache2 все еще существует. Но раз теперь эта директория (и содержащиеся в ней файлы) никем не используется, удалите ее вручную.

sudo rm -rf /etc/apache2
sudo rm -rf /usr/sbin/apache2
sudo rm -rf /usr/lib/apache2
sudo rm -rf /usr/share/man/man8/apache2.8.gz

У вас установлен полноценный локальный веб сервер nginx!

Так же написал статью как настроить nginx для Opencart/OcStore

 

Сопутствующие статьи

Установка локального веб сервера на Windows — Open Server (OsPanel)
nginx домен для opencart ocstore