メインコンテンツまでスキップ

Exmentのサーバーを移行するメモ

ConoHa VPS 2GからConoHa VPS 2Gに移行した時のメモ
Ubuntu22からUbuntu24への移行をしました。

サーバーのアップグレードでも行けますが管理パネルを新しい奴に変えたかったのでVPSを立て直しました。

バックアップからリストアって方法もあるけどこの方法がエラーもなくたぶん確実?

リストアは格納データによっては失敗するので定期的にデータとDBのバックアップは取得してたほうがいいです。

SynologyでクラウドバックアップとってますがSynologyは神

新しいサーバーで環境を構築する

NginxやFPMは今回のメモから除外してます。
初期の移行で必要な物だけ

アップデートする(必要なら)

sudo apt -y update
sudo apt -y upgrade

MariaDBインストール

MySQLを使いたい方はそちらをインストール

sudo apt -y install mariadb-server
sudo mysql_secure_installation

PHP8.2をインストールする

最新版を取得します

sudo add-apt-repository ppa:ondrej/php
sudo apt -y install php8.2

Exmentで必要な拡張等のモジュールの追加

sudo apt install -y php8.2-fpm php8.2-gd php8.2-dom php8.2-bcmath php8.2-mbstring php8.2-xml php8.2-zip php8.2-curl php8.2-mysql unzip
php8.3をインストールする(対応していない為、今後用)
  sudo add-apt-repository ppa:ondrej/php
sudo apt -y install php8.3
sudo apt install -y php8.3-fpm php8.3-gd php8.3-dom php8.3-bcmath php8.3-mbstring php8.3-xml php8.3-zip php8.3-curl php8.3-mysql unzip

Apache2を削除する

PHPについてきますがNginxを使うので削除

sudo apt remove apache2

空のデータベースを作成する

DBファイルをインポートするので空のDBを作成しておく必要あり

sudo mysql

パスワードを入力だけは必ず変更
db名等にこだわりがあるか移行前に合わせてください。
db名、ユーザー名、パスワードを移行前と同じにしとけばenvの編集もいらないです。

create database exment_database;
grant all privileges on exment_database.* to exment@'localhost' identified by 'パスワードを入力';
flush privileges;
exit

新サーバーにExmentようのフォルダを作成しておく

前のサーバーと合わせておくとわかりやすいので調整してください。
rsyncでエラーがでる可能性があるの旧サーバーから接続するユーザー名にフォルダ権限を変更
userは変更してください。

sudo mkdir -p /var/www/exment
sudo chown -R user:user /var/www/exment

旧サーバーにて

メンテナンスモードへ移行する(推奨)

データの整合性をとるために念のためメンテナンスモードに入れる
昔はメッセージ入れらたんだけどね
/adminにurlを強制的にとばしているせいでどちらにしろ見れなかった(たぶん503エラーが表示)

sudo php artisan down --retry=60

解除するときは

sudo php artisan up

バージョン指定がいる場合

phpが複数入っている場合は忘れずに

sudo php8.2 artisan down --retry=60

データを移行する

rsyncを使います。
今まで使用してたサーバーから新しいサーバーに向けて実行します

認証鍵の場合

コマンドは旧サーバーから実行する必要があります。
鍵ファイルは一時的に旧サーバーに転送してください。
ユーザー名@新サーバーIPは確実に変更してください。例(momijiina@192.168.1.150)
さっき作成したフォルダに転送するのでさっきの例ならuser@192.168.1.150を使います
exmentフォルダの中身を転送するのでexment/を指定しています。

sudo rsync -avz --delete -e "ssh -i /path/to/your/private_key -p 22" /var/www/exment/ ユーザー名@新サーバーIP:/var/www/exment/

Are you sure you want to continue connecting (yes/no/[fingerprint])? と聞かれますyesにすると次回から聞かれません パスフレーズを設定している場合はパスフレーズ入力を求められます。(パスワード認証の場合も)

パスワードの場合

コマンドは古いサーバーから実行する必要があります。 ユーザー名@新サーバーIPは確実に変更してください。例(momijiina@192.168.1.150)

sudo rsync -avz --delete -e "ssh -p 22" /var/www/exment/ ユーザー名@新サーバーIP:/var/www/exment/

Are you sure you want to continue connecting (yes/no/[fingerprint])? と聞かれますyesにすると次回から聞かれません
パスフレーズを設定している場合はパスフレーズ入力を求められます。(パスワード認証の場合も)

DBを移行する

旧サーバーでバックアップ

ここもユーザー名(exment),パスワード(password),データベース名(exment_database)とgzip保存先は調整、変更してください。

sudo mysqldump -u exment -p'password' exment_database \
--single-transaction \
--routines \
--events \
--hex-blob \
--default-character-set=utf8mb4 \
| gzip > /var/backups/exment/db/exment_db_$(date +\%F_\%H-\%M-\%S).sql.gz

gzipで新サーバーにて解凍してデータベースへ

手段(scp,ftp)は何でもいいのでバックアップDBを新サーバーへ

解凍する

sudo gzip -d exment_db_xxxx.sql.gz

DBを取り込む

データがたくさんあると5分くらいかかるかも。

sudo mysql -u exment -p exment_database < exment_db_xxxx.sql

取り込みでエラーが出る場合

エラーがでるならrootで取り込んだ方がいいです。
私はでましたね
エラー例(ERROR 1227 (42000) at line 5028: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation)
もしrootでやっても駄目ならdb削る作業がいります。

sudo mysql -u root -p exment_database < exment_db_xxxx.sql

フォルダの権限を変更(転送完了後)

転送が完了したらWebサーバーと同じ権限ユーザーに

sudo chown -R www-data:www-data /var/www/exment

他に必要なこと(自分用)

通常インストールと同様にnginxの設定やcomoser,phpのインストール設定

Exmentを旧バージョンにする(ダウングレード)

composer require exceedone/exment=v6.2.0
php artisan exment:update

さらにphpのバージョンを指定するメモ

php8.2 $(which composer) require exceedone/exment=v6.2.0
php8.2 artisan exment:update

最新版に戻す

composer require exceedone/exment
php artisan exment:update

さらにphpのバージョンを指定するメモ

php8.2 $(which composer) require exceedone/exment
php8.2 artisan exment:update