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

Основные цели
- Установить 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 elasticsearchElasticsearch потребляет память. Ограничьте его через 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/
Проверьте работу формы Contact Us и получение писем.





Шаг 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 завершена. Вы получили работающий магазин с 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: убедитесь, что механизмы экспорта/удаления персональных данных активированы и протестированы.
Мини‑методология после установки
- Проверка доступности сайта и админки.
- Тестирование отправки почты (контактная форма).
- Тест поиска и отображения товаров.
- Проверка логов на предмет ошибок.
- Настройка резервного копирования и мониторинга.
Технический чек-лист безопасности
- Отключить ненужные модули 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 в формате чек-листа для вашей команды, оставьте запрос.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента