Magento2 のインストール（on Ubuntu 18.04 at Google Cloud)

 # 初めに

MagentoのSand boxが必要となったので、Google Clould上に構築しました。結論から言えばものすごく大変です。Magentoそのものの開発を行うのでない限り、誰かに作ってもらったほうが時間と費用の節約になります。

何回か試行錯誤を繰り返した結果なので、大丈夫だとは思いますが、実際のECショップを立ち上げるには甘いところが多々あると思います。この記事を参照するときはあくまでも自己責任でお願いします。

基本的には [こちらの](https://magentip.com/install-magento-2-4-x-on-ubuntu-with-elasticsearch/)記事をベースにしていますが、試行錯誤の結果で内容を追加・削除したところが多々あります。

# VM
 手元にUbuntuマシンがなかったので、Google Cloud上に構築しました。インストール時は結構CPUパワーを食うので、当初の設定はこんな感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56044/5524abdf-26a5-d78d-9334-4b501a7fcd26.png)

これにメモリ8GBとSSD 10Gを積んでいます。

# Apache, Mysql, PHPのインストール
まずはお約束の
```
sudo apt update
sudo apt upgrade
```
## Apatch
```
sudo apt install apache2
```

IPアドレス指定でサーバにつないでみて、以下の画面が表示されるのを確認します（Google Cloudを使用しているので```http://localhost```ではダメ）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56044/bb14e7b3-3100-6d90-1570-12a777a73af6.png)


### /etc/apache2/sites-available/000-default.confの更新
赤枠の部分を追加します。この設定を行っておかないとMagento2が動きません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56044/b3bd9833-9ab8-627a-9246-28f832cfbea9.png)

```html
        <Directory /var/www/html>
                AllowOverride All
                Require all granted
        </Directory>
```

### Rewrite の有効化
Magento2を動作させるために設定します。mod_rewriteを有効にします。

```shell-session
~$ sudo a2enmod
Your choices are: access_compat actions alias allowmethods asis auth_basic auth_digest auth_form authn_anon authn_core authn_dbd authn_dbm authn_file authn_socache authnz_fcgi authnz_ldap authz_core authz_dbd authz_dbm authz_groupfile authz_host authz_owner authz_user autoindex buffer cache cache_disk cache_socache cern_meta cgi cgid charset_lite data dav dav_fs dav_lock dbd deflate dialup dir dump_io echo env expires ext_filter file_cache filter headers heartbeat heartmonitor http2 ident imagemap include info lbmethod_bybusyness lbmethod_byrequests lbmethod_bytraffic lbmethod_heartbeat ldap log_debug log_forensic lua macro mime mime_magic mpm_event mpm_prefork mpm_worker negotiation php8.1 proxy proxy_ajp proxy_balancer proxy_connect proxy_express proxy_fcgi proxy_fdpass proxy_ftp proxy_hcheck proxy_html proxy_http proxy_http2 proxy_scgi proxy_wstunnel ratelimit reflector remoteip reqtimeout request rewrite sed session session_cookie session_crypto session_dbd setenvif slotmem_plain slotmem_shm socache_dbm socache_memcache socache_shmcb speling ssl status substitute suexec unique_id userdir usertrack vhost_alias xml2enc
Which module(s) do you want to enable (wildcards ok)?
rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
  systemctl restart apache2
```


Apacheを再起動します。
```
sudo systemctl restart apache2
```


## Mysqlの準備

