Установка Magento 2 на Ubuntu 18.04 LTS
Начинаем новый коммерческий проект, Казахстанский интернет магазин строительных товаров. Знаю, знаю их уже много. Но погодите нас хоронить заранее, во первых у нас большой опыт по привлечению органического трафика, во вторых у нас будет фишка, о которой расскажу немного позже.
Магазин будет работать в режиме Multistore, то есть мы будем давать возможность размещать товар третьим лицам под своим брендом. CMS-ок под эти нужды в принципе хватает, но после сбора информации, было принято решение использовать Magento 2 Open Source. Возможно TCO (совокупная стоимость владения) в будущем нам будет выходить в копеечку, так как продукт на платной поддержке достаточно дорогой. Но зато он бесплатный на старте и это сейчас более важно, нам нужно сначала пощупать рынок и уже потом будет ясно на сколько мы оказались правы.
Выбираем хостинг для проекта
Не хотелось брать VPS в чистом виде, проект быстро начнет требовать дополнительных ресурсов и легко добавить мощностей можно только если используешь новый тип провайдеров IaaS. Вначале думал купим у Oblako.kz но потом вспомнил про Сloud24.kz, этих ребят знаю очень давно, они хоть и зануды но свою работу знают. Да и хотелось пощупать решение на базе Windows Azure развернутого в Казахстане. В общем попросили счет, оплатили и нам дали доступ в портал.
Интерфейс очень простой и понятный, легко создаем виртуальную машину, назначаем ей сеть которая будет создана по умолчанию и через две минуты сервер готов. На сервер можно попасть через RDP консоль, скачиваете файл и запускаете, это типо аналог VNC на других панелях. Но мне этот способ не подходит, у меня Linux на ноутбуке и мне противопоказано касаться RDP ))
Просто зашел в сети, в правила и создал PAT с внешнего IP адреса на внутренний интерфейс сети. Очень легко, мимо не нажмешь и мне такое решение очень понравилось. Обычно лень парится с OpenTable на самом сервере и часто после всяких настроек сервер смотрит голым задом в мир. А тут удобно, посмотрел, надо закрыл, надо открыл. SSH обязательно закрою, так как настройки закончены и для безопасности лучше закрыть доступ из вне.
Заходим на сервер и начинаем настраивать окружение
Если почитать официальную документацию, так там так все просто, чуть ли не в два клика ставится. Но на практике самая заморочка это с PHP модулями, которые вынесли мне мозги, пока нашел какие подходят и откуда их ставить. Вам же достаточно просто следовать следующим пунктам:
1 — Устанавливаем Apache2
Естественно нам нужен Web сервер, буду использовать apache2 по старинке, кто хочет можете использовать nginx.
sudo apt-get install apache2
sudo sed -i «s/Options Indexes FollowSymLinks/Options FollowSymLinks/» /etc/apache2/apache2.conf
Можно проверить открыв сайт по IP или доменному имени и увидеть стандартную страницу. В моем случае доменное имя уже давно было привязано к IP адресу.
2 — Устанавливаем MariaDB
Можно использовать MySQL, но во время изучения информации, наткнулся на рекомендации бывалых использовать именно MariaDB.
sudo apt-get install mariadb-server mariadb-client
Производим настройки. Ставим пароль на root БД, удаляем анонимных пользователей, в общем жмем везде Y
sudo mysql_secure_installation
service mariadb restart
3 — Устанавливаем PHP 7.1 и нужные модули
В официальном репозитории Ubuntu нет нужных модулей для PHP 7.1, необходимо подключить дополнительный.
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
Ну и собственно вот она солянка, которая нужна для работы CMS Magento 2
sudo apt-get install php7.1 php7.1-common php7.1-mbstring php7.1-xmlrpc php7.1-soap php7.1-gd php7.1-xml php7.1-intl php7.1-mysql php7.1-cli php7.1-mcrypt php7.1-ldap php7.1-zip php7.1-curl
Почему то в сборе у меня не устанавливался этот модуль, ставим отдельно.
sudo apt-get install php7.1-bcmath
4 — Создаем базу данных и пользователя
Тут просто вставляйте свои названия (выделено красным).
sudo mysql -u root -p
Создаем базу
CREATE DATABASE magento;
Создаем пользователя
CREATE USER ‘magentouser‘@’localhost’ IDENTIFIED BY ‘new_password‘;
Добавляем привилегии
GRANT ALL ON magento.* TO ‘magentouser’@’localhost’ IDENTIFIED BY ‘user_password‘ WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;
5 — Скачиваем Magento
Переходим по ссылке регистрируемся (это бесплатно, можно писать, что угодно). Не рекомендую ставить с демо контентом. Там такая жесть. Может позже когда будет понятно, что это за зверь, можно будет попробовать разобраться или поднять параллельно для тестов. Как скачать сразу на сервер, не понял, поэтому скачал на компьютер и потом уже закачал на сервер.
Распаковываем архив в нужной нам папке, в моем случае это каталог по умолчанию (/var/www/html). Качал в формате tar.gz и команда распаковки следующая:
sudo tar zxf (название архива)
Обновляем права на каталог для пользователя виртуального хоста.
sudo chown -R www-data:www-data /var/www/html/magento
sudo chmod -R 755 /var/www/html/magento
6 — Настраиваем Apache2
Все как для обычного сайта, создаем конфиг и вносим нужные нам параметры.
sudo nano /etc/apache2/sites-available/mysite.conf
<VirtualHost *:80>
ServerAdmin admin@mysite.com
DocumentRoot /var/www/html/
ServerName mysite.com
ServerAlias www.mysite.com
<Directory /var/www/html/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Включаем сайт
sudo a2ensite mysite.conf
sudo a2enmod rewrite
Сразу немного изменяем файл конфига php.ini для того, что бы наша прожорливая Magento не умерла от нехватки ОЗУ. Кстати сервер на старте нужно с не менее 2 GB на борту.
sudo nano /etc/php/7.1/apache2/php.ini
Нужно изменить этот параметр, добавив туда побольше ОЗУ. В моем случае поставил сразу 2GB.
memory_limit = 2GB
Вообще в официальной документации описаны гору параметров которые нужно изменить или добавить. Но для старта пока достаточно просто этого, дальше будет видно.
Рестартим Apache
service apache2 restart
Если зайти через браузер по IP адресу или доменному имени, добавив в конце setup, то откроется страница проверки Magento Пример: mysite.com/setup
Нажимаете проверку и смотрите, все ли готова к запуску Magento, если все сделали как в инструкции, то должно быть все хорошо.
Как пройти установку описывать не буду, там все легко, вбиваем базу данных, пользователя, пароль, потом название сайта, админа создаете, страницу входа. После чего Magento установится и можно пользоваться.
Немного тюнинга
Если есть бесплатные сертификаты, почему не воспользоваться, ставим бесплатный SSL сертификат по этой инструкции.
Обязательно закрываем сайт от индексации, ведь сайт пока не готов, и не стоит отправлять на индексацию не готовый сайт. Нам же нужно будет привлекать трафик с помощью SEO. Закрыть индексацию легко, создаем файл robots.txt и кидаем его в корень сайта. Содержание файла следующее:
User-Agent:*
Disallow: /
Когда зайдете в саму панель управления Magento, могут появиться следующие надписи:
One or more indexers are invalid. Make sure your Magento cron job is running
Лечится так, заходите в корень сайта и вводите такую команду:
php bin/magento indexer:reindex
Configuration, Page Cache. Please go to Cache Management and refresh cache types. how can i resolve
Лечится прямо в панели управления так:
Вкладка System > cache management > cнажать на Flush magento cache
Заключение!
Смотришь на инструкцию и кажется плевое дело, но пока все это сделал, сломал сервер не менее 10 раз, повторюсь с PHP модулями и совместимостью версий были проблемы. В этом вопросе очень рад, что выбрал именно Сloud24.kz, у них есть классная штука в панели управления, называется «контрольная точка». Работает очень легко, выключаете сервер и делаете контрольную точку, например в моем случае это было все установлено кроме PHP назвал точку new-vm
Потом спокойно ставил модули, экспериментировал, когда все вставало в наклон, просто выключал сервер восстанавливал с контрольной точки и снова запускал сервер в то место, где он еще живой ))
Дальше когда уже все проверки прошли, сделал еще одну контрольную точку и поэкспериментировал с версиями Magento. Точку назвал start-setup-magento
После того, как проверил Magento с демо контентом, понял какой это ужас, откатился назад и поставил обычную пустую CMS, без необходимости очищать сервер от ненужного мусора.
Так обычные VPS провайдеры вам не смогут дать сделать. Все эти вкусняшки есть у провайдеров IaaS нового поколения!
****** БАГИ ******
Bug#001
Попытался создать «Продукт» вылезла ошибка:
There has been an error processing your request, Magento exception printing is disabled by default for security reasons
Заходим в корневой каталог Сайта и выполняем:
rm -rf generated/*