Magento2インストール手順[バージョン:2.4.5](Debian10)
イントロダクション
2022年8月にMagento2のバージョン2.4.5がリリースされました。
このMagento2.4.5をDebian10にインストールする手順をご紹介します。
Magento2は下記のようなミドルウェアの構成環境で動作します。各Magentoバージョンのシステム構成要件については公式Documento Adobe公式インストールガイド:必要システム構成 で確認できます。
本記事では下記のように1つのサーバーに必要なミドルウェア全部載せの構成とします。実際の公開環境を考えるとサーバーを分けたり、SSL環境(HTTPS通信)、WAF設定等をすべきですが、ここでは手順説明を簡略化するために、1台サーバー、HTTPアクセス環境をゴールとしています。
なお、本記事の手順に関して下記のAdobe公式インストールガイドを参考にしています。
- [Adobe Commerce Developer Guide]Installation Guide/Quick start install
- [Adobe Commerce Developer Guide]Installation Guide/Prerequisites/Apache
- [Adobe Commerce Developer Guide]Installation Guide/Prerequisites/PHP
ミドルウェアのセットアップ
Apache2.4
Apache2.4をインストール
$ sudo apt update
$ sudo apt install apache2
確認
$ sudo apache2 -v
Server version: Apache/2.4.38 (Debian)
Server built: 2021-12-21T16:50:43
(※)上記操作で既にApacheは起動しており、またOS起動時の自動起動serviceも有効になっています。
Apache必要モジュールを有効化します。
公式ドキュメントに下記Apacheモジュールを有効化するように記載があります。
- mod_deflate.c
- mod_expires.c
- mod_headers.c
- mod_rewrite.c
- mod_security.c
- mod_ssl.c
DebianのApacheモジュール管理の作法に従って有効化
(※)"mod_security.c"についてはApacheのWAF(Web Application Firewall)動作に関する部分であり構成により設定が変わる部分なので今回の記事では省略します。
$ sudo a2enmod deflate
$ sudo a2enmod expires
$ sudo a2enmod headers
$ sudo a2enmod rewrite
$ sudo a2enmod ssl
モジュールの有効可否の設定変更したので最後にApacheを再起動しておきます。
$ sudo systemctl restart apache2.service
MariaDB 10.4
依存パッケージインストール
$ sudo apt install -y software-properties-common dirmngr apt-transport-https wget curl
MariaDB 10.4 をインストール
$ cd /tmp
$ wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
$ echo "733cf126b03f73050e242102592658913d10829a5bf056ab77e7f864b3f8de1f mariadb_repo_setup" \
| sha256sum -c -
$ chmod +x mariadb_repo_setup
$ sudo ./mariadb_repo_setup --mariadb-server-version="mariadb-10.4"
$ sudo apt update
$ sudo apt install -y mariadb-server mariadb-client
参考:mariadb.com:debian10 new version install
MariaDB初期セットアップ
$ sudo mysql_secure_installation
セットアップに関していくつか質問されるので適宜入力
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.
You already have your root account protected, so you can safely answer 'n'.
Switch to unix_socket authentication [Y/n] n
... skipping.
You already have your root account protected, so you can safely answer 'n'.
Change the root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] Y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] Y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] Y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
(※)上記操作で既にMariaDBは起動しており、またOS起動時の自動起動serviceも有効になっています。
確認
$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 44
Server version: 10.4.26-MariaDB-1:10.4.26+maria~deb10-log mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> quit
Bye
PHP8.1
依存パッケージをインストール
$ sudo apt install -y lsb-release ca-certificates apt-transport-https software-properties-common gnupg2
リポジトリ追加
$ echo "deb https://packages.sury.org/php/ buster main" | sudo tee /etc/apt/sources.list.d/sury-php.list
GPGキーを追加
$ wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -
PHPパッケージのインストール
$sudo apt update
$sudo apt install php8.1
確認
$ php -v
PHP 8.1.9 (cli) (built: Aug 15 2022 09:50:29) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.9, Copyright (c) Zend Technologies
with Zend OPcache v8.1.9, Copyright (c), by Zend Technologies
Magento2で要求されるPHPモジュールのインストール
$ sudo apt install php8.1-{bcmath,curl,dom,gd,intl,mbstring,soap,xsl,zip}
php.ini の設定変更
公式インストールガイドに従い、 memory_limit, realpath_cache_size, realpath_cache_ttl の値を変更します。
$ sudo vi /etc/php/8.1/apache2/php.ini
・変更箇所: memory_limit
memory_limit = 128
↓
memory_limit = 2G
・変更箇所: realpath_cache_size
;realpath_cache_size = 4096k
↓
realpath_cache_size = 10M
・変更箇所: realpath_cache_ttl
;realpath_cache_ttl = 120
↓
realpath_cache_ttl = 7200
Elasticsearch7.17
参考: elastic.co:Install Elasticsearch with Debian Package
依存パッケージをインストール
$ sudo apt-get install apt-transport-https
GPGキーをダウンロードしてインストール
$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
Elasticsearch7パッケージリポジトリを追加
$ 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
Elasticsearch7パッケージのインストール
$ sudo apt-get update
$ sudo apt-get install elasticsearch
Elasticsearchの起動とOS起動時のservice有効化
$ sudo systemctl start elasticsearch.service
$ sudo systemctl enable elasticsearch.service
確認
$ curl -s -XGET http://localhost:9200/
{
"name" : "ip-172-31-48-8",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "INEDPOlKR0ORmckMov2yDg",
"version" : {
"number" : "7.17.6",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "f65e9d338dc1d07b642e14a27f338990148ee5b6",
"build_date" : "2022-08-23T11:08:48.893373482Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
Composer2
インストーラーのダウンロード
$ cd /tmp/
$ 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 self-update;
You are already using the latest available Composer version 2.4.1 (stable channel).
Apacheの設定
ホスト名とDocumentRootは任意の場所で構いません。
今回は、ホスト名を shop.szmake.net DocumentRootを /web/shop.szmake.net/www とします。
(※)以下の作業ログは shop.szmake.net の部分をご自身の環境に置き換える前提で参考にしてください。
$ sudo mkdir /web
$ sudo mkdir /web/shop.szmake.net
$ sudo mkdir /web/shop.szmake.net/www
Apacheバーチャルホスト設定
$ cd /etc/apache2/
$ sudo vi ./sites-available/shop.szmake.net.conf
shop.szmake.net.confの内容
<VirtualHost *:80>
ServerName shop.szmake.net
ServerAdmin webmaster@localhost
DocumentRoot /web/shop.szmake.net/www
# Allow encoded slashes
AllowEncodedSlashes NoDecode
<Directory /web/shop.szmake.net/www>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/shop.szmake.net-error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/shop.szmake.net-access.log combined
</VirtualHost>
$ cd ./sites-enabled/
$ sudo ln -s ../sites-available/shop.szmake.net.conf
設定有効化のためにApacheを再起動
$ sudo systemctl restart apache2.service
テストアクセス確認
ホスト名 shop.szmake.net のDNSのAレコードが今作業をしているサーバーに向くように適宜設定して、テスト用のindex.htmlの内容が表示されることを確認します。(忘れずにFirewall等のポート制限はHTTP用ポート80番を開放しておくこと)
テスト用HTML(index.html)の作成
$ echo 'here is shop.szmake.net' | sudo tee /web/shop.szmake.net/www/index.html
PCブラウザからHTTPアクセスしてテスト用HTMLが表示されればOKです。
MariaDBの事前設定
Magento用のDBアクセスユーザーとDBを作成します。
MariaDBにコンソールログインします。
$ sudo mysql -u root -p
Magento2で使用するデータベースをに作成します。
Magento 2のデータベースを新規に作成します。
文字コード=utf8mb4
照合順序=utf8mb4_general_ci
今回は mg2_shop というデータベース名にします。
> CREATE DATABASE mg2_shop CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
次にMagento2アプリケーションからDBアクセスする専用ユーザーを作成します。
今回は mg2 というユーザー名にします。
(※)SQLクエリの YOUR_PASSWORD の部分は任意の設定したいパスワードを指定のこと。
> CREATE USER 'mg2'@'localhost' IDENTIFIED BY 'YOUR_PASSWORD';
> GRANT ALL ON mg2_shop.* TO 'mg2'@'localhost' IDENTIFIED BY 'YOUR_PASSWORD' WITH GRANT OPTION;
権限管理系の変更なので FLUSH PRIVILEGES
してからコンソールからログアウト
> FLUSH PRIVILEGES;
> exit;
接続テスト
今作成したユーザーで正常にDBアクセスできるか確認します。
$ mysql -u mg2 -p mg2_shop
パスワード入力後に下記のように表示されればOKです。
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 37
Server version: 10.4.26-MariaDB-1:10.4.26+maria~deb10-log mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
コンソールからログアウト
> exit;
Magento本体のインストール
SWAPメモリの設定
Magentoのインストール時にメモリが足りないと途中でエラー終了してしまうことがあります。
最低でもメインメモリとSWAPメモリの合算が2GB程度必要なので、確認と適宜設定します。
現在のメモリ設定状況の確認
$ free -h
total used free shared buff/cache available
Mem: 961Mi 820Mi 80Mi 8.0Mi 61Mi 36Mi
Swap: 0B 0B 0B
状況表示でメインメモリとSWAPメモリの合計が2GB以上であれば設定しなくてもOKです。
この記事作成の検証環境では、AmazonEC2のmicroプランなので1GBしかありませんので、以下コマンドでSWAPメモリを2GB設定します。
$ sudo fallocate -l 2G /swapfile
$ chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
改めて、メモリ設定状況の確認
$ free -h
total used free shared buff/cache available
Mem: 961Mi 822Mi 59Mi 8.0Mi 79Mi 25Mi
Swap: 2.0Gi 0.0Ki 2.0Gi
スワップメモリの永続化
OS再起動するとスワップメモリ設定が戻ってしまうので永続化となるよう設定しておきます。
$ sudo vi /etc/fstab
fstabの最終行に下記を追記して上書き保存します。
/swapfile none swap sw 0 0 0
Magentoユーザー作成
MagentoはWebリクエストを処理するApacheユーザー(Debianなのでユーザー名 www-data)の他にCLI操作や定時自動実行専用のOSのユーザーを用意する必要があります。
ユーザー作成
$ sudo adduser magento_user
ApacheユーザーとDocumentRoot配下のファイルを共用するのでデフォルトグループを www-data グループにしておきます。
$ sudo usermod -g www-data magento_user
sudoコマンドを使いたい場合は sudo グループに含めておきます。
$ sudo adduser magento_user sudoMagento2.4.5インストール
事前準備は整いました。
Composerを使ってMagentoのソースコードを配置してインストールします。
以後、事前に作成した magento_user で操作するので、magento_user へスイッチします。
$ su - magento_user
DodumentRootフォルダのパーミッションを変更しておきます。
(今回の例ではDoumentRootは、/web/shop.szmake.net/www
です。shop.szmake.net の部分をご自身の環境に置き換える前提で参考にしてください)
$ sudo chown magento_user:www-data /web/shop.szmake.net -R
前述ステップの Apacheのテストアクセス確認 で用意した index.htmlは削除します。
rm /web/shop.szmake.net/www/index.html
DocumentRootに移動してディレクトリの中身が空であることを確認します。
$ cd /web/shop.szmake.net/www $ ls -la下記のように .
と ..
以外が表示されなければOKです。
drwxr-xr-x 2 magento_user www-data 4096 Aug 26 07:05 .
drwxr-xr-x 3 magento_user www-data 4096 Xxx 26 00:42 ..
Composerコマンドでソース一式取得します。/web/shop.szmake.net/www
の部分はDocumentRootを指定
$ composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition=2.4.5 /web/shop.szmake.net/www
リポジトリのアクセスに際して、下記のようにUsernameとPasswordの認証入力を求められます。
ここでは、Marketplaceの”Authentication Key”取得方法の手順に従ってご自身のアカウントの AccessKey を入力します。
“Username" → [Public Key]の文字列を入力
“Password" → [Private Key]の文字列を入力
Authentication required (repo.magento.com):
Username:
Password:
AccessKey入力後に下記のような選択メッセージが表示されます。
Do you want to store credentials for repo.magento.com in /home/magento_user/.config/composer/auth.json ? [Yn]
ここでY(Yes)を入力すると、今回入力したAccessKey情報が /home/magento_user/.config/composer/auth.json
へ書き込まれます。Composerを使ってrepo.magento.comリポジトリへアクセスする際にauth.jsonの内容が自動的に選択され入力不要となります。n(No)を選択すると今回入力したAccessKey情報は保存されません。
Magentoのインストールに際し、インストール処理時においてメモリ消費が多いので途中でメモリ不足で強制終了しないように、Magento2のインストーラー実行前にCLIモードのPHPのメモリ制限が無制限となっていることを確認します。memory_limit = -1
の表示を確認。
$ cat /etc/php/8.1/cli/php.ini | grep memory_limit
memory_limit = -1
Magento2をインストールします。
下記コマンドで自動的に初期セットアップの処理一式が実行されます。
指定パラメータ
参考: Installation Guide:Advanced install
[base-url]→ストアのホームとなるURLを指定します。
[db-host]→使用するMariaDBの接続先ホスト(今回は同じサーバーなので localhost)
[db-name]→使用するMariaDBのMagento用のデータベース名(今回は前Stepで作成した mg2_shop )
[db-user]→接続MariaDBのユーザー名
[db-password]→接続MariaDBのユーザーパスワード
[admin-firstname]→初期に自動作成するMagentoバックエンド画面ログイン用アカウントの名前(名)
[admin-lastname]→初期に自動作成するMagentoバックエンド画面ログイン用アカウントの名前(姓)
[admin-email]→初期に自動作成するMagentoバックエンド画面ログイン用アカウントのEmailアドレス
[admin-user]→初期に自動作成するMagentoバックエンド画面ログイン用アカウント名
[admin-password]→初期に自動作成するMagentoバックエンド画面ログイン用アカウントパスワード
[language]→ストアフロントとバックエンドの言語モード
[currency]→通貨
[timezone]→タイムゾーン
(※)インストール後、言語モードや通貨、タイムゾーンなどは後から管理画面から変更可能です。
DB_PASSWORD
は前ステップで用意したmg2ユーザーのパスワードを指定ADMIN_PASS
は初期に自動作成するMagentoバックエンド画面ログイン用アカウントパスワード
$ php bin/magento setup:install --cleanup-database \
--base-url=http://shop.szmake.net/ \
--db-host=localhost \
--db-name=mg2_shop \
--db-user=mg2 \
--db-password=DB_PASSWORD \
--admin-firstname=mosbin \
--admin-lastname=sakamoto \
--admin-email=shop@szmake.net \
--admin-user=admin \
--admin-password=ADMIN_PASS \
--language=ja_JP \
--currency=JPY \
--timezone=Asia/Tokyo \
--use-rewrites=1
インストールが始まります。しばらく待つと最後に下記のようなメッセージが表示されます。
[SUCCESS]: Magento installation complete.
[SUCCESS]: Magento Admin URI: /admin_184abc
バックエンド画面へのログインページURLはセキュリティの観点からランダム文字列で生成されます。
上記の場合、バックエンド画面のログインURLは http://shop.szmake.net/admin_184abc ということになります。メモをとっておきます。(もしも忘れた場合は、www(DocumentRoot)/app/etc/env.php
の内容を見れば書かれています)
インストール処理によりDocumentRoot配下にフォルダ・ファイルが作成されたのでのオーナーとパーミッションを変更しておきます。
$ cd /web/shop.szmake.net/www
$ sudo chown -R magento_user:www-data .
$ find . -type d -exec chmod 770 {} \;
$ find . -type f -exec chmod 660 {} \;
$ chmod 770 bin/magento
最後に、Magentoの動作モードをProductionモードに変更してコンテンツをデプロイします。
$ cd /web/shop.szmake.net/www
$ bin/magento deploy:mode:set production
サイトが表示されるかブラウザで確認します。
フロントエンド画面の確認
PCブラウザから今回セットアップした http://shop.szmake.net へアクセス
バックエンド画面の確認
バックエンド画面のURLは http://ホスト名/[Magento Admin URI]です。
今回の例では[Magento Admin URI]が admin_184abc なので、
PCブラウザから今回セットアップした http://shop.szmake.net/admin_184abc へアクセスします。
インストール時のコマンドオプションで指定した[admin-user]と[admin-password]を入力してログインします。その次に、2段階認証(2FA)の設定を要求されます。インストール時のコマンドオプションで指定した[admin-email]に2FA初回登録に関する案内メールが送信されます。手順に従い2FAの設定をします。
もしも、「サーバーへMTAの設定がまだ済んでいない」「とりあえず動作確認したい」という場合には管理者ログイン2FA無効化手順で2FA無効化の設定をすれば、二段階認証をスキップして管理画面へアクセスする事もできます。
cronの設定
参考: Configure cron jobs
magento_user のcronとして登録する必要があります。必ず magento_user でコマンド実行のこと
$ su - magento_user
$ cd /web/shop.szmake.net/www
$ ./bin/magento cron:install --force
このコマンドにより、magento_user の cron設定が追加されます。crontab -l
で確認
$ crontab -l
#~ MAGENTO START 3d38b5c273f5e470f1b1e277a3d0847e2308b562537b5fc37a5c56bbc0e5cebb
* * * * * /usr/bin/php8.1 /web/shop.szmake.net/www/bin/magento cron:run 2>&1 | grep -v "Ran jobs by schedule" >> /web/shop.szmake.net/www/var/log/magento.cron.log
#~ MAGENTO END 3d38b5c273f5e470f1b1e277a3d0847e2308b562537b5fc37a5c56bbc0e5cebb
phpMyAdminの導入(任意)
Magentoのデータベースのレコード確認やSQLクエリによるレコード集計のためにphpMyAdminをセットアップします。この作業はMagentoのセットアップに必須ではありません。不要であれば省略OK。
phpMyAdmin用のDcoumetRootを準備(magento_userで操作)
$ sudo mkdir /web/phpMyAdmin
$ sudo chown magento_user:www-data /web/phpMyAdmin
$ cd /web/phpmyadmin
$ wget https://files.phpmyadmin.net/phpMyAdmin/5.2.0/phpMyAdmin-5.2.0-all-languages.zip
$ unzip phpMyAdmin-5.2.0-all-languages.zip
$ ln -s ./phpMyAdmin-5.2.0-all-languages www
phpMyAdminの初期設定
phpMyAdminのconfingファイルの編集。雛形(config.sample.inc.php)があるのでコピー後編集
$ cd /web/phpmyadmin/www
$ cp ./config.sample.inc.php ./config.inc.php
$ vi ./config.inc.php
config.inc.php の$cfg['blowfish_secret']
の値を適当な32文字に変更
例)
$cfg['blowfish_secret’] = ";
↓
$cfg['blowfish_secret’] = 'bNlSUYl5hbGWA8ba8Bx4RuqUFaqBEJNQ’;
phpMyAdminのアプリテンポラリ用ディレクトリ作成
$cd /web/phpmyadmin/www
$ mkdir ./tmp
$ chmod 770 tmp
Apacheのバーチャルホスト設定
ここではとりあえず、今回はPort10085でHTTPアクセスとします。
(注意)実運用環境では必ずSSL化(HTTPS)してください。HTTP環境だと平文でデータ通信されるためphpMyAdminのログインID情報、phpMyAdminのレスポンスHTMLが丸見えになってしまい大変危険です。
Apacheバーチャルホスト設定
$ cd /etc/apache2/
$ sudo vi ./sites-available/phpMyAdmin.conf
phpMyAdmin.confの内容
不正アクセスを防ぐためアクセス元のIP制限をかけておきます。XXX.XXX.XXX.XXX
の部分を環境に併せてアクセス元IPを指定します。(不要な場合は Require all granted
を指定)
DebianのApache設定管理作法に従って定義ファイルを site-enable ディレクトリにシンボリックリンク作成
$ cd ./sites-enabled/
$ sudo ln -s ../sites-available/phpMyAdmin.conf
設定有効化のためにApacheを再起動
$ sudo systemctl restart apache2.service
phpMyAdminのページへアクセスしてみます。
http://shop.szmake.net:10085
セットアップで作成したMagento用のDBユーザーでログイン
Magentoインストーラーが自動作成したテーブルが表示されます。