[Adobe](https://experienceleague.adobe.com/docs/commerce-operations/installation-guide/system-requirements.html?lang=ja&mt=false)のページを見るとSystem RequirementとしてMagento2.4.5では***MySQL 8.0***が必要とされています。よって手動でMySQL8.0のrepositoriesを追加します。

 [こちらの](https://magentip.com/install-magento-2-4-x-on-ubuntu-with-elasticsearch/)記事の方法ではうまくいかなかったので「[ubuntu-20-04に最新版のmysql-8-0をインストール](https://self-development.info/ubuntu-20-04%E3%81%AB%E6%9C%80%E6%96%B0%E7%89%88%E3%81%AEmysql-8-0%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/)」を参照しました。

現時点での最新版は8.24-1でした。よって
```
wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb
```

そのあとに
```
sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb 
```
とすると、以下の画面が現れます(mysql-8.0が選択されている）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56044/69e380d0-2789-777b-cc9a-ad22c520f157.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56044/34d70c01-176d-2280-c798-f4cabdadc8dc.png)

最後に、***OK***を選択してEnterキーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56044/fa255087-e426-ab5a-91fd-1acb601f730f.png)

すると、こんな感じの出力が出てきます。
```shell-session
$ sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb 
(Reading database ... 67857 files and directories currently installed.)
Preparing to unpack mysql-apt-config_0.8.24-1_all.deb ...
Unpacking mysql-apt-config (0.8.24-1) over (0.8.11-1) ...
Setting up mysql-apt-config (0.8.24-1) ...
Warning: apt-key should not be used in scripts (called from postinst maintainerscript of the package mysql-apt-config)
OK
$ 
```

```sudo apt-get update```します。

```shell-session
$ sudo apt-get update
Hit:1 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic InRelease
Hit:2 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates InRelease                
Hit:3 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-backports InRelease              
Get:4 http://repo.mysql.com/apt/ubuntu bionic InRelease [20.0 kB]                                  
Hit:5 http://security.ubuntu.com/ubuntu bionic-security InRelease                                  
Get:6 http://repo.mysql.com/apt/ubuntu bionic/mysql-8.0 Sources [973 B]
Get:7 http://repo.mysql.com/apt/ubuntu bionic/mysql-apt-config amd64 Packages [567 B]
Get:8 http://repo.mysql.com/apt/ubuntu bionic/mysql-8.0 amd64 Packages [8528 B]
Get:9 http://repo.mysql.com/apt/ubuntu bionic/mysql-tools amd64 Packages [8196 B]
Fetched 38.3 kB in 2s (16.7 kB/s)   
Reading package lists... Done
```

***mysql-8.0***の何かを持ってきたようなので、準備完了です。
### MySql 8.0のインストール

aptコマンドでインストールします。
```
sudo apt install mysql-server
```

インストール終了直後に以下の画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56044/c518da21-bcb6-07fd-e230-7996e28cced3.png)

パスワード入力後Enterキーを押します。もう一度パスワード入力を求められます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56044/6b051f76-2b5a-15e6-b753-4ea589f53eba.png)

RECOMMENDEDの方法で先に進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56044/e5ef7891-a0b2-e749-8b6d-78719f226813.png)

MySQLを動かしてみます。

```shell-session
$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.31 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
```
ちゃんとVersion8につながっています。

### MySQL上のDatabase設定、他

前の章から引き継ぎ、MySQLのなかで```magent2```というデータベースを作成します。

```sql
CREATE DATABASE magento2;
```

```magentip```というユーザを作成します。ここで```magentip```のパスワードも設定します。

```sql
CREATE USER 'magentip'@'localhost' IDENTIFIED BY '<your_pssword>';
ALTER USER 'magentip'@'localhost' IDENTIFIED WITH mysql_native_password BY '<your_pssword>';
```

```magentip```に権限付与します。
```sql
GRANT ALL PRIVILEGES ON *.* TO 'magentip'@'localhost' WITH GRANT OPTION;
```

権限を変更したので```FLUSH PRIVILEGES```してからコンソールを抜けます。
```shell-session
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
```

