Установка nginx, php-fpm, mysql/mariadb, nodejs и Laravel в Ubuntu


Nginx

# установка пакета из репозитория Ubuntu
sudo apt install nginx

или устанавливаем из официального репозитория 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

или

# для установки последней версии 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 -v
PHP 8.1.11 (cli) (built: Sep 29 2022 22:28:49) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.11, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.11, 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

Первоначальная настройка mariadbmysql чуть-чуть отличается):

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.

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.1/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. Также файлы логов можно переместить на свой рабочий каталог.

26.04.2020

Прежде чем написать комментарий, нужно авторизаться на сайте