Данный топик служит моей заметкой для настройки 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