静的セルフホスティングのチュートリアル: Docker、SQLite/Postgres、Caddy HTTPS、およびバックアップ

静的セルフホスティングの実践ガイド。Docker/VPS 導入、SQLite と Postgres の選択、Caddy HTTPS、永続ボリューム、バックアップとリカバリ、オンライン受け入れを紹介します。

Instatic によるこのチュートリアルは、タイトルにある特定のタスクに焦点を当てています。自己ホスト型 Instatic には、アプリケーション、データベース、アップロードされたファイル、およびリバース プロキシが含まれます。データベースのみをカバーするバックアップでは、復元できない添付ファイルや構成のギャップが残ります。

以下は、テスト環境と取り消し可能なデータを使用したデモンストレーションです。アカウント、キー、マシン制御、投資、または緊急通信が関係する場合は、手動で確認する必要があります。

最初に SQLite か Postgres かを決定します

このセクションでは、「SQLite と Postgres のどちらを先に決めるか」についてのみ説明します。まず現在の状態を保存してから、最小限のテストを実行します。複数の条件を同時に変更しないでください。

1
docker version

インスタティックの場合、結果を判断するときにこの境界を考慮する必要があります。セルフホスト型インスタティックには、アプリケーション、データベース、アップロードされたファイル、およびリバース プロキシが含まれます。データベースのみをカバーするバックアップでは、復元できない添付ファイルや構成のギャップが残ります。

結果が再現できない場合は、バージョン、入力、ログを記録し、テストの範囲を絞ります。

スタンドアロン試用版に SQLite を選択できるのはなぜですか?

次の順序で実行することをお勧めします。

  1. 実際のバージョンとソースを確認します。
  2. テスト アカウント、テスト ディレクトリ、またはテスト デバイスを使用します。
  3. 取り消し可能なアクションを実行します。
  4. 出力、終了コード、またはスクリーンショットを保存します。
  5. 変更を元に戻して再確認します。
1
Get-ChildItem -Force .

完了基準は、「単一マシンのトライアルに SQLite を選択できる理由」です。コマンドが単にエラーを報告しないのではなく、検証可能な結果を​​取得します。

多くの人が長期的に使用するために Postgres を評価する理由

チェック項目 合格基準 停止信号
多くの人が長期間使用した後で Postgres を評価する理由 入力、出力、権限の範囲をクリアする ツールが自動で操作範囲を拡大
出典 公式ウェアハウスまたは元のデータに戻すことができます 未知の鏡や受け売りの結論に頼る
セキュリティ ログにシークレット値がありません トークン、Cookie、またはプライベート データが存在する
回復 実行前の状態に戻る機能 バックアップや元に戻す方法はありません
1
docker volume ls

停止信号が表示された場合は、最初に再開し、次のステップに進まないでください。

Docker Compose を開始する前に環境変数を確認する

このセクションでは、「Docker Compose を開始する前の環境変数の確認」についてのみ説明します。まず現在の状態を保存してから、最小限のテストを実行します。複数の条件を同時に変更しないでください。

1
git grep -n -I 'SECRET\|PASSWORD\|DATABASE_URL' -- .

インスタティックの場合、結果を判断するときにこの境界を考慮する必要があります。セルフホスト型インスタティックには、アプリケーション、データベース、アップロードされたファイル、およびリバース プロキシが含まれます。データベースのみをカバーするバックアップでは、復元できない添付ファイルや構成のギャップが残ります。

結果が再現できない場合は、バージョン、入力、ログを記録し、テストの範囲を絞ります。

アプリケーション ポートをループバック アドレスにのみバインドします

次の順序で実行することをお勧めします。

  1. 実際のバージョンとソースを確認します。
  2. テスト アカウント、テスト ディレクトリ、またはテスト デバイスを使用します。
  3. 取り消し可能なアクションを実行します。
  4. 出力、終了コード、またはスクリーンショットを保存します。
  5. 変更を元に戻して再確認します。
1
netstat -ano

完了標準は、コマンドが単にエラーを報告しないのではなく、「アプリケーション ポートをループバック アドレスにバインドするだけ」で検証可能な結果を取得することです。

初回起動後に移行ログを確認する

チェック項目 合格基準 停止信号
最初の起動後に移行ログを確認します。入力、出力、権限の範囲をクリアする ツールは操作範囲を自動的に拡張します
出典 公式ウェアハウスまたは元のデータに戻すことができます 未知の鏡や受け売りの結論に頼る
セキュリティ ログにシークレット値がありません トークン、Cookie、またはプライベート データが存在する
回復 実行前の状態に戻る機能 バックアップや元に戻す方法はありません
1
docker compose logs --tail 100

