ほとんど完成したのですが、やはりデータベースと画像のバックアップは必要です。
他に動かしているシェルスクリプトをそのまま流用します。
xserver 上に mysql dump ファイルを作成し、1週間を過ぎたら削除します。つまり最大で 7 個のバックアップが維持されます。
#!/bin/shperiod=7dirpath='~/moheno.site/mysql_bak'filename=`date +%y%m%d`mysqldump -uheno -pmoheno henomemo > $dirpath/$filename.sqlchmod 700 $dirpath/$filename.sqloldfile=`date --date "$period days ago" +%y%m%d`rm -f $dirpath/$oldfile.sql
実行できるように、
chmod +x dbbak.sh
xserver の cron 設定で 1 日に 1 回定時で実行します。
ローカルで使っている ssh キーを NAS に置いて、xserver から NAS へデータをコピーします。
これまでは python を使って scp してましたが、rsync の方が遥かに簡単です。
しかも、rsync なので差分しかアップしません。
#!/bin/sh
rsync -avzu -e 'ssh -p 10022 -i ~/.ssh/moheno.key' --delete --checksum moheno@sv11123.xserver.jp:~/heno.site/heno/storage/app /volume1/backup/heno_bakrsync -avzu -e 'ssh -p 10022 -i ~/.ssh/moheno.key' --delete --checksum moheno@sv11123.xserver.jp:~/heno.site/mysql_bak /volume1/backup/heno_bak
これを NAS のタイムスケジューラで 1 日 1 回実行します。
私は 2 台の NAS を rsync しているので、ファイルがアップされるとほぼ同時にもう一台の NAS にも rsync され、 さらに 1 日 1 回外付け HDD に hyperBackup しているので、よほどのことがない限りデータが消失することはないと思います。
ドメイン名をどこかで購入して xserver に設定し、ローカルから xserver に scp します。
scp -r -i ~/.ssh/moheno.key -P 10022 ~/sample moheno@sv11123.xserver.jp:/home/moheno/sample.site
後は、public を削除したり ssl にすれば完成です。
これができれば、いろんなことができると思います。
例えば、単なるメールリンクなんかは簡単にできますし、画像もつけることができます。
アルバムなんかも作ることができます。
デフォルトではパスワードは 8 桁の数字が必要ですが、それほどセキュリティを上げる必要がなければパスワードを 4 桁程度にしてもいいかもしれません。
app/Http/Controllers/Auth/PasswordConroller.php を以下のようにすれば、パスワードを 4 桁以上にできます。
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;use Illuminate\Http\RedirectResponse;use Illuminate\Http\Request;use Illuminate\Support\Facades\Hash;
class PasswordController extends Controller{ /** * Update the user's password. */ public function update(Request $request): RedirectResponse { $validated = $request->validateWithBag('updatePassword', [ 'current_password' => ['required', 'current_password'], 'password' => ['required', 'string', 'min:4', 'confirmed'], ]);
$request->user()->update([ 'password' => Hash::make($validated['password']), ]);
return back()->with('status', 'password-updated'); }}