laravel + livewire + tailwind - データの backup

(2025-01-12)

ほとんど完成したのですが、やはりデータベースと画像のバックアップは必要です。

mysql バックアップ用のシェルスクリプト

他に動かしているシェルスクリプトをそのまま流用します。

xserver 上に mysql dump ファイルを作成し、1週間を過ぎたら削除します。つまり最大で 7 個のバックアップが維持されます。

dbbak.sh
#!/bin/sh
period=7
dirpath='~/moheno.site/mysql_bak'
filename=`date +%y%m%d`
mysqldump -uheno -pmoheno henomemo > $dirpath/$filename.sql
chmod 700 $dirpath/$filename.sql
oldfile=`date --date "$period days ago" +%y%m%d`
rm -f $dirpath/$oldfile.sql

実行できるように、

chmod +x dbbak.sh

xserver の cron 設定で 1 日に 1 回定時で実行します。

NAS から xserver にアクセスして rsync

ローカルで使っている 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_bak
rsync -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 に設定し、ローカルから xserver に scp します。

Terminal window
scp -r -i ~/.ssh/moheno.key -P 10022 ~/sample moheno@sv11123.xserver.jp:/home/moheno/sample.site

後は、public を削除したり ssl にすれば完成です。

これができれば、いろんなことができると思います。

例えば、単なるメールリンクなんかは簡単にできますし、画像もつけることができます。

アルバムなんかも作ることができます。

パスワードを 4 桁にする

デフォルトではパスワードは 8 桁の数字が必要ですが、それほどセキュリティを上げる必要がなければパスワードを 4 桁程度にしてもいいかもしれません。

app/Http/Controllers/Auth/PasswordConroller.php を以下のようにすれば、パスワードを 4 桁以上にできます。

app/Http/Controllers/Auth/PasswordConroller.php
<?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');
}
}