{
"$type": "site.standard.document",
"content": {
"$type": "app.wtr.content.markdown",
"markdown": "おはようございます。waturaです。突然ですがバックアップは大切です。バックアップは1つではなくていくつも取るべきです。 \nそして、ときおりバックアップから復元する方法を復習しておくべきです。 \nさもなくば。。。\n\n## バックアップで使っているもの\n\nBlueskyやGotosocial(Mastodon)をセルフホストしているので、バックアップはしっかり取る必要があります。\n\n### データのありか\n\n* Postgresql\n \n* SQLite\n \n* その他ファイル類\n \n\nSNS以外にも細々バックアップをとっておきたいものや、設定ファイル自体もバックアップをとりたかったのでとっています。\n\n### ツール\n\n* systemd\n \n* Restic\n \n* pg\\_dumpall\n \n\nこれらを使ってバックアップをとっています。 \nバックアップするファイルや接続に使う環境変数は以下のファイルに保存しています。\n\n* /etc/restic/backup.files\n \n* /etc/restic/backup.env\n \n\n### /etc/systemd/system/restic.service\n\nバックアップは10件くらいに抑えています。なお、Cloudflare R2の無料tierで運用しています。\n\n```\n[Unit]\nDescription=Restic backup\nAfter=syslog.target\nAfter=network-online.target\n\n[Service]\nType=oneshot\nUser=restic\nExecStart=/usr/bin/restic backup --files-from /etc/restic/backup.files\nEnvironmentFile=/etc/restic/backup.env\nAmbientCapabilities=CAP_DAC_READ_SEARCH\n\n[Install]\nWantedBy=multi-user.target\n```\n\nこれを**systemctl start restic**とかで、実行すると1回だけ実行できます。\n\n### タイマー実行\n\n**/etc/systemd/system/restic.timer \n**12時に実行するようにしてみています。\n\n```\n[Unit]\nDescription=Run Restic at 12:00 AM\n[Timer]\nOnCalendar=--* 0:00:00\n[Install]\nWantedBy=timers.target\n```\n\nPsqlのバックアップについては、pg\\_dumpallを呼び出すスクリプトを使ってresticに渡しています。 \nChatGPTにワンライナーをリファクタリングして!って渡したコードを貼っておきます。\n\n```\n\n#!/usr/bin/env bash\n\n# スクリプトのパラメータとしてホスト名を指定します。\nHOST_NAME=$1\n\n# PostgreSQLの全データベースをダンプするコマンド\nPG_DUMP_CMD=\"/usr/bin/sudo -u postgres /usr/bin/pg_dumpall --clean\"\n\n# gzipを使用してダンプファイルを圧縮するコマンド\nGZIP_CMD=\"gzip --rsyncable\"\n\n# resticを使用してバックアップを作成するコマンド\nRESTIC_CMD=\"/usr/bin/restic backup --host ${HOST_NAME} --stdin --stdin-filename postgres-${HOST_NAME}.sql.gz\"\n\n# ダンプ、圧縮、バックアップのプロセスを実行\n${PG_DUMP_CMD} | ${GZIP_CMD} | ${RESTIC_CMD}\n```\n\nこんな感じなのを毎日実行してバックアップを取るようにしました。\n\n戻す時は、psqlで流し込みとかファイルを置き換えるとかになります。\n\nという感じで、バックアップを取るようにしました。\n\nセルフホストで動いているサービスは基本、dockerで動いているので、物理的に壊れてもすぐに復帰できそうな感じになりました。\n\n### まとめ\n\n* バックアップは大切\n \n* リストアも大切\n \n* resticを使ってCloudFlare r2にアップロード\n \n* systemdで毎日自動実行\n \n\nという感じでセルフホストRPiのバックアップを行っています。"
},
"path": "/blog/nf598bbae2d61",
"publishedAt": "2024-03-15T00:00:00.000Z",
"site": "at://did:plc:c656e4nvjol7kh35tfmzkgpu/site.standard.publication/3mmnvl6ln3226",
"title": "バックアップ",
"updatedAt": "2026-05-25T07:15:08Z"
}