Установка Magento2 на Ubuntu бывает трудной. Это руководство призвано упростить ее, какие бы приложения вы ни использовали.

Мы установим стабильную и по-прежнему очень актуальную версию Magento 2.3.7. Для версий новее приведем требования по типичным приложениям для работы с Magento 2. Если строго следовать этому руководству, успешная установка гарантирована.
В интернете большинство статей о Magento 2 ограничиваются лишь необходимыми для ее установки интерфейсами командной строки. А самое досадное в этих статьях — то, что страница Magento2 при нажатии на домен, поддомен или IP-адрес сервера не грузится и все ваши усилия умножаются на ноль.
Все технические аспекты установки важны и требуют внимания, но конфигурация сервера важнее.
Для успешной установки Magento 2 понадобятся: NGINX версии 1.8, MYSQL версии 5.7, PHP версии 7.4 и MAGENTO 2 версии 2.3.7.
Для версий Magento 2.4.0 и новее нужна MYSQL 8.0 и обязательна Elasticsearch.
Необходимые условия
- Ubuntu Server ≥ 18.04.
- SSH-доступ с правами root или права суперпользователя.
Как говорится, дорогу осилит идущий — приступим к установке.
Шаг 1. Обновление системы
Важно обновить локальный индекс пакета для выявления последних изменений:
$ sudo apt update && sudo apt upgrade
Шаг 2. Установка веб-сервера
Устанавливаем веб-сервер NGINX:
$ sudo apt install nginx
Задействуем текстовый редактор NANO. Подойдет любой другой, например VIM.
Создаем блок сервера для домена:
$ sudo nano /etc/nginx/sites-enabled/magento.conf
Вставляем в файл конфигурации это:
upstream fastcgi_backend {
server unix:/run/php/php7.4-fpm.sock;
}
server {
listen 80;
server_name yourdomain.com;
set $MAGE_ROOT /var/www/html/magento2;
include /var/www/html/magento2/nginx.conf.sample;
}
Сохраняем файл и выходим, нажимая Ctrl + O, Enter и Ctrl + X.
Шаг 3. Установка MySQL и создание базы данных для Magento 2
Устанавливаем MySQL:
$ sudo apt install mysql-server
Проверяем версию:
$ sudo mysql -V

Версия MySQL 5.7 или новее совместима с Magento 2.3.7.
Настроим доступ по паролю для учетной записи администратора MySQL. Важны базовая безопасность и культура сопровождения: нужно защитить БД паролями, сделав ее безопасной.
Запускаем следующую команду:
$ sudo mysql
SELECT user,authentication_string,plugin,host FROM mysql.user;

На изображении видно: к учетной записи администратора нет доступа по паролю. Включаем его MySQL-запросом:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_secure_password';
‘your_secure_password’ следует заменить на свой пароль.
Инициировано ли изменение в таблице пользователей MySQL, подтверждаем этим SQL-запросом:
SELECT user,authentication_string,plugin,host FROM mysql.user;

mysql_native_password в последней строке столбца plugin означает, что MySQL защищена паролем.
Выходим из базы данных:
exit
В MySQL создадим пользователя для Magento2. На этот раз войдем в систему как привилегированный пользователь с созданным ранее паролем. your_secure_password меняем на свой пароль:
$ mysql -u root -p
CREATE USER 'magento2'@'localhost' IDENTIFIED BY 'your_secure_password';
Создаем базу данных для Magento 2:
CREATE DATABASE magento2;
Предоставляем все привилегии пользователям Magento2:
GRANT ALL PRIVILEGES ON *.* TO 'magento2'@'localhost' WITH GRANT OPTION;
Выходим:
exit
Шаг 4. Установка PHP с требуемыми расширениями
Одно из упущений при установке PHP — забыть о расширениях для Magento 2. Вот типичные ошибки, которыми чревата неустановка необходимых расширений:


Такие ошибки — свидетельство проблем с расширениями PHP.
Чтобы исключить ошибки, в системе должны быть следующие зависимости:
$ sudo apt install software-properties-common apt-transport-https -y
Устанавливаем/импортируем PPA (персональные архивы пакетов) от ведущего разработчика PHP на Debian Ondřej Surý, который также специализируется на PPA Ubuntu. Они используются в версиях PHP 8.0, 8.1 и новее:
$ sudo add-apt-repository ppa:ondrej/php -y
После выполнения предыдущих команд обновляем apt-репозитории, поскольку добавление PPA чревато дополнительными обновлениями имеющихся зависимостей:
$ sudo apt update && sudo apt upgrade
Во избежание показанных выше ошибок устанавливаем PHP7.4 со всеми требуемыми расширениями:
$ sudo apt-get install php7.4-bcmath php7.4-common php7.4-curl php7.4-fpm php7.4-gd php7.4-intl php7.4-mbstring php7.4-mysql php7.4-soap php7.4-xml php7.4-xsl php7.4-zip
Настраиваем параметры PHP в соответствии с минимальными требованиями Magento 2:
$ sudo sed -i "s/memory_limit = .*/memory_limit = 768M/" /etc/php/7.4/fpm/php.ini
$ sudo sed -i "s/upload_max_filesize = .*/upload_max_filesize = 128M/" /etc/php/7.4/fpm/php.ini
$ sudo sed -i "s/zlib.output_compression = .*/zlib.output_compression = on/" /etc/php/7.4/fpm/php.ini
$ sudo sed -i "s/max_execution_time = .*/max_execution_time = 18000/" /etc/php/7.4/fpm/php.ini
Шаг 5. Установка Composer
Composer нужен для установки Magento 2.
Возвращаемся в корневой каталог:
$ cd ~
Загружаем и устанавливаем Composer:
$ curl -sS https://getcomposer.org/installer -o composer-setup.php
$ sudo php composer-setup.php --install-dir=/usr/bin --filename=composer
Проверяем версию:
$ composer

Composer установлен.
Шаг 6. Загрузка и установка Magento 2
Переходим в папку html:
$ cd /var/www/html
Загружаем Magento 2.3.7 с помощью Magento Open Source, создав новый проект Composer:
$ sudo composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition=2.3.7 magento2

Чтобы ввести имя пользователя и пароль, создаем на сайте учетную запись. Заходим в профиль, нажимаем create a new access key («Создать новый ключ доступа»):

Ключи доступа такие же, как на изображении: public key («Открытый ключ») — это имя пользователя, а private key («Закрытый ключ») — пароль.

У вас такая же картинка? Значит, все нормально.
К концу установки получите файлы Magento 2. Подтверждаем нахождение файла в текущем рабочем каталоге — в Linux это pwd — командой ls.
Задание разрешений для файлов
Без необходимых разрешений Magento 2 не установится:
$ cd /var/www/html/<the_directory_your_magento_was_installed>
$ sudo find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} +
$ sudo find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} +
$ sudo chown -R user_name:www-data .
$ sudo chmod u+x bin/magento
Ваш user_name — это имя пользователя с доступом с правами root. Оно проверяется запуском whoami.
Задав разрешения, установим Magento этой волшебной командой:
bin/magento setup:install \
--base-url=http://yourdomain.com \
--db-host=localhost \
--db-name=magento2 \
--db-user=magento2 \
--db-password=your_secure_password \
--admin-firstname=admin \
--admin-lastname=admin \
[email protected] \
--admin-user=admin \
--admin-password=admin123 \
--language=en_US \
--currency=USD \
--timezone=America/Chicago \
--use-rewrites=1
Если в db-password имеется цифра или специальный символ, обязательно заключаем их в кавычки. Например, 675Magento%$ в db-password записывается как “675Magento%$”.
После успешной установки отображается что-то вроде:

Обязательно сохраняем URL-адрес администратора, хотя есть способ восстановить его в случае утери. Но в этом руководстве о нем речи не пойдет.
В случае ошибки разрешения входим в MySQL с помощью команды mysql -u root -p и запросом GRANT ALL PRIVILEGES ON *.* TO ‘magento2’@’localhost’ WITH GRANT OPTION. Предоставляем привилегии всем пользователям magento2.
Если обошлось без неустраненных ошибок, поздравляем. Впереди последнее и самое важное, чего нет в большинстве онлайн-руководств: загрузка страницы Magento.
Чтобы сконфигурировать NGINX, возвращаемся к блоку сервера:
$ sudo nano /etc/nginx/sites-enabled/magento.conf
Редактируем его:
upstream fastcgi_backend {
server unix:/run/php/php7.4-fpm.sock;
}
server {
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
server_name <your_domain or sub_domain>.com;
listen 80;
set $MAGE_ROOT /var/www/html/magento2;
set $MAGE_MODE developer; # или production
access_log /var/log/nginx/magento2-access.log;
error_log /var/log/nginx/magento2-error.log;
include /var/www/html/magento2/nginx.conf.sample;
}
Запускаем:
$ sudo systemctl restart nginx
При такой конфигурации страница Magento отображается доменом/поддоменом так:

Чтобы попасть на страницу администратора, перейдите в ваш_домен или под_домен.com/url-адрес_администратора. URL-адрес администратора — тот, что мы сохранили после установки Magento2.
Вот эта идеально установленная страница:

Читайте также:
- 3 интерактивных инструмента для управления командами в Linux
- Что нового в Ubuntu 18.04
- Top 100 наиболее популярных репозиториев на GitHub
Читайте нас в Telegram, VK и Дзен
Перевод статьи Akinkunmi: The perfect way to install Magento 2 with SSL enabled on Ubuntu ≥ 18.04 [complete guide]