Гид по технологиям

Установка Magento 2.4 на Debian 12 с Nginx, Elasticsearch и Redis

• 7 min read • DevOps • Обновлено 21 Nov 2025
Установка Magento на Debian 12 с Nginx и Elasticsearch
Установка Magento на Debian 12 с Nginx и Elasticsearch

Иллюстрация Magento: логотип или схема архитектуры магазина

Основные цели

  • Установить Magento Open Source (Community Edition) на Debian 12.
  • Использовать Nginx как веб‑сервер и PHP‑FPM для выполнения PHP.
  • Подключить Elasticsearch для поиска по каталогу и Redis для сессий и кэша.
  • Настроить SSL через Certbot и обеспечить базовую безопасность.

Предварительные требования

  • Сервер с Debian 12, минимум 2 ГБ ОЗУ (рекомендовано 4 ГБ и более для комфортной работы в продакшене). Память зависит от размеров каталога и трафика.
  • Пользователь с sudo‑правами (не root).
  • Полное доменное имя (FQDN) для сервера, например magento.example.com.
  • Система обновлена:
$ sudo apt update
$ sudo apt upgrade
  • Установите базовый набор утилит:
$ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring unzip -y

Некоторые пакеты возможно уже установлены.

Шаг 1 — Настройка брандмауэра

Debian поставляется с ufw (Uncomplicated Firewall). Проверьте статус:

$ sudo ufw status

Если активен, откройте HTTP и HTTPS:

$ sudo ufw allow http
$ sudo ufw allow https

Проверьте ещё раз:

$ sudo ufw status

Ожидаемый вывод показывает разрешения для SSH, 80 и 443.

Шаг 2 — Установка PHP и расширений

Debian 12 содержит PHP 8.2 по умолчанию. Для Magento требуются определённые расширения. Установите их:

$ sudo apt install php-fpm php-cli php-mysql php-mbstring php-xml php-gd php-bcmath php-zip php-curl php-tidy php-intl php-soap php-xsl libsodium-dev libsodium23 libssl-dev libcurl4-openssl-dev

Если хотите поддерживать несколько версий PHP или получать обновления через сообщество, добавьте репозиторий Ondřej Surý:

$ sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
$ sudo apt update

Установите конкретные пакеты PHP 8.2:

$ sudo apt install php8.2-fpm php8.2-mysql php8.2-bcmath php8.2-xml php8.2-zip php8.2-curl php8.2-mbstring php8.2-gd php8.2-tidy php8.2-intl php8.2-cli php8.2-soap php8.2-xsl libsodium-dev libsodium23 libssl-dev libcurl4-openssl-dev

Проверьте версию PHP:

$ php --version
PHP 8.2.x (cli)

Шаг 3 — Установка Composer

Composer — менеджер зависимостей для PHP. Magento требует Composer 2.2 LTS. Скачать и установить:

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php composer-setup.php --2.2
$ php -r "unlink('composer-setup.php');"
$ sudo mv composer.phar /usr/local/bin/composer
$ composer --version

Шаг 4 — Установка MariaDB

Debian 12 поставляется с MariaDB. Установите сервер:

$ sudo apt install mariadb-server

Проверьте версию:

$ mysql --version

Запустите скрипт безопасной настройки:

$ sudo mysql_secure_installation

Рекомендуется удалить анонимных пользователей, запретить удалённый вход root, удалить тестовую базу и перезагрузить таблицы привилегий.

Шаг 5 — Конфигурация MariaDB

Войдите в MariaDB:

$ sudo mysql

Создайте базу данных и пользователя для Magento:

mysql> CREATE DATABASE magento;
mysql> CREATE USER 'magentouser'@'localhost' IDENTIFIED BY 'Your_password2';
mysql> GRANT ALL PRIVILEGES ON magento.* TO 'magentouser'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> exit

Создайте отдельного административного пользователя при необходимости, используйте надёжные пароли.

Шаг 6 — Установка Nginx

Чтобы получить актуальную версию Nginx используйте официальный репозиторий:

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
$ sudo apt update
$ sudo apt install nginx
$ sudo nginx -v
$ sudo systemctl start nginx

Проверьте статус службы:

$ sudo systemctl status nginx

Шаг 7 — Установка SSL

Рекомендуется использовать Certbot для получения бесплатного сертификата Let’s Encrypt. Установим Certbot через snapd:

$ sudo apt install snapd
$ sudo snap install core && sudo snap refresh core
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
$ certbot --version

Создаём сертификат для домена:

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d magento.example.com

