ConoHa VPS kusanagi環境　セットアップ内容


## PHP バージョンアップ
2024年11月現在、ConoHa VPSのかんたんkusanagi設定で構築すると、PHPのパージョンはすでにサポート切れの7.4だった。そのためバージョンアップが必要。

### 手順
以下8.3にバージョンアップするには以下のコマンドで可能

```bash:bash
kusanagi php --use php83
```

### 確認方法
以下コマンドで8.3になっていることを確認
```bash:bash
php -v
```
さらに、wordpress管理画面にログインし、サイトヘルスにアクセスしphpバージョンを確認することで上記バージョンが反映されていることを確認



## WebP対応
EWWW Image Optimizerをインストール後、以下を実施

### 対応内容
/etc/opt/kusanagi/nginx/conf.dにある「<英数字数十文字の文字列>.conf」を開いて以下を追記

#### 追記内容
ファイルの冒頭に以下追記
```conf:sample.conf
map $http_accept $webp_suffix {
    default "";
    "~*webp" ".webp";
}
```

2つのserver{}内に、それぞれ合計2か所に以下追記
```conf:sample.conf
# 画像ファイルの処理設定を追加
location ~* ^.+\.(png|jpe?g)$ {
    add_header Vary Accept;
    try_files $uri$webp_suffix $uri =404;
}
```


#### 完成例
※client_max_body_size は初期状態では16MBだったが、All in one migrationを利用する都合上512MBに変更し

```conf:sample.conf
# vim: ft=conf et sw=4
#=======================================
# sample.com
#---------------------------------------

map $http_accept $webp_suffix {
    default "";
    "~*webp" ".webp";
}

server {
    listen 80;
    listen [::]:80;

    server_name sample.com www.sample.com;
    rewrite ^(.*)$ https://sample.com$request_uri permanent; # SSL ONLY
    rewrite ^(.*)$ https://www.sample.com$request_uri permanent; # SSL ONLY

    set $do_not_cache 1; ## page cache
    set $expire_days 90d;

    access_log  /home/kusanagi/sampledummytext012345/log/nginx/access.log main;
    error_log   /home/kusanagi/sampledummytext012345/log/nginx/error.log warn;

    charset UTF-8;
    client_max_body_size 512M;
    root /home/kusanagi/sampledummytext012345/DocumentRoot;

    # 画像ファイルの処理設定を追加
    location ~* ^.+\.(png|jpe?g)$ {
        add_header Vary Accept;
        try_files $uri$webp_suffix $uri =404;
    }

    include conf.d/505.inc;
    include conf.d/favicon.inc;
    include conf.d/acme.inc;

    include conf.d/sampledummytext012345.wp.inc;
    include conf.d/static.inc;
}

server {
    include conf.d/ssl_listen.inc;

    server_name sample.com www.sample.com;

    set $do_not_cache 1; ## page cache
    set $expire_days 90d;

    ssl_certificate     /etc/letsencrypt/live/sample.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/sample.com/privkey.pem;

    include conf.d/ssl.inc;
    ## OCSP stapling
    ssl_stapling off;
    ssl_stapling_verify off;
    resolver  8.8.4.4 8.8.8.8 valid=300s;
    resolver_timeout 10s;

    access_log  /home/kusanagi/sampledummytext012345/log/nginx/ssl_access.log main;
    error_log   /home/kusanagi/sampledummytext012345/log/nginx/ssl_error.log warn;

    charset UTF-8;
    client_max_body_size 512M;
    root  /home/kusanagi/sampledummytext012345/DocumentRoot;

    # 画像ファイルの処理設定を追加
    location ~* ^.+\.(png|jpe?g)$ {
        add_header Vary Accept;
        try_files $uri$webp_suffix $uri =404;
    }

    include conf.d/505.inc;
    include conf.d/favicon.inc;
    include conf.d/acme.inc;

    include conf.d/sampledummytext012345.wp.inc;
    include conf.d/static.inc;
    include conf.d/fcache_purge.inc;
}


```

#### メール関連
wordpressなのでcontact form 7で問い合わせフォームを作りました。
その中で、SPF、DKIM、DMARCの設定をしても迷惑メール扱いになってしまった。
以下の対処でホスト名を変更することで、正常に受信できた。

以下のファイルの2か所を自サイトのドメイン名に修正
```/etc/postfix/main.cf
myhostname = sample.com
mydomain = sample.com
```

postfixを再起動
```
sudo systemctl restart postfix
```

#### バックアップ
kusanagi-managerの自動バックアップで14世代バックアップを取ることが可能だが、VPSのディスクを利用するため、もし契約が100GBで、サイトのバックアップ容量が1日あたり10GBのような場合には、14世代取得する前にディスク容量が100%になる。容量が100%になると、wordpressにログインできなくなる。正しいID/PWでログインしようとしてもログイン画面が再表示されるだけなので気づきにくい。
対処としては、14世代溜まる前に自動削除するのが望ましい。以下にて実施した

■バックアップデータが保存されている場所
以下のフォルダに、サイト別にDBとwebデータがバックアップされる
/opt/kusanagi-manager/backup

■削除バッチ
以下ファイルを作り保存。パーミションは700。適宜、DAYS_THRESHOLDの値を変更して残したい世代数を指定してください。
```/opt/kusanagi-manager/auto-delete-backup.sh
#!/bin/bash

# 設定
TARGET_DIR="/opt/kusanagi-manager/backup/"
DAYS_THRESHOLD=3  # 削除するファイルの最終更新日が何日前かを指定

# 指定日以前に作成された「db_*.sql」および「web_*.tar.gz」を削除
find "$TARGET_DIR" -type f \( -name "db_*.sql" -o -name "web_*.tar.gz" \) -mtime +"$DAYS_THRESHOLD" -exec rm -f {} \;

# ログ出力（オプション）
echo "$(date '+%Y-%m-%d %H:%M:%S') - $DAYS_THRESHOLD 日以上前のバックアップファイルを削除しました。"

```

■crontabの編集
既にupdate-kusanagi-manager.shの記載があると思うので、それに続けて今回追加するauto-delete-backup.shを追記。以下は午前3時～4時の間にランダムに実行するサンプル。

/var/spool/cron/root を編集
```
#Ansible: Update KUSANAGI manager
0 2 * * * sleep $(expr $RANDOM \% 3600) && /opt/kusanagi-manager/update-kusanagi-manager.sh >> /var/log/kusanagiupdate.log 2>&1
0 3 * * * sleep $(expr $RANDOM \% 3600) && /opt/kusanagi-manager/auto-delete-backup.sh >> /var/log/autodeletebackup.log 2>&1
```

■cron実行ログ
今回のバックアップ削除のログは以下にほ
/var/log/autodeletebackup.log