## PHP
[Adobeのページ（必要システム構成）](https://experienceleague.adobe.com/docs/commerce-operations/installation-guide/system-requirements.html?lang=ja&mt=false)には、PHPは8.1が必要と記載されています。よってrepositoryを手動で追加します。

```shell 
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
```
PHP8.1をインストールします。
```shell
sudo apt install php8.1 libapache2-mod-php php-mysql
```

PHPのバージョンを確認してみます。
```shell-session
$ php -v
PHP 8.1.12 (cli) (built: Oct 28 2022 17:39:18) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.12, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.12, Copyright (c), by Zend Technologies
```

他に必要なPHPモジュールをインストールします。
```
sudo apt install php8.1-bcmath php8.1-intl php8.1-soap php8.1-zip php8.1-gd php8.1-curl php8.1-cli php8.1-xml php8.1-xmlrpc php8.1-gmp php8.1-common php8.1-mbstring
```

# Elasticsearch
まずjava(openjdkのほう）をインストールします。

以下のコマンドでインストールできるopenjdkのバージョンを確認します。

```shell-session
$ sudo apt search "^openjdk.*jdk$"
Sorting... Done
Full Text Search... Done
openjdk-11-jdk/bionic-updates,bionic-security 11.0.17+8-1ubuntu2~18.04 amd64
  OpenJDK Development Kit (JDK)

openjdk-17-jdk/bionic-updates,bionic-security 17.0.5+8-2ubuntu1~18.04 amd64
  OpenJDK Development Kit (JDK)

openjdk-8-jdk/bionic-updates,bionic-security 8u352-ga-1~18.04 amd64
  OpenJDK Development Kit (JDK)
```
```openjdk-17-jdk```がインストール可能です。
```
sudo apt update
sudo apt-get install openjdk-17-jdk
```

Javaのバージョンを確認します。
```shell-session
$ java -version
openjdk version "17.0.5" 2022-10-18
OpenJDK Runtime Environment (build 17.0.5+8-Ubuntu-2ubuntu118.04)
OpenJDK 64-Bit Server VM (build 17.0.5+8-Ubuntu-2ubuntu118.04, mixed mode, sharing)
```

Elasticsearchのインストールを開始します。

```shell
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
```

Elastic-7.x.listを```source.list.d```に加えます（そういう意味らしい）。
```shell
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
```

Elasticsearchの本体をインストールします。Magento2.35で必要なのはElasticsearch7.6ですが、今ダウンロードできるのは7.17です。
```shell-session
$ sudo apt update
$ sudo apt search "^elasticsearch"
Sorting... Done
Full Text Search... Done
elasticsearch/stable 7.17.7 amd64
  Distributed RESTful search engine built for the cloud

elasticsearch-curator/bionic 5.2.0-1 all
  command-line tool for managing Elasticsearch time-series indices

golang-gopkg-olivere-elastic.v2-dev/bionic 2.0.12-1 all
  Elasticsearch client for Golang

golang-gopkg-olivere-elastic.v3-dev/bionic 3.0.41-1 all
  Elasticsearch client for Golang

rsyslog-elasticsearch/bionic-updates,bionic-security 8.32.0-1ubuntu4.2 amd64
  Elasticsearch output plugin for rsyslog
$ sudo apt install elasticsearch
```

Elasticsearchをサービスとして登録します。

```shell-session
$ sudo systemctl daemon-reload
$ sudo systemctl enable elasticsearch.service
Synchronizing state of elasticsearch.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable elasticsearch
Created symlink /etc/systemd/system/multi-user.target.wants/elasticsearch.service → /usr/lib/systemd/system/elasticsearch.service.
```

### elasticsearchの設定

以下ファイルの設定を行います（この辺りは[こちらの](https://www.thecoachsmb.com/install-magento-2-4-5-on-ubuntu-22-04-complete-guide/)サイトより引用）。
- elasticsearch.yml
- elasticsearch.service

### elasticsearch.yml
```
sudo vi /etc/elasticsearch/elasticsearch.yml
```
***cluster.name***と***node.name***の文頭の#を外し、***node.name***を'My First Node'に変更しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56044/22fef922-14ef-831e-954f-3058c7255731.png)

次に***network.host***と***http.port***の行を有効にします（Un-commentする）。***network.host***はどこからでもアクセスできるように**0.0.0.0**に変更します（Google cloudなのでこうしておかないとローカルPCからアクセスできない）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56044/8a96fe47-967d-ccab-f283-ec4c13dbd68e.png)

### ```elasticsearch.service```

```
sudo vi /usr/lib/systemd/system/elasticsearch.service
```
***TimeoutStartSec***を**900**に変更。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56044/cda31de1-52ea-fc8e-7f48-830cc22a7d6f.png)

ここまでの設定が終わったらelasticserchサービスを開始します。

```shell-session
$ sudo systemctl daemon-reload
$ sudo systemctl start elasticsearch.service
Job for elasticsearch.service failed because the control process exited with error code.
See "systemctl status elasticsearch.service" and "journalctl -xe" for details.
```

**journalctl -xe**で確認しろと記載があるので見てみます。

```
Nov 14 05:41:51 magento2-ubuntu18-03 systemd-entrypoint[3427]: ERROR: [1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.
Nov 14 05:41:51 magento2-ubuntu18-03 systemd-entrypoint[3427]: bootstrap check failure [1] of [1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
Nov 14 05:41:51 magento2-ubuntu18-03 systemd-entrypoint[3427]: ERROR: Elasticsearch did not exit normally - check the logs at /var/log/elasticsearch/my-application.log
Nov 14 05:41:51 magento2-ubuntu18-03 systemd-entrypoint[3427]: uncaught exception in thread [process reaper (pid 3646)]
```

at least one of [**discovery.seed_hosts**, **discovery.seed_providers**, **cluster.initial_master_nodes**] must be configured.というメッセージが出ています。デフォルト値で**discovery.seed_hosts**を設定してみます（***elasticsearch.yml***に対して下図赤線部分）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56044/76ed05f1-fd30-19e2-b2bc-3fea3ad6a648.png)