Сертификат будет сохранён в /etc/letsencrypt/live/magento.example.com. Также создайте Diffie‑Hellman параметры:

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Проверьте автопродление:

$ sudo certbot renew --dry-run

Шаг 8 — Установка Elasticsearch

Magento использует Elasticsearch для поиска. Устанавливаем совместимую ветку 7.x:

$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
$ echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
$ sudo apt update
$ sudo apt install elasticsearch

Elasticsearch потребляет память. Ограничьте его через JVM опции:

$ sudo nano /etc/elasticsearch/jvm.options.d/memory.options

Вставьте, например:

-Xms512m
-Xmx784m

Затем включите сервис:

$ sudo systemctl enable elasticsearch --now
$ curl http://localhost:9200

Ожидается JSON с информацией о кластерe.

Шаг 9 — Установка Redis

Redis используется для кэша и сессий. Для Magento 2.4 требуется Redis 7.x; добавим официальный репозиторий:

$ curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
$ echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
$ sudo apt update
$ sudo apt install redis
$ redis-server -v

Войдите в cli и задайте пароль для default пользователя:

$ redis-cli
127.0.0.1:6379> acl setuser default >Your_Redis_Password
127.0.0.1:6379> AUTH Your_Redis_Password
OK
127.0.0.1:6379> ping
PONG

Запомните пароль и при необходимости настройте bind и requirepass в /etc/redis/redis.conf при доступе извне.

Шаг 10 — Загрузка Magento

Создайте корневую директорию сайта и назначьте владельца:

$ sudo mkdir /var/www/magento -p
$ sudo chown $USER:$USER /var/www/magento/ -R
$ cd /var/www/magento

Получите ключи доступа к репозиторию Magento через https://account.magento.com/ (Sign in with Adobe ID), в разделе Access Keys создайте ключи и сохраните public и private.

Создайте файл ~/.config/composer/auth.json с учётными данными:

{
"http-basic": {
        "repo.magento.com": {
                   "username": "",
                   "password": ""
              }
}
}

Скачайте проект Magento (обратите внимание на точку в конце команды):

$ composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition .

После установки исправьте пример конфигурации Nginx, если необходимо:

$ sed -i 's/php-fpm:9000/fastcgi_backend/g' /var/www/magento/nginx.conf.sample

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

$ 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 :nginx .
$ sudo chmod u+x bin/magento

Шаг 11 — Установка Magento

Magento официально поддерживает MariaDB 10.2–10.6, но если у вас более новая версия, измените проверку версий в di.xml:

$ sudo nano /var/www/magento/app/etc/di.xml

Замените строку:

^10\.[2-6]\.

на

^10\.([2-9]|10|11)\.

Запустите установщик Magento, подставив свои значения:

$ bin/magento setup:install \
--base-url=http://magento.example.com \
--use-secure=1 \
--base-url-secure=https://magento.example.com \
--use-secure-admin=1 \
--db-host=localhost \
--db-name=magento \
--db-user=magentouser \
--db-password=Your_password2 \
--admin-firstname=Admin \
--admin-lastname=User \
--admin-email=[email protected] \
--admin-user=admin \
--admin-password=admin_password \
--language=en_US \
--currency=USD \
--timezone=America/Chicago \
--use-rewrites=1 \
--elasticsearch-host=http://127.0.0.1 \
--elasticsearch-port=9200 \
--session-save=redis \
--session-save-redis-db=0 \
--session-save-redis-password=redis_password \
--cache-backend=redis \
--cache-backend-redis-db=2 \
--cache-backend-redis-password=redis_password \
--page-cache=redis \
--page-cache-redis-db=4 \
--page-cache-redis-password=redis_password

После успешной установки вы увидите уведомление о завершении и URI административной панели. Создайте cron‑задачи Magento:

$ php bin/magento cron:install
$ crontab -l

Шаг 12 — Настройка PHP-FPM

Откройте пул PHP-FPM:

$ sudo nano /etc/php/8.2/fpm/pool.d/www.conf

Установите пользователя и группу в nginx:

user = nginx
group = nginx
listen.owner = nginx
listen.group = nginx

Увеличьте таймауты и лимиты:

$ sudo sed -i 's/max_execution_time = 30/max_execution_time = 180/' /etc/php/8.2/fpm/php.ini
$ sudo sed -i 's/max_execution_time = 30/max_execution_time = 180/' /etc/php/8.2/cli/php.ini
$ sudo sed -i 's/memory_limit = 128M/memory_limit = 256M/' /etc/php/8.2/fpm/php.ini
$ sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 25M/g' /etc/php/8.2/fpm/php.ini
$ sudo sed -i 's/post_max_size = 8M/post_max_size = 25M/g' /etc/php/8.2/fpm/php.ini
$ sudo sed -i 's/zlib.output_compression = Off/zlib.output_compression = On/g' /etc/php/8.2/fpm/php.ini
$ sudo systemctl restart php8.2-fpm
$ sudo chgrp -R nginx /var/lib/php/sessions

