Найти в Дзене
Антон Шипулин

Установка Nginx+PHP-FPM и настройка Ubuntu 18.04 под Laravel

Данный топик служит моей заметкой для настройки Ubuntu Server 18.04, так как мне часто приходится это делать, по этому я выбрал такой набор пакетов, т.к. использую все их в своих проектах Что мы тут делаем? Установим следующие компоненты: Эта инструкция подойдёт и для версии 16.04, но нужно будет после каждой команды add-apt-repository выполнять sudo apt update В первую очередь нужно установить поддержку ru_RU.UTF-8 в системе dpkg-reconfigure locales Ищем в списке ru_RU.UTF-8 и ставим напротив галочку. Сохраняем нажатием на OK Так же требуется на самом сервере установить таймзону, я предпочитаю ставить UTC но вы можете поставить какую угодно timedatectl set-timezone UTC Обновление системы и установленных пакетов Далее обновляем репозиторий и все пакеты до последней версии sudo apt update && sudo apt -y full-upgrade Устанавливаем нужные в будущем пакеты sudo apt install -y software-properties-common apt-transport-https lsb-release ca-certificates supervisor curl htop mc git snapd Создан
Оглавление

Данный топик служит моей заметкой для настройки Ubuntu Server 18.04, так как мне часто приходится это делать, по этому я выбрал такой набор пакетов, т.к. использую все их в своих проектах

Что мы тут делаем?

Установим следующие компоненты:

  • Nginx (latest) на момент написания статьи была 1.16.1
  • PHP-FPM 8
  • MySQL 8 или PostgreSQL 11.6
  • а можете и обе базы поставить — вас никто не осудит 😉
  • NodeJS 14
  • Redis:latest на момент написания статьи была 5.0.6

Эта инструкция подойдёт и для версии 16.04, но нужно будет после каждой команды add-apt-repository выполнять sudo apt update

В первую очередь нужно установить поддержку ru_RU.UTF-8 в системе

dpkg-reconfigure locales

Ищем в списке ru_RU.UTF-8 и ставим напротив галочку. Сохраняем нажатием на OK

Так же требуется на самом сервере установить таймзону, я предпочитаю ставить UTC но вы можете поставить какую угодно

timedatectl set-timezone UTC

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

Далее обновляем репозиторий и все пакеты до последней версии

sudo apt update && sudo apt -y full-upgrade

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

sudo apt install -y software-properties-common apt-transport-https lsb-release ca-certificates supervisor curl htop mc git snapd

Создание и настройка пользователя

Создаём пользователя, из под которого будет запущен Nginx и PHP-FPM

useradd webuser -m -U -s /bin/bash

Устанавливаем ему пароль

passwd webuser

Так же создаём папки с нужными правами

sudo chmod 754 /home/webuser
sudo -u webuser -H mkdir -p /home/webuser/logs
sudo -u webuser -H mkdir -p -m 754 /home/webuser/public_html
sudo -u webuser -H mkdir -p -m 754 /home/webuser/public_html/public
sudo -u webuser -H mkdir -p -m 777 /home/webuser/tmp
sudo -u webuser -H chmod +t /home/webuser/tmp

Установка и настройка Nginx

Добавляет репозиторий стабильной версии Nginx

sudo add-apt-repository ppa:nginx/stable

Устанавливаем Nginx

sudo apt-get install -y nginx

Отредактируем стандартный конфиг виртуального хоста для нашего сайта

sudo nano /etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;

server_name your_domain.ru;

root /home/webuser/public_html/public;

add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";

index index.php;

charset utf-8;

access_log /home/webuser/logs/access.log;
error_log /home/webuser/logs/error.log;

location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }

error_page 404 /index.php;

location / {
try_files $uri $uri/ /index.php?$query_string;
}

location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param PHP_VALUE open_basedir="/home/webuser/:.";
fastcgi_param PHP_VALUE upload_tmp_dir="/home/webuser/tmp";
fastcgi_param PHP_VALUE session.save_path="/home/webuser/tmp";

include fastcgi_params;
}

location ~ /\.ht {
deny all;
}

location ~ /\.(?!well-known).* {
deny all;
}
}

За место your_domain.ru указываем свой домен

Уcтановка и настройка PHP 8.0

Добавим PPA репозиторий

sudo add-apt-repository ppa:ondrej/php

Устанавливаем PHP-FPM и нужные для Laravel расширения

sudo apt-get install -y php8.0-fpm php8.0-cli php8.0-dom php8.0-mysql php8.0-pgsql php8.0-mbstring php8.0-intl php8.0-gd php8.0-sybase php8.0-bz2 php8.0-curl php8.0-xml php8.0-common php8.0-zip

Изменим в конфигурации PHP-FPM пользователя на webuser
Меняем все www-data на webuser

sed -i 's/www-data/webuser/' /etc/php/8.0/fpm/pool.d/www.conf

Так же я предпочитаю менять пользователя в Nginx

sed -i 's/user www-data;/user webuser;/' /etc/nginx/nginx.conf

Устанавливаем Composer

curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

Установка и настройка MySQL 8

Загружаем инструмент конфигурации репозитория MySQL APT (более подробную информацию и более свежую версию можете посмотреть здесь: https://dev.mysql.com/downloads/repo/apt/)

wget https://dev.mysql.com/get/mysql-apt-config_0.8.14-1_all.deb

Запускаем и выбираем нужную версию MySQL

sudo dpkg -i mysql-apt-config_0.8.14-1_all.deb

Обновим список пакетов

sudo apt-get update

Устанавливаем

sudo apt-get install -y mysql-community-server

Во время установки нас попросят ввести пароль для root пользователя. Если вы выбрали 8 версию, вас ещё попросят выбрать метод шифрования паролей. Так как новый метод шифрования только ввели, некоторые приложения всё ещё его не поддерживают (по крайней мере я с этим сталкивался) и по этому я предпочитаю пока-что выбирать старый метод шифрования (legacy)

Установка и настройка PostgreSQL

Если вам нужен PostgreSQL, а не MySQL

apt-get install -y postgresql postgresql-contrib

Теперь нам нужно создать базу данных и пользователя

Подключаемся к базе данных

sudo -u postgres psql

Создаём базу данных

CREATE DATABASE ваше_название_базы_данных;

Создаём пользователя

CREATE USER ваш_пользователь_базы_данных WITH PASSWORD 'пароль_пользователя';

Установим кодировку

ALTER ROLE ваш_пользователь_базы_данных SET client_encoding TO 'utf8';

Установим таймзону. (Я обычно ставлю UTC, но вы ставьте нужную вам)

ALTER ROLE ваш_пользователь_базы_данных SET timezone TO 'UTC';

Даём пользователю полные права на базу данных

GRANT ALL PRIVILEGES ON DATABASE ваше_название_базы_данных TO ваш_пользователь_базы_данных;

База данных настроена, пользователь создан — можно пользоваться

Установка NodeJS 14

Настраиваем репозитории

curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -

Установим пакет

sudo apt-get install -y nodejs

Установка Redis

Добавим PPA репозиторий

sudo add-apt-repository ppa:chris-lea/redis-server

Установим пакет

sudo apt-get install -y redis-server

Перезагружаем сервисы

sudo /etc/init.d/php8.0-fpm restart
sudo /etc/init.d/nginx restart

Всё готово для установки и настройки Laravel