停止信号が表示された場合は、最初に再開し、次のステップに進まないでください。

テスト コンテンツを作成し、添付ファイルをアップロードする

このセクションでは、「テスト コンテンツの作成と添付ファイルのアップロード」についてのみ説明します。まず現在の状態を保存してから、最小限のテストを実行します。複数の条件を同時に変更しないでください。

1
docker compose ps

インスタティックの場合、結果を判断するときにこの境界を考慮する必要があります。セルフホスト型インスタティックには、アプリケーション、データベース、アップロードされたファイル、およびリバース プロキシが含まれます。データベースのみをカバーするバックアップでは、復元できない添付ファイルや構成のギャップが残ります。

結果が再現できない場合は、バージョン、入力、ログを記録し、テストの範囲を絞ります。

Caddy はアプリケーション ポートのみをプロキシします

次の順序で実行することをお勧めします。

  1. 実際のバージョンとソースを確認します。
  2. テスト アカウント、テスト ディレクトリ、またはテスト デバイスを使用します。
  3. 取り消し可能なアクションを実行します。
  4. 出力、終了コード、またはスクリーンショットを保存します。
  5. 変更を元に戻して再確認します。
1
caddy validate --config Caddyfile

完了基準は、コマンドがたまたまエラーを報告しないということではなく、「Caddy がアプリケーション ポートのみをプロキシし」、検証可能な結果を取得することです。

HTTPS が通常であるということは、アプリケーションが安全であることを意味するわけではありません

チェック項目 合格基準 停止信号
通常の HTTPS は、アプリケーションが安全であることを意味するものではありません。入力、出力、権限の範囲が明確 ツールが自動的に操作範囲を拡張
出典 公式ウェアハウスまたは元のデータに戻すことができます 未知の鏡や受け売りの結論に頼る
セキュリティ ログにシークレット値がありません トークン、Cookie、またはプライベート データが存在する
回復 実行前の状態に戻る機能 バックアップや元に戻す方法はありません
1
curl.exe -I https://example.com

停止信号が表示された場合は、最初に再開し、次のステップに進まないでください。

データベースのバックアップとファイルのバックアップは別々に実行されます。

ここでは「データベースバックアップとファイルバックアップの別々の実行」についてのみ説明します。まず現在の状態を保存してから、最小限のテストを実行します。複数の条件を同時に変更しないでください。

1
docker volume ls

インスタティックの場合、結果を判断するときにこの境界を考慮する必要があります。セルフホスト型インスタティックには、アプリケーション、データベース、アップロードされたファイル、およびリバース プロキシが含まれます。データベースのみをカバーするバックアップでは、復元できない添付ファイルや構成のギャップが残ります。

結果が再現できない場合は、バージョン、入力、ログを記録し、テストの範囲を絞ります。

空のディレクトリの回復訓練を実行する

次の順序で実行することをお勧めします。

  1. 実際のバージョンとソースを確認します。
  2. テスト アカウント、テスト ディレクトリ、またはテスト デバイスを使用します。
  3. 取り消し可能なアクションを実行します。
  4. 出力、終了コード、またはスクリーンショットを保存します。
  5. 変更を元に戻して再確認します。
1
docker compose config

完了基準は、コマンドがエラーを報告しないだけではなく、「空のディレクトリ回復ドリルを実行」して検証可能な結果を取得することです。

イメージをアップグレードする前に現在のラベルを修正しました

チェック項目 合格基準 停止信号
画像をアップグレードする前に現在のラベルを修正しました 入力、出力、権限の範囲をクリアする ツールは操作範囲を自動的に拡張します
出典 公式ウェアハウスまたは元のデータに戻すことができます 未知の鏡や受け売りの結論に頼る
セキュリティ ログにシークレット値がありません トークン、Cookie、またはプライベート データが存在する
回復 実行前の状態に戻る機能 バックアップや元に戻す方法はありません
1
docker compose images

停止信号が表示された場合は、最初に再開し、次のステップに進まないでください。

移行が失敗した場合に繰り返し再起動しないでください

このセクションでは、「移行が失敗した場合に繰り返し再起動しない」についてのみ説明します。まず現在の状態を保存してから、最小限のテストを実行します。複数の条件を同時に変更しないでください。

1
docker compose logs --since 10m

インスタティックの場合、結果を判断するときにこの境界を考慮する必要があります。セルフホスト型インスタティックには、アプリケーション、データベース、アップロードされたファイル、およびリバース プロキシが含まれます。データベースのみをカバーするバックアップでは、復元できない添付ファイルや構成のギャップが残ります。

結果が再現できない場合は、バージョン、入力、ログを記録し、テストの範囲を絞ります。