Шаг 13 — Настройка Nginx

В /etc/nginx/nginx.conf добавьте перед include:

server_names_hash_bucket_size  64;

Создайте конфигурацию /etc/nginx/conf.d/magento.conf:

upstream fastcgi_backend {
  server  unix:/run/php/php8.2-fpm.sock;
}

server {
  listen 80;
  listen [::]:80;
  server_name magento.example.com;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name magento.example.com;

  set $MAGE_ROOT /var/www/magento;
  include /var/www/magento/nginx.conf.sample;
  client_max_body_size 25m;

  access_log /var/log/nginx/magento.access.log;
  error_log  /var/log/nginx/magento.error.log;

  ssl_certificate /etc/letsencrypt/live/magento.example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/magento.example.com/privkey.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/magento.example.com/chain.pem;
  ssl_protocols TLSv1.2 TLSv1.3;

  ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:50m;
  ssl_session_timeout 1d;

  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;
}

Проверьте конфигурацию и перезапустите Nginx:

$ sudo nginx -t
$ sudo systemctl restart nginx

Откройте https://magento.example.com и при необходимости выполните развертывание статического контента:

$ cd /var/www/magento
$ php bin/magento setup:static-content:deploy -f
$ php bin/magento indexer:reindex

Шаг 14 — Отключение двухфакторной аутентификации перед доступом

Если почтовый транспорт не настроен, административный вход может быть недоступен из-за двухфакторной аутентификации (2FA). Отключите модули 2FA временно:

$ php /var/www/magento/bin/magento module:disable Magento_AdminAdobeImsTwoFactorAuth
$ php /var/www/magento/bin/magento module:disable Magento_TwoFactorAuth
$ php /var/www/magento/bin/magento setup:di:compile
$ php /var/www/magento/bin/magento c:c

Если у вас настроен sendmail или SMTP — этот шаг можно пропустить.

Шаг 15 — Доступ в панель администратора

Получите URI админки, если забыли:

$ php /var/www/magento/bin/magento info:adminuri

Откройте https://magento.example.com/ и войдите под админом. После входа настройте SMTP для отправки писем (Stores → Configuration → Advanced → System → Mail Sending Settings) и укажите SMTP‑провайдера (например Amazon SES). Затем настройте адреса отправителя в Store Email Addresses и Contacts.

Проверьте работу формы Contact Us и получение писем.

Страница входа Adobe ID

Страница входа Adobe для Magento

Профиль Adobe Magento с разделом Access Keys

Создание ключей доступа Magento

Главная страница Magento после установки

Шаг 16 — Включение двухфакторной аутентификации

После настройки SMTP включите двафакторную аутентификацию обратно:

$ php /var/www/magento/bin/magento module:enable Magento_AdminAdobeImsTwoFactorAuth
$ php /var/www/magento/bin/magento module:enable Magento_TwoFactorAuth
$ php /var/www/magento/bin/magento setup:upgrade
$ php /var/www/magento/bin/magento setup:di:compile
$ php /var/www/magento/bin/magento c:c

При проблемах с доступом выполните деплой статического контента и проверьте права:

$ php /var/www/magento/bin/magento setup:static-content:Deploy -f
$ cd /var/www/magento
$ 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 :nginx .

Страница входа в админку Magento

Панель администратора Magento

Конфигурация почты Magento для Amazon SES

Настройки отправителя почты магазина

Настройки Contact Us

Пример тестового письма Magento

Настройка двухфакторной аутентификации

Выбор Google Authenticator для 2FA

Заключение

Установка Magento завершена. Вы получили работающий магазин с HTTPS, поиском через Elasticsearch и быстрой сессией через Redis. В админке настроены почта и 2FA.


Практические дополнения и рекомендации

Критерии приёмки

  • Сайт доступен по HTTPS и редирект с HTTP работает.
  • Админка доступна по защищённому URI и защищена 2FA.
  • Поиск по товарам работает (Elasticsearch отвечает и возвращает результаты).
  • Сессии и кэш корректно сохраняются в Redis (проверить чтение/запись).
  • Cron‑задачи Magento выполняются каждую минуту.
  • Автопродление Certbot работает без ошибок.

Чек-листы по ролям

