Установка nginx, php-fpm, mysql/mariadb, nodejs и Laravel в Ubuntu 24.04
Nginx
# установка пакета из репозитория Ubuntu
sudo apt install nginx
nginx -v
nginx version: nginx/1.24.0 (Ubuntu)
или устанавливаем из официального репозитория http://nginx.org/ru/linux_packages.html#Ubuntu
php-fpm
# установка пакетов из репозитория Ubuntu
sudo apt install php-fpm php-mysql php-mbstring php-xml php-curl php-gd php-zip
или
# для установки последней версии Ubuntu/Mint
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php-fpm php-mysql php-mbstring php-xml php-curl php-gd
PHP 8.3.13 (cli) (built: Oct 30 2024 11:28:41) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.13, Copyright (c) Zend Technologies
with Zend OPcache v8.3.13, Copyright (c), by Zend Technologies
База данных
MySQL
# установка из репозитория Ubuntu
sudo apt install mysql-server
MariaDB
# установка из репозитория Ubuntu
sudo apt install mariadb-server
или
https://downloads.mariadb.org/mariadb/repositories/
# Установка MariaDB 10.9
sudo apt install apt-transport-https curl
sudo curl -o /etc/apt/trusted.gpg.d/mariadb_release_signing_key.asc 'https://mariadb.org/mariadb_release_signing_key.asc'
sudo sh -c "echo 'deb https://mirror.docker.ru/mariadb/repo/10.9/ubuntu focal main' >>/etc/apt/sources.list"
sudo apt update
sudo apt install mariadb-server
mysql --version
mysql Ver 15.1 Distrib 10.9.3-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
Первоначальная настройка mariadb (в mysql чуть-чуть отличается):
sudo mysql_secure_installation
Switch to unix_socket authentication [Y/n] n
Change the root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
# создание пользователя для базы
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
CREATE DATABASE database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON database.* TO 'username'@'localhost';
Установка пароля root в MySQL
В MySQL с версии 5.7 пользователь root настроен на аутентификацию с использованием плагина auth_socket. Это затрудняет использование удобных скриптов вроде Adminer или phpMyAdmin. Для того чтобы изменить метод аутентификации к MySQL, нужно выполнить следующие команды:
# под root можно подключиться к MySQL
sudo mysql
# выбираем базу mysql
mysql> USE mysql;
# выводим список пользователей с методами аутентификаций
mysql> SELECT User, plugin FROM user;
# если root использует метод auth_socket, то меняем метод аутентификации и устанавливаем новый пароль
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'новый пароль';
# выполняем следующую команду, чтобы настройки вступили в силу
mysql> FLUSH PRIVILEGES;
# выходим
mysql> quit
nodejs
https://github.com/nodesource/distributions/blob/master/README.md#deb
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - && sudo apt-get install -y nodejs
Composer
Официальная документация Composer https://getcomposer.org/download/.
Простая установка:
# скачиваем скрипт
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# размещаем скрипт в директории /usr/bin под именем composer
sudo php composer-setup.php --install-dir=/usr/bin --filename=composer
composer -V
Composer version 2.8.3 2024-11-17 13:13:04
После этого в любой директории можно выполнить команду composer.
Laravel
# создание проекта Laravel в текущей папке
composer create-project --prefer-dist laravel/laravel laravel.test
создание виртуального хоста laravel.test
Создание файла /etc/nginx/conf.d/laravel.conf
server {
listen 80;
server_name laravel.test;
root /home/path/to/folder/public;
access_log /path/to/folder/laravel.test/access.log;
error_log /path/to/folder/laravel.test/error.log;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
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 ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
# добавление домена в /etc/hosts
127.0.0.1 localhost laravel.test
Права доступа
По умолчанию php-fpm запускается от имени www-data, а nginx от имени nginx. Если вы работаете под пользователем myname, то можно настроить следующим образом.
В файле /etc/nginx/nginx.conf
# замените эту строку
user nginx;
# на эту
user myname;
В файле /etc/php/8.3/fpm/pool.d/www.conf
user = www-data
group = www-data
listen.owner = www-data
listen.group = www-data
# нужно заменить
user = myname
group = myname
listen.owner = myname
listen.group = myname
Потом перезагружаем php-fpm и nginx. Версия php-fpm скорее всего не будет совпадать. Поэтому замените версию на правильную (например, php8.2-fpm или php8.3-fpm).
systemctl restart php8.1-fpm
systemctl restart nginx
После этого веб-сервер будут работать от имени myname. Также файлы логов можно переместить на свой рабочий каталог.