Установить сервер 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