サービスを開始します（sudo systemctl start elasticsearch.serviceは応答が返ってくるまで1～2分程度かかります、おそらく環境に依存します）。
```shell-session
$ sudo systemctl daemon-reload
$ sudo systemctl start elasticsearch.service
```

curlで **http://localhost:9200** にアクセスして動作確認します。

```shell-session
$ curl -X GET 'http://localhost:9200'
{
  "name" : "My First Node",
  "cluster_name" : "my-application",
  "cluster_uuid" : "_na_",
  "version" : {
    "number" : "7.17.7",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "78dcaaa8cee33438b91eca7f5c7f56a70fec9e80",
    "build_date" : "2022-10-17T15:29:54.167373105Z",
    "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"
}
```
elasticsearchが動いていることを確認できました。

# Magento


composerを使用してMagentoをダウンロードします。

## composerのインストール
まずはcomposerから。

```
curl -sS https://getcomposer.org/installer -o composer-setup.php
```
カレントディレクトリはこういう状態になります。

```shell-session
~/tmp$ curl -sS https://getcomposer.org/installer -o composer-setup.php
:~/tmp$ ls
composer-setup.php
```

Magento2.4はComposer2が必要なので、以下のようにインストールします。

```shell-session
$ sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
All settings correct for using Composer
Downloading...

Composer (version 2.4.4) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer
```

あっさりと終了しました。
バージョンを確認してみます。
```shell-session
$ composer
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 2.4.4 2022-10-27 14:39:29
```



## Magento2.4