SQLite ロック エラーで同時実行性を特定する方法

次の順序で実行することをお勧めします。

  1. 実際のバージョンとソースを確認します。
  2. テスト アカウント、テスト ディレクトリ、またはテスト デバイスを使用します。
  3. 取り消し可能なアクションを実行します。
  4. 出力、終了コード、またはスクリーンショットを保存します。
  5. 変更を元に戻して再確認します。
1
docker compose logs | Select-String -Pattern 'locked'

完了基準は、コマンドがエラーを報告しないことではなく、「SQLite ロック エラーで同時実行性を特定する方法」に関する検証可能な結果を取得することです。

Postgres 接続障害の階層的なトラブルシューティング

チェック項目 合格基準 停止信号
Postgres 接続障害の階層的なトラブルシューティング 入力、出力、および権限の範囲をクリアする ツールは操作範囲を自動的に拡張します
出典 公式ウェアハウスまたは元のデータに戻すことができます 未知の鏡や受け売りの結論に頼る
セキュリティ ログにシークレット値がありません トークン、Cookie、またはプライベート データが存在する
回復 実行前の状態に戻る機能 バックアップや元に戻す方法はありません
1
2
docker compose ps
docker compose logs --tail 50

停止信号が表示された場合は、最初に再開し、次のステップに進まないでください。

オンラインにした後の最終回復チェックリスト

このセクションでは、「稼働後の最終リカバリ チェックリスト」のみを扱います。まず現在の状態を保存してから、最小限のテストを実行します。複数の条件を同時に変更しないでください。

1
docker compose config --quiet

インスタティックの場合、結果を判断するときにこの境界を考慮する必要があります。セルフホスト型インスタティックには、アプリケーション、データベース、アップロードされたファイル、およびリバース プロキシが含まれます。データベースのみをカバーするバックアップでは、復元できない添付ファイルや構成のギャップが残ります。

結果が再現できない場合は、バージョン、入力、ログを記録し、テストの範囲を絞ります。

アップロード ディレクトリのアクセス許可エラーを見つける方法

次の順序で実行することをお勧めします。

  1. 実際のバージョンとソースを確認します。
  2. テスト アカウント、テスト ディレクトリ、またはテスト デバイスを使用します。
  3. 取り消し可能なアクションを実行します。
  4. 出力、終了コード、またはスクリーンショットを保存します。
  5. 変更を元に戻して再確認します。
1
docker compose exec app id

完了基準は、コマンドが単にエラーを報告しないのではなく、「アップロード ディレクトリのアクセス許可エラーを特定する方法」を確認して検証可能な結果を取得することです。

逆生成後の実際のクライアント IP は信頼できるものですか?

チェック項目 合格基準 停止信号
逆生成後の実際のクライアント IP は信頼できるものですか? 入力、出力、および権限の範囲をクリアする ツールは操作範囲を自動的に拡張します
出典 公式ウェアハウスまたは元のデータに戻すことができます 未知の鏡や受け売りの結論に頼る
セキュリティ ログにシークレット値がありません トークン、Cookie、またはプライベート データが存在する
回復 実行前の状態に戻る機能 バックアップや元に戻す方法はありません
1
docker compose logs --tail 100

停止信号が表示された場合は、最初に再開し、次のステップに進まないでください。

テスト インスタンスを削除する前に、バックアップが読み取り可能であることを確認してください

このセクションでは、「テスト インスタンスを削除する前に、バックアップが読み取り可能であることを確認する」ことのみを扱います。まず現在の状態を保存してから、最小限のテストを実行します。複数の条件を同時に変更しないでください。

1
Get-Item .\backup\* -ErrorAction SilentlyContinue

インスタティックの場合、結果を判断するときにこの境界を考慮する必要があります。セルフホスト型インスタティックには、アプリケーション、データベース、アップロードされたファイル、およびリバース プロキシが含まれます。データベースのみをカバーするバックアップでは、復元できない添付ファイルや構成のギャップが残ります。

結果が再現できない場合は、バージョン、入力、ログを記録し、テストの範囲を絞ります。

インスタティックの最終チェック

  • 使用されたバージョンとソースが文書化されています。
  • テスト入力と正式なデータは分離されています。
  • コマンド、設定と実際の出力を対応させることができます。
  • 障害が発生したパスは少なくとも 1 回アクティブにテストされました。
  • キー、アカウント、個人データは Git やログに入力されません。
  • アップグレード、停止、再開のための明確なアクションがあります。

それでも結果がどのように生成されるかを説明できない場合は、アクセス許可を拡張したり、既存の安定したプロセスを置き換えたりせずに、Instatic をテスト環境に維持し続けます。