Администратор платформы:

  • Проверить доступность https://magento.example.com
  • Убедиться в наличии SSL сертификата и валидности цепочки
  • Проверить логи Nginx и PHP на ошибки

Системный администратор:

  • Настроить резервное копирование базы и файлов
  • Настроить мониторинг использования памяти/CPU (особенно Elasticsearch)
  • Настроить правила ufw и ограничить доступ к базе/Redis

Разработчик:

  • Настроить режим разработчика, если требуется (bin/magento deploy:mode:set developer)
  • Проверить корректность прав доступа
  • Убедиться что composer и php‑cli работают с нужной версией

Типичные ошибки и способы их устранения

Ошибка: CSS и JS не загружаются на фронтенде

  • Решение: выполнить развертывание статики и реиндекс
$ cd /var/www/magento
$ php bin/magento setup:static-content:deploy -f
$ php bin/magento indexer:reindex
$ php bin/magento c:c

Ошибка: Админка возвращает 500

  • Проверьте логи /var/log/nginx/, var/log/ Magento и /var/log/php8.2-fpm.log
  • Убедитесь, что права на файлы и владельцы установлены корректно (nginx)

Ошибка: Elasticsearch не отвечает

  • Проверьте службу: sudo systemctl status elasticsearch
  • Проверьте настройки JVM heap в /etc/elasticsearch/jvm.options.d/memory.options
  • Убедитесь, что порт 9200 открыт только локально или защищён

Ошибка: Redis не принимает подключение

  • Убедитесь в пароле и настройках bind/requirepass в /etc/redis/redis.conf
  • Проверьте, что Redis запускается под пользователем, который может слушать порт

Когда эта инструкция не подойдёт

  • Если вы планируете масштабировать кластер Elasticsearch для большой нагрузки — понадобится отдельное руководство по кластеризации и резервированию данных.
  • Для редакций Adobe Commerce (платная версия) могут потребоваться дополнительные модули и лицензии.

Альтернативные подходы

  • Использовать Apache вместо Nginx, если предпочтителен модульный стек LAMP.
  • Размещение в контейнерах (Docker, Kubernetes) для изоляции сервисов и упрощения масштабирования.
  • Использовать управляемые сервисы: Amazon RDS (база), Elastic Cloud (Elasticsearch), Amazon ElastiCache (Redis) для упрощения эксплуатации.

Безопасность и соответствие требованиям конфиденциальности

  • Ограничьте доступ к MariaDB и Redis только с тех хостов, которым это действительно необходимо.
  • Используйте TLS для подключения к внешним сервисам и почтовым серверам.
  • Регулярно обновляйте систему и установленные пакеты. Применяйте патчи Magento.
  • Для соответствия GDPR: убедитесь, что механизмы экспорта/удаления персональных данных активированы и протестированы.

Мини‑методология после установки

  1. Проверка доступности сайта и админки.
  2. Тестирование отправки почты (контактная форма).
  3. Тест поиска и отображения товаров.
  4. Проверка логов на предмет ошибок.
  5. Настройка резервного копирования и мониторинга.

Технический чек-лист безопасности

  • Отключить ненужные модули Magento.
  • Настроить Content Security Policy если используются дополнительные виджеты.
  • Регулярно менять пароли админов и ключи доступа.
  • Включить WAF (например, ModSecurity или облачный WAF) на маршруте трафика.

Критерии готовности к продакшену

  • Наличие резервного копирования базы и файлов (ежедневно и по требованию).
  • Наличие мониторинга (память, CPU, диск, доступность сервисов).
  • План отката и тест восстановления из бэкапа.
  • Наличие плана обновления Magento и зависимостей.

Краткая проверочная таблица (SOP)

  • Обновления системы: sudo apt update && sudo apt upgrade
  • Проверить службы: nginx, php8.2-fpm, mariadb, elasticsearch, redis
  • Проверить автопродление сертификатов: sudo certbot renew –dry-run
  • Проверить cron Magento: crontab -l

Рекомендации по масштабированию

  • Для магазинов среднего и крупного размера выделяйте отдельные VM/инстансы для Elasticsearch и базы данных.
  • Используйте репликацию MariaDB и шардирование для больших баз.
  • Кэшируйте страницы на уровне CDN для снижения нагрузки на сервер.

Резюме

  • Следуя этому руководству, вы развернёте рабочую инстанцию Magento на Debian 12 с Nginx, Elasticsearch и Redis.
  • Проверьте все шаги по чек-листам и настройте мониторинг и резервное копирование перед запуском в продакшен.

Если остались вопросы или хотите получить SOP в формате чек-листа для вашей команды, оставьте запрос.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро