まとめ
ActivityPub系サーバーの運営をやめる際は410を返すこと、リソースを消去すること、VPSやVMの息の根を完全に止めることを意識すると安全です。
はじめに
昨今MisskeyやMastodon等のActivityPub系サーバーがどんどん話題になっていき、セルフホストを始めてみようかな♪という方へ向けたサーバーの立て方の解説や、VPSでワンコマンドで設立できるサービスが登場し増え始めました。
一方で、サーバーを辞める際の想定といった記事は現段階では比較的少ないように見受けられます。
これから建てようとしてる、今運営してる方へ辞める話なんて不謹慎だ😡というお叱りを頂く事があるのですが、物理的なサーバーの破損や、法的、金銭的な問題でやむを得ず運営を続けられないといった場合も含めて勘案し運営を行っておくと有事の場合にスムーズに対応できますので悪しからずご理解頂ければ幸いです。
部分的であれSNSは個人情報を取り扱う性質を持っているほか、特にActivityPubに関しては連合(federation)と呼ばれる世界中のサーバーと相互で通信する性質を持っているため、運営をお辞めになる際は適切に閉じておくと円満に幕を閉じられると思います。
以下より順を追ってご紹介していきます。
尚、今回は不特定多数のユーザーを招き入れる想定で書きます。身内だけで運営している場合など若干想定と異なる場合は適宜読み替えていただけると幸いです。
サーバー閉鎖の告知
もし、サーバーが稼働しており、閉鎖する日時が後日である場合は、ユーザーに対して閉鎖の告知を行います。
運営しているサーバーが扱っているサービスによっては、標準でアカウント引っ越し機能等が搭載されているものがあり、ユーザーはそれを使用することで新たなサーバーに既存のユーザーデータを移行することが出来ます。
また、アップロードしたファイルや投稿内容を保存する猶予を設けておくとユーザーが予期しないデータの消失が防げるでしょう。
告知に関しては以下の点がポイントになるでしょう。
必ず誰でも閲覧できる場所で告知する
閉鎖の告知はお知らせやサイトのトップページ、公式アカウント等、なるべく見逃しにくい場所で行うようにしましょう。
一部のユーザーに限定的に伝えるといった告知を行った場合、思わぬ場所で被害を被る利用者が発生する可能性がございます。
ユーザーが対応できる期間を十分に持たせる
ユーザーがデータを保存したり移行したりする期間を十分考慮して閉鎖日程を設けておくと、ユーザーのスケジュールの都合上身辺整理が間に合わなかったという事例を回避できます。
概ね2週間程度の猶予をもって閉鎖日程を決めておくと十分でしょう。
閉鎖後の説明を行う
サーバーを閉鎖した後、サーバーにあったデータを含め管理者がどういった取り扱いをするのかをユーザーにお伝えする事も重要です。
ユーザーデータの中には個人情報が含まれている以上、不適切な取り扱いがなされると不利益を被るのは明らかですので、明確にデータを消去するといった内容を告知しておけば安心につながります。
また、他サーバーの管理者が閉鎖日に手動で情報の配送を停止することも想定されますので、ユーザーに向けて、サーバー管理者に向けて説明を行っておくと円滑に準備が進みます。
特にサブスクリプション等で運営費を頂いている場合は金銭的な契約が絡んでいますので詳細なご説明をされるとトラブル防止につながります。
ステータス410を返す
いざサーバーを閉鎖する日、
410ステータスを運営中のドメインに付与させるという手続きがございます。
410 Gone って何?
HTTPステータスコード410(Gone)は、サーバーやクライアントが要求してきたリソースが完全に消去されていて、永久にそのリソースが返ってこないよという旨の内容をサーバー側が応答するものです。
今回の場合はサーバーのサービスが終了し、二度と復活することはございませんという旨をサーバーやリクエストを行った人に伝える効果を持っています。
ステータス404との違いは「永久に帰ってこない」という部分にあります。
ActivityPubにおける410
ActivityPub系のサーバーにおいて410を返すといった処理は、「サーバー辞めました」という旨を連合しているサーバーに明示する役割を持っています。
基本的にActivityPubサーバーは連合を確立すると相互で通信を行うことによって通信を確立します。
感覚的にはこんな感じですね。
しかしながら、一時的にサーバーが止まっていたりすると、相互で通信を行うことができないので、相手サーバーが復活するまでの間情報を保持して、復活した後に順番に処理をしていく挙動をします。主にジョブキューがこの役割を担います。
一時的なサーバーの停止の場合(404,521,522エラーの場合)は復旧後に情報を配るために情報を保持しておく必要があるため、意味のある情報の保持になりますが、相手側のサーバーが閉鎖されている場合、連合先のサーバーはずっと情報を溜め続ける事になります。
これは、サーバー側からはサーバーが閉鎖されたか否かを適切に判別することができないからです。
既に存在しないゾンビサーバーに対してひたすら「元気ですか!?」とリクエストを送ることになりますので、ユーザー数、連合数に比例してどんどん相手サーバーのリソースに負担をかけていきます。
ActivityPubにおける連合は管理者同士の協力のもと運営されている点もありますので、サーバーを閉鎖する際に410を返すように設定しておくことで、サーバーが閉鎖されたことを相手に明示し、リソースの負担をなるべく軽減させることができます。
また、Misskey等の一部サービスではサーバー側が自動的に410ステータスを認識して配送停止処理を行う事が出来るので余程の事情が無い限り設定しておくようにしましょう。
410の返し方
いずれもサーバーのリソースを消去する前に実行してください。
サーバーで直接返す
業務で運用していたり、サーバーを保持している場合に使用する手段です。
主にnginx等のリバースプロキシを使って410を返すように設定します。
サーバーを閉鎖するためにサーバーを借りないといけないといった想定はあまり無いと思いますので、特殊な事情がない限り以下の選択肢をお勧めします。
Vercelで410Goneを返す(おすすめ)
eai04191さんのvercel-410というリポジトリをフォークして、vercel上でデプロイ、運営していたドメインに結び付けるといった閉鎖方法です。
まなさすさんが紹介された閉鎖方法で、様々な場所で活用されているのを見受けます。
導入方法に関してもまなさすさんが詳細に説明されているので、サクッと導入できると思います。ぜひご活用ください。
Nyagone(にゃごーん)を使う
先ほどの閉鎖方法はVercelを使った閉鎖でしたが、こちらはNetlifyを使います。
Netlifyも基本的に無料でデプロイして独自ドメインで管理できるサービスとなっておりますのでこちらを使って410を返すことも可能です。
こちらは僕が必要に応じて作ったものなので、Work Only My Machine である可能性がありますが、ご利用いただければとてもうれしいです。
Vercelと同様NetlifyへGithubアカウントを連携する必要があるので、上記のページで登録を済ませます。
次に、Githubでこちらのリポジトリをフォークして、自身のgithubアカウントにnyagoneを追加します。
フォークが済んだらNetlifyにてAdd new siteを押し、Import from existing projectへ移動します。
続いてGithubリポジトリを選択、Githubとの連携が完了するとリポジトリ一覧が表示されるのでフォークしたリポジトリを選びます。
デプロイページに移動するので、何も変更せずそのままデプロイ
デプロイが完了すると管理ページに飛びますので、レフトサイドバーにあるDomain managementを選択。
続いてAdd domainを選択し、ご自身が運営していたサーバーのドメインを入力します。
Verifyボタンを押せば、ドメインマネジメントのページに戻ります。この際に⚠️マークが出るのでそこを押します。
すると、入力したドメインをNetlifyでデプロイしたリポジトリに結び付けるように促されるので、画面の指示に従ってCloudflareやドメインのコントロールパネルのDNS設定の部分に適当な値をコピペします。
入力が済み、通信が確立されたら、Netlify側が自動でSSL設定を行い通信可能な状態になります。
これで設定は完了です。
動作が確認出来たらサーバーに設定してあった既存のDNSを消去して、410が優先して表示されるようにします。
村上さんのGoneページを使う(現行では使用不可)
MisskeyHQを運営されている村上さんが410を行うために独自のサーバーを立てられていました。
DNS設定でCNAMEを410.arkjp.net
と設定すれば410を表示できるといった一番簡単な方式でしたが、現在確認したところ404が表示されてしまっているため使用できません。
今後復旧する可能性がありますのでこちらの方法を使用される場合は一度直接アクセスしてみて試してみてください。
リソースの消去
410の設定がすんだらリソースを消去します。
VPSやVMを使用する場合
VPSやVMを使用している場合はリソースを停止して消去します。
スナップショットを別途残している場合等はそちらも消去します。
AzureやAWSの場合、リソースを停止するだけでは課金状態が維持されてしまう可能性がございますので、必ずリソースグループ等を確認して消去されているかをチェックしてください。
また、別のクラウドソースなどにバックアップをエクスポートしている場合は、個人情報ですのでそちらも完全に消去しましょう。
リソース停止後、一か月は請求が来ていないか様子を見ておくと安心です。
自宅サーバーを使用する場合
サービスを停止した後、関連するデータはすべて消去します。
個人的には安全性の問題があるので可能な限りOSごと入れなおしてしまうのが理想だと思っていますが、SQLとユーザー、サービスデータを確実に消去できるならばそれで十分だと思います。
こちらも個人情報を取り扱っていますので、抜かりなく確認をしておくと安心です。
ドメインの取り扱い
410を出した後のドメインの扱いに関しては、様々な意見があると思いますのでそれぞれ納得のいくポリシーで管理してください。
基本的にアクティブな連合サーバーが、サーバーが閉じられたことを認知するまでにかかる期間は多くても1か月となりますので、ドメイン更新期限が迫っている場合はこちらの基準に合わせてご検討なさると宜しいと思います。
ただし、法人、官公庁等、今後ドメインを二次取得した方が悪用した場合に利用者に被害が及ぶような場合は、なるべく恒久的にドメインを保持し続ける必要がございます。
電気通信事業者の届け出の更新
法人などで電気通信事業者の届け出を行っている場合は、閉鎖に合わせて行政手続きを済ませておきましょう。
以上で諸々の閉鎖手続きは終了します。お疲れ様でした。
補足
これからサーバーを閉鎖される方へ
苦渋の決断だったと思います。運営お疲れさまでした。
早急に処理を行うと焦りが生じリソースの停止に失敗したり、適切に410を返せなかったりと弊害も大きいと思いますので、余裕をもって閉鎖の準備を進められることをお勧めします。
一人で手続きを進めるのが難しい場合には、DiscordやMatrix等でサーバー管理者で集ったコミュニティが複数ございますので是非ご活用ください。
サーバー壊れちゃって告知もできなかった場合
サーバーの突然の破損により復旧が困難な場合、Fediverseユーザーは様々な場所にアカウントを持っている可能性があるため、比較的大きなサーバーで告知を行い拡散してもらうのが有効です。
また、SNSの告知だけでは確実に届かない可能性がございますので、410を表示しているページの文言を弄る等して利用者がアクセスした際に必要な情報が取得できるようにしておく必要がございます。
閉鎖案内テンプレート
こちらはあくまで一例ですので実際の状況に応じて適宜書き換えを行っていただけると幸いです。
国際的なサーバーであった場合は英語版も用意しましょう。
[サービス終了のお知らせ]
いつも<サービス名>をご利用いただき、誠にありがとうございます。この度、大変残念ながら、<サービス名>は終了することとなりましたことをお知らせいたします。
[終了日]
サービスの提供は、<200X/XX/XX XX時XX分>をもちまして終了させていただきます。
終了日までにアカウントの移行やデータの消去をお願いします。
尚、終了日当日は回線が混雑する可能性がございますので余裕をもってお手続き頂けると幸いです。
[ユーザーデータの消去]
サービス終了日以降、ユーザーのデータは適切に消去されます。個人情報の取り扱いにつきましては、プライバシーポリシーに基づいて適切に処理いたしますので、ご安心ください。
[サブスクリプションについて]
ご利用中のサブスクリプションにつきましては、サービス終了までの期間にお支払いいただいた料金につきまして、未使用分の返金を行います。詳細につきましては、<サブスクリプション情報へのリンク>からご確認いただけますようお願い申し上げます。
終了に関するご不明点やご質問がございましたら、お気軽にお問い合わせください。サポートチームが対応させていただきます。
改めまして、長い間のご愛顧、誠にありがとうございました。今後とも、何卒よろしくお願い申し上げます。
敬具
<サービス提供者名もしくはチーム名>
参考にしたサイト
https://note.com/thetalemon/n/nacbe6ee28888
まなさすさんが執筆された閉鎖に関する解説ページです。詳細な手順で解説なさっているのでとても参考になりました。
https://seritude.com/410-gone/
芹式部(せりしきぶ)さんが執筆なさった閉鎖に関する解説ページです。Fediverseにおける410の必要性が詳細に記載されています。