### Magentoのアクセスキー
この後MagentoのAccess Keyが必要なのであらかじめ取得しておきます（ご本尊の[Adobeのページ](https://experienceleague.adobe.com/docs/commerce-operations/installation-guide/prerequisites/authentication-keys.html?mt=false)に取得方法が記載されています）。取得したアクセスキーは

-Username: public Key
-Password: private Key

として使用します。

### Magentoユーザ作成

このあたりから、参照する記事によって記載している内容が異なってきます。ここからは[こちらの記事](https://magento.szmake.net/setup/debian10-for-magento2-4-4/#)を参考にしています。

MagentoのCLI操作やCRON用のユーザを用意します（パスワードを聞かれるので用意しておいてください）。

```shell-session
$ sudo adduser magento_user
Adding user `magento_user' ...
Adding new group `magento_user' (1003) ...
Adding new user `magento_user' (1002) with group `magento_user' ...
Creating home directory `/home/magento_user' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for magento_user
Enter the new value, or press ENTER for the default
        Full Name []: Magento2 User
        Room Number []: 
        Work Phone []: 
        Home Phone []: 
        Other []: 
Is the information correct? [Y/n] Y
```

デフォルトグループをwww-dataグループにします。
```shell-session
sudo usermod -g www-data magento_user
```

一応、sudoグループにも含めておきます。
```
sudo adduser magento_user sudo
```

### Magento2.4.4のダウンロード

以降は先ほど作成したmagento_userで操作するのでsuコマンドで切り替えます。
```
su - magento_user
```

**DocumentRoot**フォルダの所有者をmagento_userにします。**DocumentRoot**は特に変更していないので/var/www/htmlです。

```shell-session
$ sudo chown magento_user:www-data /var/www/html -R
$ ls -all
total 20
drwxr-xr-x 2 magento_user www-data  4096 Nov 14 06:40 .
drwxr-xr-x 3 root         root      4096 Nov 14 06:40 ..
-rw-r--r-- 1 magento_user www-data 10918 Nov 14 06:40 index.html
```

Magento2はhtmlコンテンツとしてインストールするので、インストールディレクトリにカレントを変更します（以下では/var/www/html直下に入れる）。なお、中身が空でないとインストール中エラーになるので、もともと入っていたindex.htmlは消します。

```shell-session
$ cd /var/www/html
$ rm index.thml
$ $ ls -all
total 8
drwxr-xr-x 2 magento_user www-data 4096 Nov 14 08:13 .
drwxr-xr-x 3 root         root     4096 Nov 14 06:40 ..
```

ダウンロードを開始します。
```shell-session
$ composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition=2.4.5 .
Creating a "magento/project-community-edition=2.4.5" project at "./"
Warning from repo.magento.com: You haven't provided your Magento authentication keys. For instructions, visit https://devdocs.magento.com/guides/v2.3/install-gde/prereq/connect-auth.html
    Authentication required (repo.magento.com):
      Username: <your public Key>
      Password: <your private Key>
Do you want to store credentials for repo.magento.com in /home/magento_user/.config/composer/auth.json ? [Yn] Y
Installing magento/project-community-edition (2.4.5)
As there is no 'unzip' nor '7z' command installed zip files are being unpacked using the PHP zip extension.
This may cause invalid reports of corrupted archives. Besides, any UNIX permissions (e.g. executable) defined in the archives will be lost.
Installing 'unzip' or '7z' (21.01+) may remediate them.
  - Downloading magento/project-community-edition (2.4.5)
  - Installing magento/project-community-edition (2.4.5): Extracting archive
Created project in /var/www/html/.
Loading composer repositories with package information
Info from https://repo.packagist.org: #StandWithUkraine
# 途中省略
Generating autoload files
123 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
PHP CodeSniffer Config installed_paths set to ../../magento/magento-coding-standard,../../phpcompatibility/php-compatibility
No security vulnerability advisories found
magento_user@magento2-ubuntu18-05:/var/www/html$ 
```

### Magento2のインストール

コマンドラインからインストールします。下ではさらっと記述していますが、2行目の```--base-url```がgoogle cloudを使用する際厄介で、仮に```http://localhost```とするとローカルPC（自分がいま捜査している端末）にRedirectしてしまいます。Google Domainなどでドメインを取得し、Google cloud computingで使用しているホストのIPアドレスをDNSに登録する必要があります。

```
bin/magento setup:install \
--base-url="<your domain>" \
--db-host=localhost \
--db-name=magento2 \
--db-user=magentip \
--db-password="<Mysql magentip password>" \
--admin-firstname=Admin \
--admin-lastname=Admin \
--admin-email=admin@admin.com \
--admin-user=admin \
--admin-password=admin123 \
--language=en_US \
--currency=USD \
--timezone=America/Chicago \
--use-rewrites=1
```


最後に表示されている
```shell-session
[SUCCESS]: Magento installation complete.
[SUCCESS]: Magento Admin URI: /admin_1wgure
Nothing to import.
magento_user@magento2-ubuntu18-05:/var/www/html$ 
```
***/admin_1wgure***がsetup用のURLとなります（ランダムに設定されるようです）。

### FileのPermission変更
DocumentRoot配下に作成されたフォルダ・ファイルのオーナーとパーミッションを変更します。

```shell-session
$ cd /var/www/html
$ sudo chown -R magento_user:www-data .
$ find . -type d -exec chmod 770 {} \;
$ find . -type f -exec chmod 660 {} \;
chmod: changing permissions of './var/cache/mage--f/mage---40d_FRONTEND__CSP_WHITELIST_CONFIG': Operation not permitted
chmod: changing permissions of './var/cache/mage--3/mage---40d_GLOBAL__CSP_WHITELIST_CONFIG': Operation not permitted
chmod: changing permissions of './generated/code/Magento/Framework/Controller/Result/Redirect/Interceptor.php': Operation not permitted
chmod: changing permissions of './generated/code/Magento/Framework/Message/Session/Interceptor.php': Operation not permitted
chmod: changing permissions of './generated/code/Magento/Framework/App/Router/DefaultRouter/Interceptor.php': Operation not permitted
chmod: changing permissions of './generated/code/Magento/Framework/App/Action/Forward/Interceptor.php': Operation not permitted
chmod: changing permissions of './generated/code/Magento/Csp/Model/Collector/CspWhitelistXml/Reader/Proxy.php': Operation not permitted
chmod: changing permissions of './generated/code/Magento/Cms/Controller/Router/Interceptor.php': Operation not permitted
```

2番目のほうだけ怒られているのでsudo してみます。
```shell-session
$sudo  find . -type f -exec chmod 660 {} \;

```


### Disable Two-Factor Authorization
２要素認証を無効にします。
```shell-session
$ php bin/magento module:disable Magento_TwoFactorAuth
The following modules have been disabled:
- Magento_TwoFactorAuth

Cache cleared successfully.
Generated classes cleared successfully. Please run the 'setup:di:compile' command to generate classes.
Info: Some modules might require static view files to be cleared. To do this, run 'module:disable' with the --clear-static-content option to clear them.
```
### deploy 
最後に、Magento の動作モードをProductionモードに変更してコンテンツをdeployします。

```shell-session
$ php bin/magento deploy:mode:set production
Enabling maintenance mode
Starting compilation
Compilation was started.
%message% 0/9 [>---------------------------]   0% < 1 sec 115.0 MiBProxies code generation... 0/9 [>---------------------------]   0% < 1 sec 115.0 MiB
Proxies code generation... 1/9 [===>------------------------]  11% 1 sec 119.0 MiB
Repositories code generation... 1/9 [===>------------------------]  11% 1 sec 119.0 MiB
Repositories code generation... 2/9 [======>---------------------]  22% 11 secs 238.0 MiB
Service data attributes generation... 2/9 [======>---------------------]  22% 11 secs 238.0 MiB
Application code generator... 3/9 [=========>------------------]  33% 11 secs 238.0 MiB
Application code generator... 4/9 [============>---------------]  44% 18 secs 262.0 MiB
Interceptors generation... 4/9 [============>---------------]  44% 18 secs 262.0 MiB
Interceptors generation... 5/9 [===============>------------]  55% 38 secs 296.0 MiB
Area configuration aggregation... 5/9 [===============>------------]  55% 38 secs 296.0 MiB
Area configuration aggregation... 6/9 [==================>---------]  66% 43 secs 394.0 MiB
Interception cache generation... 6/9 [==================>---------]  66% 43 secs 394.0 MiB
Interception cache generation... 7/9 [=====================>------]  77% 48 secs 394.0 MiB
App action list generation... 7/9 [=====================>------]  77% 48 secs 394.0 MiB
Plugin list generation... 8/9 [========================>---]  88% 48 secs 394.0 MiB
Plugin list generation... 9/9 [============================] 100% 51 secs 394.0 MiB
Generated code and dependency injection configuration successfully.
Compilation complete
Starting deployment of static content

Deploy using quick strategy
frontend/Magento/blank/en_US            2181/2181           ============================ 100%   7 secs
adminhtml/Magento/backend/en_US         2879/2879           ============================ 100%   10 secs
frontend/Magento/luma/en_US             2197/2197           ============================ 100%   8 secs

Execution time: 28.001624107361
Deployment of static content complete
Disabling maintenance mode
Enabled production mode.
```



### cronの設定
[こちらの記事](https://magento.szmake.net/setup/debian10-for-magento2-4-4/#toc_id_4)を参考にしました。
magento_userのcromとして登録するので、カレントユーザをmagento_userにしてから実行する必要があります。

```shell-session
$ cd /var/www/html/
$ php ./bin/magento cron:install --force
Crontab has been generated and saved
```

内容を確認してみます。
```shell-session
$ crontab -l

#~ MAGENTO START 69dd2b02e1f3a65918182048ea4e29979a849d8942e8f53ed20a4bf10e529b36
* * * * * /usr/bin/php8.1 /var/www/html/bin/magento cron:run 2>&1 | grep -v "Ran jobs by schedule" >> /var/www/html/var/log/magento.cron.log
#~ MAGENTO END 69dd2b02e1f3a65918182048ea4e29979a849d8942e8f53ed20a4bf10e529b36
```

###  bin/magento setup:static-content:deploy -f


[こちらの方法を](https://community.magento.com/t5/Magento-2-x-Technical-Issues/Unable-to-retrieve-deployment-version-of-static-files-from-the/td-p/456829)参照してみる（現時点 2022/11/16では何をやっているのか意味を把握していない）。
```shell-session
$php bin/magento setup:upgrade
Cache types config flushed successfully
Cache cleared successfully
File system cleanup:
/var/www/html/generated/code/AdobeStock
/var/www/html/generated/code/Composer
（途中省略）
Nothing to import.
Please re-run Magento compile command. Use the command "setup:di:compile"
Media files stored outside of 'Media Gallery Allowed' folders will not be available to the media gallery.
Please refer to Developer Guide for more details.

$ php  bin/magento setup:di:compile
$ php bin/magento setup:static-content:deploy -f

Deploy using quick strategy
frontend/Magento/blank/en_US            2181/2181           ============================ 100%   7 secs        
frontend/Magento/blank/en_US            2181/2181           ============================ 100%   7 secs        
frontend/Magento/blank/en_US            2181/2181           ============================ 100%   7 secs        
frontend/Magento/blank/en_US            2181/2181           ============================ 100%   7 secs        
frontend/Magento/blank/en_US            2181/2181           ============================ 100%   7 secs              
frontend/Magento/blank/en_US            2181/2181           ============================ 100%   7 secs              
frontend/Magento/blank/en_US            2181/2181           ============================ 100%   7 secs              
frontend/Magento/blank/en_US            2181/2181           ============================ 100%   7 secs              
frontend/Magento/blank/en_US            2181/2181           ============================ 100%   7 secs              
frontend/Magento/blank/en_US            2181/2181           ============================ 100%   7 secs              
adminhtml/Magento/backend/en_US         2879/2879           ============================ 100%   9 secs              
frontend/Magento/luma/en_US             2197/2197           ============================ 100%   8 secs

Execution time: 26.501586914062
$ bin/magento setup:di:compile
Compilation was started.
Plugin list generation... 9/9 [============================] 100% 49 secs 400.0 MiB
Generated code and dependency injection configuration successfully.
```
# 動作確認

以下の画面が出力されます。ちなみに2022/11/28時点では、この後にサンプルデータを入れようとしてもうまくいきませんでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56044/e4ef4785-2c23-5b08-a8f2-5cd316f8ad53.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56044/6c0f9a8a-54ab-bd9b-4278-a4aac189986d.png)