誰も確保しなかった管理者アカウント
作りたてのインスタンスに最初に登録した者が管理者になる。そしてホスト名は、証明書が発行された瞬間に証明書透明性ログへ公開されている。インストールが終わってから数分以内に登録を済ませ、それからサーバー設定で、登録が見知らぬ他人に開かれていないことを確認すること。

あらゆるカード決済プロセッサーとあらゆるホスト型の暗号通貨ゲートウェイは、あなたと顧客の間に入り、手数料を取り、誰がいくら支払ったかという一覧を保持し、いつでも止める権利を留保する。BTCPay Server は、それらを取り除くソフトウェアだ——オープンソースでセルフホスト、ノンカストディアルな決済プロセッサーであり、コインはサーバーが使うことのできないウォレットへ直接入る。匿名で借りたサーバー上に、動作するBitcoinとLightningのチェックアウトを用意する6つのステップ——予算を決めるノードの形、ウォッチオンリーの鍵、インバウンド流動性の問題、そしてLightningが破ってしまうバックアップの原則。サーバーの費用は月額$7.90。Debian 12でテスト済み。
選ぶ
フル、プルーニング、あるいは外部ノード
プロビジョニング
先にドメイン、それから4つのポート
デプロイ
1つのジェネレーター、1つのコマンド
接続
ウォッチオンリーの鍵、シードは決して渡さない
Lightning
チャネルとインバウンド容量
公開
チェックアウト、バックアップ、アップグレード
ブロックチェーン上の支払いには、間に入る会社は要らない。顧客がトランザクションに署名し、ネットワークがそれを承認し、資金はあなたのものになる——アクワイアラーもなく、決済ウィンドウもなく、支払いの可否を握る誰の承認も要らない。それこそがこの仕組みの要点であり、この技術がそもそも存在する理由である。
そのうえで、ストアは実際に支払いを受け取る必要があり、実務上の要件が一度に押し寄せてくる。支払いを見分けられるように、インボイスにはそれぞれ専用のアドレスが要る。誰かがチェーンを監視し、インボイスがいつ支払われたかを判断しなければならない。金額は、顧客が普段考えている通貨で提示され、送金ボタンを押すまでの間もつだけのレートを保っていなければならない。注文ステータスはストアへ戻ってこなければならない。そしてそれは、誰も見ていない朝の2時にも機能しなければならない。これらすべてを構築するのは一大プロジェクトだ。それを構築しないからこそ、ほとんど誰もがホスト型ゲートウェイに登録することになる——そして、1枚のフォームを埋める間に、そもそも存在しないように設計されていたはずの仲介者を、システムに戻してしまうのだ。
その仲介者が握っているものは、手数料以上のものであるだけに、はっきり述べておく価値がある。まずコインを握っている。少なくともペイアウトが実行されるまでは、つまりそれを遅らせることができるということだ。次に一覧を握っている——すべての顧客、すべての金額、すべてのタイムスタンプ、すべての商品を、あなたが読むことも消すこともできないデータベースの中に。あなたの本人確認情報も握っている。他人のお金を扱う会社は、それを収集することを義務付けられているからだ。そしてスイッチも握っている。利用規約は、あなたの事業をもう歓迎しないと決める権利を留保しているからだ——その決定はメールで届き、アカウントだけでなく残高にも適用され、実務上、異議を申し立てることはできない。
BTCPay Server は、まさにその問題だけに対する答えだ。自分のマシンで動かす、無料でオープンソースの決済プロセッサーであり、インボイスごとにアドレスを導出し、チェーンを監視し、法定通貨建ての価格を提示し、チェックアウトとAPIを公開し、Lightningを話す。あなたのコインを保持することは決してない。監視しているウォレットは、すでにあなた自身が保有しているものだからだ。暗号通貨での支払いを受け取る4つの方法と、それぞれの実際のコストは次のとおり。
| 項目 | ホスト型の暗号通貨ゲートウェイ | フッターに生アドレスを一つ | 他人のインスタンス上のBTCPay | 自分のVPS上のBTCPay |
|---|---|---|---|---|
| 誰がコインを保有しているか | ゲートウェイが、支払いが行われるまで | あなた | あなた——それは監視するだけで、使うことはできない | あなた——それは監視するだけで、使うことはできない |
| 誰があなたの取引を止められるか | ゲートウェイ経由、メールで | 誰もいない | インスタンスの運用者 | 誰もいない |
| 誰がすべての顧客と金額を見ているか | ゲートウェイが、永続的に | 誰でも見える——1つのアドレス、1つの公開の合計額 | インスタンスの運用者 | あなた |
| 身分証明書が必要 | はい、最初のペイアウトの前に | なし | 運用者が求めるものは何でも | なし |
| 取引ごとのコスト | 手数料の割合が、永遠に | 何もない | 何もない | ゼロ——月額$7.90の定額のみ |
| インボイスどうしを見分ける | はい | いいえ——手作業で突き合わせることになる | はい | はい |
| 選ぶ場面 | 運用をゼロにしたく、規約を受け入れる場合 | 寄付、年に数件程度 | ソフトウェアは欲しいが、サーバーは欲しくない場合 | 売上はあなたのものであり、その一覧もあなたのものだ |
2番目の列も冗談ではない——フッターに置いた1つのアドレスは、寄付リンクとしては本当にそれで十分であり、そうではないふりをするのは、誰も必要としていないソフトウェアを売りつけることに等しい。それが十分でなくなるのは、2人が同じ日に同じ金額を支払った瞬間、あるいは、自分の年間収入を誰でも合計できる公開の数字にしたくないと思った瞬間だ。
決済プロセッサーは、一つの問いに正直に答えられなければならない。このインボイスは支払われたか?それに答えるにはBitcoinネットワークを監視する必要があり、それを正しく行うには、誰かの言い分を信じるのではなく、自分でブロックを検証するノードを動かす必要がある。そのノードこそが、このプロジェクトのハードウェア予算のほぼすべてを占める——BTCPay自体とインデクサー、データベースを合わせても、その隣では誤差程度でしかない。
筋の通る構成が3つ、通らないものが1つある。アーカイブノードは、これまでに採掘されたすべてのブロックを保持する——2026年時点で優に700 GBを超え、年に約50 GBずつ増えていく。ブロックエクスプローラーも動かしたい場合や、過去のデータを分析したい場合に望ましいものであり、ストアにとってはオーバースペックだ。プルーニングノードは、すべてのブロックをまったく同じ方法でダウンロードし完全に検証したうえで、古いものを捨ててローリングウィンドウを保つ。セキュリティモデルは同一である——ここは誤解されがちな部分だ。「プルーニング」は「部分的」のように聞こえるが、そうではないからだ——そしてデプロイメントのジェネレーターには、これ向けの出来合いのフラグメントが用意されている。
外部ノードが3つ目だ。すでに自分で運用しているBitcoinノードを、プライベートな接続経由でスタックに向ける。すでにLightningノードガイドを実践済みなら、チェーンの写しを2つ持つ理由はなく、2台のサーバー間のメッシュVPNがそれらを接続するきれいな方法になる。筋が通らない構成は、見知らぬ他人の公開ノードにストアを向けることだ——それはあなたが監視しているすべてのアドレス、つまりあなたの売上を知ることになり、インボイスが支払われたかどうかについて嘘をつける立場にもある。
| デプロイメント | ディスク上のチェーン | 必要になる総ボリューム | 手放すことになるもの |
|---|---|---|---|
| プルーニング、最小のウィンドウ | ~5–25 GB | ~40 GB | 再スキャンと、エラーに対する余裕のすべて。最小の設定は推奨されない。 |
| プルーニング、約50 GBのウィンドウ | ~50 GB | ~80 GB | ストアが気づくようなものは何もない。分別のある下限。 |
| プルーニング、約100 GBのウィンドウ | ~100 GB | ~140 GB | 何もない。Lightningの余地もある、無理のない既定の選択。 |
| アーカイブ、全履歴 | 700 GB + | ~960 GB | ゼロ——ただし、それを毎月、永遠に支払い続けることになる。 |
| すでに運用している外部ノード | このサーバー上には何もない | ~40 GB | 独立性——チェックアウトが止まるのは、相手のサーバーが止まったときだけだ。 |
プルーニングノードは、捨ててしまったブロックを再スキャンできない。実際的には、デプロイより前のトランザクションを持つウォレットの履歴を再構築できないということだ——インデクサーは鍵を接続した日から先に向かってスキャンするので、そのアカウント宛ての古い支払いはストアに単純に現れない。ステップ04が推奨する通り、ストアに作りたてのアカウントを与えるのであれば、これは問題にならない。だが3年使ってきたウォレットを接続し、履歴の半分が消えているとなれば、本当に困惑する午後になる。どちらにするかは、インストールの前に決めておくこと、あとではなく。
もう一つの決定は、あとではなくここで下すべきだ。インストーラーが何を組み立てるかを変えてしまうからである——それは、初日からLightningをそもそも使うかどうかだ。オンチェーンのみでも完全な構成であり、そこから始めるのはまったく立派な選択だ。あとからLightningを追加することはサポートされており、それほど苦痛でもない。だがそれは独自の資金、独自のバックアップ規則を持つ、もう一つのデーモンであり、複雑な経路を持ち込む前に、まず単純な経路で本物のお金が届くことを証明しておくことには、十分な意味がある。
サーバーを注文する。パネルでは注文 → VPS → Garrisonと進み、イメージはDebian 12、ストアの記録を置きたい拠点を選ぶ——ヘルシンキ、ストックホルム、オスロ、レイキャビクのいずれかだ。Garrisonが正しい既定の選択である理由は、100 GBのプルーニングされたチェーンとLightningノード、データベースを、何年もディスクのことを考え直さずに動かせるからだ。Sentinelはより厳しいプルーニングでも動く。Bulwarkはアーカイブノード向けのティアだ。アカウント開設にメールアドレスは不要で、インボイスはMonero、Bitcoin、Lightning、あるいはほかのサポートされている資産で決済できる——これがこのプロジェクトならではの気持ちいい部分だ。暗号通貨の支払いを受け取るためのマシンを組み立てていて、その代金を暗号通貨の一つで支払っているのだから。
そのあと、何よりもまず最初の1時間のハードニングチェックリストを実行する——ポートを変更した上での鍵認証のみのSSH、無人アップグレード、既定拒否のファイアウォールだ。このサーバーはやがて、あなたのすべての顧客の記録と、実際の資金が入ったLightningノードの鍵データを保持することになる。パスワード認証のまま1週間放置していいサーバーではない。
次はDNSレコードだ。しかもインストーラーを実行したあとではなく、その前に済ませておく。チェックアウトを置くホスト名を決め——shop.example.com、pay.example.com、何でも構わない——VPSのアドレスへAレコードを向け、IPv6でも到達可能にしたいならAAAAレコードも加える。それが伝播するのを待つこと。インストーラーが設定するリバースプロキシは、初回起動時にそのまさに名前の証明書を取得しようとし、その名前がすでにこのマシンを指して解決することを要求するHTTPチャレンジを使う。まだ有効になっていないレコードは、初回インストールが分かりにくいエラーで終わる、最もありふれた原因だ。
このデプロイメントには、あとからドメインを変更するためのスクリプトが同梱されているので、これは致命的というより復旧可能な部類だ。一つのコマンドでは復旧できないのは、その先にあるすべてである——証明書は再発行され、これまで配ってきたすべてのペイボタンとWebhookのURLは古い名前を指したままになり、Lightningアドレスはドメイン上の名前なのでそれと一緒に変わり、ショッププラグインはすべて再設定が必要になる。何年もレターヘッドに載せ続ける覚悟のある名前を選ぶこと。そして、マシンが何をしているかを説明する新しいドメインより、すでに公開しているドメインのサブドメインを選ぶこと。
そのあと、まだ何も待ち受けていないうちにファイアウォールルールを書いておく。4つのポート、それだけだ。チェックアウトは必然的に公開のHTTPSエンドポイントになる——顧客のブラウザがそこへ到達できなければならないからだ——そしてポート80は、証明書の更新がそれを使うために開けたままにしておく。Lightningのピアツーピアポートが必要になるのは、ほかのノードがあなたに向けてチャネルを開けるようにしたい場合だけだが、ステップ05はそうすべきだと主張することになる。Bitcoinのピアツーピアポートはまったく開ける必要がない——あなたのノードはアウトバウンド接続だけで十分に機能し、インバウンドを開けても、見つけられやすくなるだけである。
ufw default deny incoming
ufw allow 47222/tcp # administrative SSH, moved off 22
ufw allow 80/tcp # ACME HTTP-01 challenge and the redirect
ufw allow 443/tcp # the checkout
ufw allow 9735/tcp # Lightning peer-to-peer, only if you want inbound channels
ufw enable
ufw status numbered
先に進む前に、リソースに関する注意点が2つある。サーバーにスワップがなければ与えておくこと——最初のブロックダウンロードはこのプロジェクトで最もメモリを食う時間であり、4 GBのRAMだけより、2 GBのスワップを添えた4 GBのほうがはるかにうまく振る舞う。そして、ステップ01のディスクの計算を、実際に注文したティアと照らし合わせておくこと。同期の途中でボリュームを埋め尽くしたノードは行儀よく失敗するのではなく、自分のインデックスを破損させてやり直すことになるからだ。
fallocate -l 2G /swapfile && chmod 600 /swapfile
mkswap /swapfile && swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
df -h / # confirm the volume matches step 01
公式のデプロイメントは、自分で編集するdocker-compose.ymlではない。これはジェネレーターだ——欲しいデプロイメントを環境変数で記述すると、スクリプトがフラグメントのライブラリからcomposeファイルを組み立てる——Bitcoin Core用、インデクサー用、PostgreSQL用、BTCPayアプリケーション用、Lightning実装ごとに1つずつ、リバースプロキシ用、そしてオプションの追加機能が長く連なったものだ。これは見た目より優れた設計である。アップグレードのたびに、誰かの変更を自分の変更にマージすることを求められるのではなく、ファイルが再生成されるからだ。それはまた、下にある環境変数のブロックこそがデプロイメントの本当の設定であり、ほかのインフラのメモと同じ場所に保管しておく価値があるということでもある。
リポジトリをクローンし、環境変数をエクスポートする。以下の各行は、ステップ01での決定にそのまま対応している——ホスト名はステップ02で向けたドメイン、ストレージフラグメントは選んだプルーニングウィンドウ、そしてLightning変数は実装のいずれか、あるいはオンチェーンのみで始めるなら完全に省略する。
mkdir BTCPayServer && cd BTCPayServer
git clone https://github.com/btcpayserver/btcpayserver-docker
cd btcpayserver-docker
export BTCPAY_HOST="pay.example.com" # exactly the name you pointed in step 02
export NBITCOIN_NETWORK="mainnet"
export BTCPAYGEN_CRYPTO1="btc"
export BTCPAYGEN_REVERSEPROXY="nginx"
export BTCPAYGEN_LIGHTNING="clightning" # or "lnd", or omit for on-chain only
export BTCPAYGEN_ADDITIONAL_FRAGMENTS="opt-save-storage-s" # ~50 GB pruned window
export BTCPAY_ENABLE_SSH=true
export LETSENCRYPT_EMAIL="you@example.com"
. ./btcpay-setup.sh -i
そのブロックにある2つの細部には、それぞれ一文を割く価値がある。. ./btcpay-setup.sh -i の先頭にあるドットはタイプミスではない——このスクリプトは実行されるのではなくsource されるため、それが設定する環境がシェルの中に残り、以降ヘルパーコマンドが機能するようになる。そしてストレージフラグメントの名前はバージョンに依存する——ジェネレーターは約100、50、25、5 GBにプルーニングするバリアントを提供してきたが、その名前はリリースのたびに調整されてきた。ブログ記事——この記事も含めて——からコピーした値を信用するのではなく、たった今クローンしたリポジトリの中のフラグメント一覧を読むこと。
インストーラーは数分かかり、大量のイメージを取得し、証明書を取得してすべてを起動する。そこから待ち時間が始まる——ストアが支払いを確認できるようになる前に、ノードはチェーンをダウンロードして検証しなければならず、プルーニングであっても分単位ではなく時間単位かかる。プルーニングは検証の作業を省くのではなく、検証したあとでブロックを捨てるだけだからだ。Webインターフェースはすぐに使えるようになり、同期中であることを示すバナーが表示される。それが消えるまで、本物のインボイスを発行しないこと。
./bitcoin-cli.sh getblockchaininfo | grep -E 'blocks|headers|verificationprogress|pruned'
docker ps --format '{{.Names}}\t{{.Status}}'
作りたてのインスタンスにはユーザーが1人もおらず、最初に登録したアカウントが管理者になる。自分がそれを確保するまでは、URLに到達した誰もがそれを行える——しかもそのURLは秘密ではない。証明書が発行された瞬間、ホスト名は公開の証明書透明性ログに載り、まさにこれを狙っている人々によって継続的に索引化・走査されている。何よりもまずサイトを開いて登録し、それからサーバー設定を確認して、登録が見知らぬ他人に開かれていないことを確かめること。これは本来5分で閉じるべき窓口だが、「まだ公開していないから」という理由で何日も開けっ放しにされがちだ。
設定を触っているうちに知っておく価値のある、任意のフラグメントが2つある。1つはTor隠しサービスを追加し、チェックアウトをクリアネットのアドレスに加えてv3オニオンアドレスでも到達可能にする——自分のドメインを解決したくない顧客に便利であり、オニオンサービスガイドと同じ発想だ。もう1つは2つ目の暗号通貨を追加する。どちらも設定方法は同じで、additional-fragments変数に追記してセットアップスクリプトを再実行するだけだ。ジェネレーターがcomposeファイルを再構築し、変更のあった部分だけを再起動する。
ストアを作成し、このページで実際に重要な唯一の決定を行う。BTCPayはBitcoinウォレットを紐づける2つの方法を提示する——既存のものを接続するか、新しく生成させてシードをサーバーに保持させるかだ。前者はウォッチオンリーであり、これこそが望ましい選択だ。後者は、見知らぬ相手に応答することが仕事のすべてである公開のインターネット向けマシンを、あなたの売上を保持するホットウォレットに変えてしまう。どれだけハードニングを施しても、それは割に合う取引にはならない。
この推奨の背後にある仕組みは、理解するに値するほど洗練されている。現代のウォレットは階層的だ——1つのシードが鍵の木構造を導出し、そこには拡張公開鍵——xpub、あるいはネイティブSegwit向けのzpub亜種——があり、そこからアカウント内のすべての受け取りアドレスを、署名する能力なしに計算できる。それをストアに渡せば、インボイスごとに新しいアドレスを生成し、それぞれへの支払いをチェーン上で監視し、残高を見せてくれるようになる。それは1サトシも動かすことができない。秘密鍵の側はあなたのウォレットか、ハードウェアデバイスの中にとどまり続け、外へ出ることは決してない。
そこで、Sparrow、Electrum、あるいはハードウェアウォレットのデスクトップアプリを開き、このストア専用の新しいアカウントを作成し、その拡張公開鍵をエクスポートする。ストアのウォレット設定で既存のウォレットを接続することを選び、その鍵を貼り付け、BTCPayが導出する最初の数個のアドレスを、自分のウォレットが示すものと突き合わせる。一致すれば導出パスは正しく、接続は完了だ。一致しなければ、スクリプトタイプを間違えている——xpubとzpubの違いは、まったく別の2組のアドレスの違いに等しい。
それは使うことができない、それがまさに重要な点だ——だが列挙することはできる。それを手に入れた者は、そのアカウントが将来使うすべてのアドレスを導出でき、したがって、あなたがそれを使い続ける限り、これまで受け取り、これから受け取るすべての支払いを読み取れる。それはストアの売上の恒久的で取り消せない開示であり、だからこそ接続するアカウントは、貯蓄を保有しているものではなく、ストア専用であるべきだ。鍵は機密として扱い、スクリーンショットやサポートチケットから遠ざけておくこと。もし漏洩してしまったら、望みをつなぐのではなく、ストアを新しいアカウントへ移すこと。
次はインボイス設定だ。ストアが実際にチューニングされるのはここである。有効期限は既定で15分前後であり、技術的な制限というよりレートロックだ——ボラティリティのある資産に対して、法定通貨建ての価格をどれだけ保持し続ける気があるかを表す。値動きの激しい市場では短くし、顧客の動きが遅いなら長くすること。確認数は、インボイスがいつ決済済みとみなされるかを決める——ゼロ確認は即時でコーヒー1杯には十分であり、1確認が通常の既定値、6確認は1時間待つほうが代替手段より安く済むような金額向けだ。不足払いの許容範囲を設定すると、わずかに不足したまま届いたインボイスも受け付けられるようになる。これは、顧客のウォレットが手数料を上乗せするのではなく金額から差し引く場合に絶えず起きる現象であり、ここにわずかな割合を設定しておくだけで、サポートメールの丸ごと一つのカテゴリーがなくなる。
そのあと、テストネットではなく実際のお金でテストする。ごくわずかな金額の支払いリクエストを発行し、スマートフォンのウォレットから支払い、インボイスがnewからprocessing、settledへと移り変わるのを見届ける。その1件の取引だけで、ノードが同期していること、導出パスが正しいこと、レートプロバイダーが機能していること、証明書がモバイルブラウザ上で有効であること、そしてお金が自分の管理するウォレットに届いたことの5つが証明される。ほかに、この5つを同時に証明してくれるものはない。
オンチェーンのBitcoinは400ドルのインボイスを見事に決済するが、4ドルのものはうまく決済できない——顧客は承認を待ち、購入額に対して無視できない割合になりかねない手数料を支払う。Lightningはその両方を逆転させる——決済は約2秒、手数料は1セントの何分の1という単位だ——だからこそ、小さなものを売るストアにはLightningが必要で、大きなものを売るストアには必要ないかもしれない。ステップ03でLightning実装を設定していれば、デーモンはすでに動いており、BTCPayもすでにそれに接続済みだ。ストア設定側では、支払い方法としてLightningを有効にするだけでよい。
どの実装を選んだかには、名指しする価値のある結果が伴う。Core Lightningは保守的で軽量な選択肢であり、すっきりしたプラグイン構造を持つ。LNDは最も広く使われており、周辺の管理ツールのエコシステムが最大だ。今では第三の選択肢もある——鍵は自分のマシンに残したまま、チャネル管理をサービス事業者に委託する軽量なデーモンであり、ある程度の独立性と引き換えに、この先の3段落に書かれていることすべてを消し去ってくれる。これは、Lightningは欲しいがノード運用者にはなりたくないストアにとって正当な選択であり、単に異なる代償を払うだけであって、代償が無くなるわけではない。
Lightningチャネルは、決まった額の資金を保持し、それを両端で分け合う。チャネルを開いて資金を投入すると、その資金はすべて自分側にある——つまり送るための容量であり、受け取るための容量はちょうどゼロだ。ストアが必要としているのはその逆である。だから、健全なチャネルを3つ持つ、資金を投入したばかりのノードでも、受信インボイスをことごとく失敗させることがあり、しかもその失敗は設定ミスではなくルーティングエラーのように見える。これが、セルフホストしたLightningチェックアウトが初日から壊れて見える、最も多い原因である。
インバウンド容量を得る正直な方法は3つあり、それらは互いに排他的ではない。アウトバウンドチャネルを開いて、それを通じて使う——何かを買う、インボイスを支払う、取引所へ資金を移す——という方法があり、これは残高を向こう側へ押しやり、送る容量を受け取る容量に変換する。よく接続されたノードに、あなたへ向けてチャネルを開いてもらうよう頼むこともできる。これはLightningコミュニティではありふれた依頼であり、相手側のオンチェーン手数料を除けば無料だ。あるいは、インバウンド流動性を販売しているいくつかのサービスのどれかから購入することもでき、これはわずかな割合のコストがかかり、数週間ではなく数分で済む。このページにはアフィリエイトのおすすめは載っておらず、今後も載せるつもりはない。評判と現在の価格で選ぶこと。
支払いを受け取れるようになったら、2つの機能がそのノードを店先に変える。Lightningアドレス——メールアドレスと同じ形をした、自分のドメイン上のもの——は、事前にインボイスが存在しなくても、今どきのウォレットならどれからでも誰でも送金できるようにする。これは、どこを探しても見当たらないほど親切な寄付・投げ銭の仕組みだ。そしてチェックアウトページのQRコードは両方のレールを同時に提示でき、Lightningウォレットを持つ顧客は数秒で支払い、持たない顧客は同じ画面からオンチェーンで支払う——あなたの側で何かを判断する必要は一切ない。
最初のLightning支払いが届く前に、あとでなく今のうちにやっておくべきバックアップの手順がある。どの実装も、チャネルの現在の状態を記述する小さなファイルを保持している——LNDはこれをスタティックチャネルバックアップと呼ぶ——これは、マシンを失った場合に資金を復旧させてくれる成果物である。チャネルが開閉されるたびに変化するので、手作業ではなく自動でサーバーの外へコピーしておくこと。夜間アーカイブがすでにこれをカバーしていると思い込む前に、ステップ06の警告を読むこと。Lightningに関しては、それはカバーされていないからだ。
すでに持っているものに合った、最も小さいチェックアウト面を選ぶこと。支払いリクエストは誰かに送るリンクだ——ウェブサイトは不要で、クライアントに請求する最も速い方法である。ポイントオブセールアプリは、同じインスタンスを商品リスト付きのレジに変え、市場の屋台からスマートフォン一つで使える。ペイボタンは静的サイト向けのHTMLの断片だ。ショッププラグインは本物の店舗にBitcoinを支払い方法として追加し、注文ステータスを自動的に書き戻す。そしてREST APIはインボイスを発行し、その状態を報告し、決済が完了するとWebhookを呼び出す——これはHTTPと共有シークレット以外の何にも依存しないため、最も長く通用する統合方法だ。
どれを選ぶにせよ、Webhookを配線し、それが実際に発火することをテストすること。決済は完了したのにアプリケーションに一切通知が届かないというのは、誰も気づかない種類の障害だ。それぞれ単独で見るとどちらも正しく見えるからである——お金は届き、顧客は確認ページを見て、注文は未処理のまま放置される。意図的に決済完了インボイスのWebhookを自分宛てに送り、自分のエンドポイントがそれを受け取ったことを確認し、ペイロードを鵜呑みにするのではなく署名を検証すること——そのエンドポイントは公開されており、誰でもそこへポストできるのだから。
これは、このページにある警告のなかで唯一、時間ではなくお金を失わせかねないものであり、プロジェクト自身のドキュメントもまったく同じ言葉でそう述べている——古いLightningチャネルの状態は有毒である。昨夜のチャネルデータベースの写しを復元してノードを動かしてしまうと、取引相手がすでに更新済みの状態をブロードキャストすることになり、プロトコルはそれを不正行為の試みとみなして、チャネル残高をまるごと相手に与えるという罰を下す。したがって、アーカイブが正しいのはストアのデータベース、設定、インボイス履歴に対してであり、チャネルの復旧計画にはならない。スタティックチャネルバックアップはマシンの外へ継続的にコピーし、最新のものを保持しておくこと。そして、いつかサーバー全体をアーカイブから復元することがあれば、Lightning側は単純な復元ではなく文書化された復旧手順を必要とすることを承知のうえで行うこと。
それを理解したうえでなら、日課そのものは短い。このデプロイメントには、ブロックチェーンのデータを除外しつつボリュームをアーカイブしデータベースをダンプするバックアップスクリプトが同梱されており、パスフレーズを受け付けるので、アーカイブはサーバーを出る前に暗号化される。それをタイマーで実行し、その結果をバックアップガイドが説明する方法で別の法域にあるマシンへ送ること——追記専用のリポジトリは、ここでは余分にかかる10分の価値がある。侵害された決済用サーバーが、自分の処理した記録を消せてしまってはならないからだ。
cd ~/BTCPayServer/btcpayserver-docker
export BTCPAY_BACKUP_PASSPHRASE="a long passphrase you keep elsewhere"
./btcpay-backup.sh # archives volumes + database, skips the chain
# then ship the archive offsite, and keep the channel backup separately
次はアップグレードだ。そして決済用サーバーは、「あとで、意図的にアップデートする」というのが正しい方針になる唯一のマシンである。このデプロイメントには、composeファイルを再生成し新しいイメージを取得する専用のアップデートスクリプトが備わっている——それを実行するのは、cronジョブがそうしたい気分になったときではなく、リリースノートを読み終えたときにすること。まずアーカイブを取ること。リリースは一度に1つずつ上げること。そして以前のバージョンを書き留めておくこと。1分でできるロールバックがあることこそが、この作業全体をローリスクにしてくれるからだ。
./btcpay-update.sh # deliberate, after reading the release notes
df -h / # the check that should be an alert, not a habit
最後に、アラートを1つとリマインダーを1つ設定する。アラートはディスク使用量に対するものだ——ブロックチェーンノードは、このマシン上で自分だけで肥大していく唯一のプロセスであり、ボリュームが満杯になるとチェックアウトが止まるが、ほかに何も変わっていないため原因の特定に時間がかかる。95パーセントではなく80パーセントで鳴らすこと。リマインダーは月次で、ストアを開いて2つのことを確認するためのものだ。インボイスがまだきちんと決済されているか、そして開いたLightningチャネルがまだ生きているか。決済プロセッサーは静かに壊れるものであり、それに気づく方法は、顧客から支払えなかったと言われることである。
プロセッサーをセルフホストすることは、具体的で本物の改善であり、姿を消す手品ではない。ここまでのすべてを終えたあとでも変わらず真実である5つのことがあり、それを知っているかどうかが、本当の防御と心地よいだけの物語との違いになる。
Bitcoinの台帳は公開されており、恒久的だ。 ゲートウェイを取り除いたのは、ある会社の非公開のデータベースであり、チェーンを暗号化したわけではない。あなたのストアが受け取るすべての支払いは、アドレスを知っている誰にでも、永遠に見える。しかもアドレスはクラスター化する——2件の支払いを1つの支出にまとめたウォレットは、その2人の顧客が同じストアに支払ったことを、世界に向けてまさに告げてしまったことになる。これはソフトウェアの性質ではなく資産そのものの性質であり、本物のプライバシー要件を持つ事業がMoneroにも目を向ける理由である。
チェックアウトのホスト名は、存在した瞬間に公開される。 証明書透明性ログは公開されており継続的に索引化されているので、ステップ02で選んだ名前は、どこにもリンクしていなくても発見可能である。だからこそ管理者アカウントは最初の1週間ではなく最初の数分のうちに確保しなければならず、ログインページには初日から強力なパスワードと第二要素がふさわしい。
法定通貨への出口こそが、本人確認が戻ってくる場所だ。 このスタックのどの部分も、支払いを受け取るために本人確認を求めることはない。その収益を銀行のお金に変える段階になると、ほぼ必ず求められる。その変換は規制された取引所やブローカーのところで起きるからだ。セルフホスティングは、本人確認の要求を販売時点から出口の時点へ移す——これは露出の点で本物の改善だが、露出が消えることとは同じではない。
あなたの報告義務は、サーバーと一緒には移動しなかった。 事業がどこで登録されているか、その所有者がどこに住んでいるかが、何を納め、何を申告しなければならないかを決める。インボイスを発行しているマシンの法域は、そこに関わってこない。ほとんどの場所では、商品やサービスの対価として暗号通貨を受け取ることは、その日の時価による通常の所得であり、あとでそれを処分することはまた別の課税イベントとなる。セルフホストしたインスタンスは、失うかもしれないプロセッサーのアカウントよりも優れた記録になる——それは記録を持たずに済ませる方法ではない。
チャージバックは存在しない。そしてそれは両刃の剣だ。 着金が確定した支払いは覆らない。まさにこの性質のおかげで加盟店に対する詐欺はほぼ不可能になり、手数料がゼロである理由もそこにある。同時に、不満を持った顧客があなたの善意以外に頼る手段を一切持たない理由でもある。返金ポリシーを公開し、それを守るためにペイアウト機能を使い、これまで手数料が担っていた紛争解決の仕事を自分が引き受けたのだと理解すること。
実際に手に入れたものを正確に言えば——お金は自分にしか使えないウォレットに届き、誰も販売を止めることができず、誰も手数料を取らず、誰がいくら支払ったかという一覧は、特定の名前を名乗らずに借りているマシンの上にしか存在しない。これは狭い主張であり、同時に本物の主張でもある。それがコストに見合う価値を持つのは、ステップ06を終えている場合に限る——検証済みの復元手順を持たないセルフホストの決済プロセッサーは、事業の改善ではなく、あなたの売上を丸ごと抱えた単一障害点である。
| ティア | 月額 | リソース | 無理なく動かせるもの |
|---|---|---|---|
| Sentinel | $3.90 | 2 vCPU · 4 GB · 120 GB · 1 Gbps | 25–50 GBのプルーニングノードとLightning。スワップを追加し、ディスクを注視する。 |
| Garrison | $7.90 | 4 vCPU · 8 GB · 240 GB · 1 Gbps | 100 GBのプルーニングノードとLightning、そして何年分もの余裕。既定の選択。 |
| Ravelin | $16.90 | 8 vCPU · 16 GB · 480 GB · 2.5 Gbps | 同じもの、それに加えて2本目のチェーンか、プラグインで賑わうストア。 |
| Bulwark | $32.90 | 16 vCPU · 32 GB · 960 GB · 5 Gbps | まだ伸び続ける余地のあるアーカイブノード。履歴が必要な場合に限る。 |
BTCPayとインデクサー、PostgreSQLを合わせても、ノードの同期が終わればディスク数ギガバイト程度でCPUはほぼ使わない。1日に100件の支払いを受け付けるストアでも、コンピュート面で最小ティアが困ることはない。ティアの間で違うのはディスクだけであり、そのディスクはステップ01だけで決まる。このプロジェクトで本当に重い時間は同期だけだ——CPUバウンドではなくIOバウンドであり、だからこそNVMeが重要でコア数は重要ではない。帯域幅はどのティアでも無制限なので、公開到達可能なLightningノードを動かしても追加コストはかからない。
作りたてのインスタンスに最初に登録した者が管理者になる。そしてホスト名は、証明書が発行された瞬間に証明書透明性ログへ公開されている。インストールが終わってから数分以内に登録を済ませ、それからサーバー設定で、登録が見知らぬ他人に開かれていないことを確認すること。
サーバーにウォレットを生成させるのはワンクリックで済むが、シードを、見知らぬ相手に応答することが仕事のマシンの上に置くことになる。代わりに拡張公開鍵を接続すること——ストアは監視し、導出し、突き合わせるだけで、使うことはできない。秘密鍵の側はウォレットか、ハードウェアデバイスの中に保管しておくこと。
昨日時点のチャネルデータベースは、取引相手がすでに更新済みの状態を記述している。それをそのままオンラインに戻すと、ペナルティとしてチャネル残高をまるごと相手に渡しかねない。夜間のアーカイブがカバーするのはストアの分だけであり、チャネルには文書化された復旧手順と、継続的にコピーされるチャネルバックアップが必要になる。
チャネルに資金を入れても得られるのは送る容量であり、受け取る容量ではない。資金の入った新しいノードでも、受信する支払いはことごとく失敗し、そのエラーはルーティングの問題に見える。Lightningという選択肢を公表する前にインバウンド流動性を確保すること。最初の苦情のあとではなく。
3年前からのアカウントをプルーニングノードに接続すると、古いトランザクションは二度と現れない。それらを含んでいたブロックがすでに破棄されているからだ。何も壊れておらず、何もそれを教えてくれない。ストアには作りたてのアカウントを与えるか、アーカイブを運用すること。
ノードは自分だけで肥大していく唯一のプロセスであり、ディスクが満杯になると行儀よく一時停止するのではなくインデックスを破損させる——つまりダウンロードをやり直すことになる。ステップ01の計算を、実際に注文したティアと照らし合わせ、95パーセントではなく80パーセントでアラートを鳴らすこと。
これを構築する過程で出てくる11の質問——そもそも構築すべきかどうかを左右する2つから始める。
これは正真正銘の無料であり、その形は価格そのものより重要だ。BTCPay Server はオープンソースソフトウェアであり、寛容なライセンスの下で公開され、売上目標を持つ会社ではなく財団によって保守されている。取引ごとの手数料もなく、割合手数料もなく、最低取引量もなく、開設すべきアカウントも、署名すべき契約もない。そもそも取引相手がいないからだ——あなたは、自分のWebサーバーを動かすのと同じように、自分のサーバー上でプログラムを動かしているにすぎない。代わりに支払うことになるのは、本物ではあるが性質の異なるコストだ。サーバー代として月に数ドル、セットアップに一晩、そして決済を扱うサービスにパッチを当て続けるという恒常的な義務。人が実際に比べるべきなのは「無料か、それとも1パーセントか」ではない。「自分が背負う運用上の仕事か、それとも自分が背負わない依存か」であり、正直なところ、年に20件しか支払いを受けないストアはホスト型の何かのほうがおそらく向いており、週に20件受けるストアは、ここでこそより安く、より自由になれる。
あなたが保有している。そしてその仕組みは、信じるのではなく理解しておく価値がある。推奨されるセットアップでは、すでに自分が管理しているウォレットの拡張公開鍵をBTCPayに渡す。その鍵から、サーバーはインボイスごとに新しい受け取りアドレスを導出し、そこへの支払いをチェーン上で監視できる——そして有効な支出を組み立てることはできない。秘密鍵の側があなたのウォレットから出ることは決してないからだ。お金は顧客から、あなたにしか掃き出せないアドレスへ直接動く。サーバー上には何も保持されないので、侵害されても差し止められるもの、凍結されるもの、失われるものが何もない。BTCPayは、ウォレットを生成してシードをサーバーに保持することも提案してくるが、これは便利である一方、本物の売上を保持するものについてはこのガイドが反対している唯一の構成だ——公開されたインターネット向けサーバーを、ホットウォレットに変えてしまうからである。Lightningは正真正銘の例外だ——ルーティングのためにはチャネルの資金が生きていなければならない——だからこそ、Lightningの残高は金庫ではなくレジとして扱うべきである。
これはただ一つの決定にすべてがかかっており、その幅は2桁のオーダーにおよぶ。アーカイブのBitcoin Coreノードは、これまでに採掘されたすべてのブロックを保持する——2026年時点で優に700 GBを超え、年に約50 GBずつ増えていくので、それに見合うサイズのティアが必要になり、しかも増え続ける。プルーニングノードは、すべてのブロックをまったく同じように検証したうえで古いものを捨て、ローリングウィンドウを保つ——デプロイメントのジェネレーターは、約100、50、25、5 GBまでプルーニングするフラグメントを用意しており、50 GB以上であればどれでも、加盟店にとって十分に本番運用に耐える選択となる。インデクサー、データベース、Lightningノード、OSのために10から20 GBほど加えれば、計算は次のように収まる——120 GBのティアは25–50 GBのプルーニングデプロイメントを動かし、240 GBのティアは何年分もの余裕を持って100 GBのものを動かし、アーカイブには960 GBが必要になる。特別な理由がない限りプルーニングを選ぶこと。セキュリティモデルはまったく同じだ。
部分的にはできる。そしてその境界線がどこにあるかを正確に知っておく価値がある。スタックは、どこかほかの場所ですでに運用しているBitcoinノード——同じテイルネット内のサーバーや、トンネルの先にあるサーバー——に向けることができ、それは完全にサポートされた構成であり、Lightningノードガイドですでにその作業を済ませているなら、チェーンの写しを2つ持たずに済む。分別を持って行えないのは、他人の公開ノードに対して決済プロセッサーを運用することだ。理由はライセンスではなくプライバシーと信頼にある——あなたの問い合わせに答える者は誰であれ、あなたのストアが監視しているすべてのアドレスを知ることになり、それはあなたの売上を知ることと同じであり、しかもインボイスが支払われたかどうかについて嘘をつくこともできる。人々が頼りがちな第三の選択肢もある——第三者が運用するホスト型のBTCPayインスタンスを使うことだ——これは始め方として十分に理にかなっている。ただし、それによってストアのデータが、それを見ることのできる運用者のもとへ移ることははっきりさせておくべきだ。それこそが、セルフホスティングが目的としていたことの大半なのだから。
いいえ、そして初日にそれを省くのはまったく理にかなっている。オンチェーンのみでも完全に動作する構成だ——インボイスは支払われ、顧客は承認を待ち、ストアは決済を終える。Lightningが買ってくれるのは、「だいたい10分と、少額では痛い手数料」と「2秒と、1セントにも満たない手数料」の違いであり、それは400ドルのインボイスには機能するが4ドルのものには機能しないチェックアウトと、両方に機能するチェックアウトの違いでもある。その代償は、Lightningが独自の資金、独自の障害モード、独自のバックアップ規律を持つ、もう一つのデーモンだということだ——ステップ05のインバウンド流動性の問題や、ステップ06の有毒な状態についての警告も含めて。賢明な順序は、まずオンチェーンで公開し、実際の資金でパイプライン全体が機能することを確認してから、同じ晩にボルトで留めるのではなく、意図的な第二のプロジェクトとしてLightningを追加することだ。
単一アカウントの拡張公開鍵をエクスポートできるウォレットなら何でもよい——Sparrow、Electrum、BlueWallet、あるいはそれらのいずれかを介したハードウェアウォレット。大事なのはブランドではなく、それが貯蓄を保管しているアカウントではなく、専用のアカウントであることだ。理由は2つある。1つ目はプライバシーで、これは恒久的なものだ。拡張公開鍵は、そこから将来導出されるすべてのアドレスのマスターインデックスであり、それを手に入れた者は、そのアカウントがこれまで受け取り、これから受け取るすべての支払いを列挙できる。ストアに専用のアカウントを与えておけば、漏洩してもストアの売上が露呈するだけで済む。2つ目は運用面だ。専用のアカウントなら、混在した履歴をフォレンジックで洗い出さなくてもストアの収入が把握しやすくなり、コールドストレージへのスイープも単純で退屈な判断で済むようになる。秘密鍵をハードウェアウォレットに収め、公開鍵の側をストアが監視する——これが目指すべき配置である。
できる。ただし、追加するチェーン1本ごとに、独自のディスク、独自の同期時間、独自のメンテナンスを持つ丸ごと1つ分のノードが増えるという条件付きだ。ジェネレーターは2つ目、3つ目の暗号通貨を直接サポートしており、追加フラグメントとして利用できるMonero連携も用意されている——同じデプロイメントが、チェックアウト時に顧客へレールの選択肢を提示するようになる。人々が過小評価しがちなのはリソースの請求だ——有効にしたチェーンはそれぞれ、同じボリューム上で別の台帳を索引化する別のデーモンであり、1本分のサイズのティアに2本のチェーンを載せるのは、決済用サーバーが日曜日にディスクを使い果たす典型的な原因である。Moneroがあなたのストアにとって重要なら、まずMoneroノードガイドを読み、専用のサーバーを与えることを検討すること。無関係なデーモンがディスクを埋め尽くしたせいで止まる決済プロセッサーは、Bitcoinしか受け付けないものより始末が悪い。
4つの方法を、すでに持っているソフトウェアが多い順に並べる。何も持っていないなら、BTCPayはホスト型のポイントオブセールと、リンクとして送れる支払いリクエストページを提供する——それだけで、クライアントへの請求や、ウェブサイトなしの市場の屋台での支払い受け取りには十分だ。静的サイトを持っているなら、ペイボタンはHTMLの断片一つで済む。本物の店舗を持っているなら、主要なECプラットフォーム向けに保守されたプラグインがあり、Bitcoinをチェックアウト時のもう一つの支払い方法にし、注文ステータスを自動的に書き戻してくれる。そして自前のアプリケーションを持っているなら、REST APIがインボイスを発行し、その状態を報告し、決済が完了した時点で指定したWebhookを呼び出す——これは、HTTP以外の何にも依存しないため、最も長く通用する統合方法だ。まずは支払いリクエストから始め、資金が届くことを確認してから、統合すること。
オンチェーンについては、ノーだ。これがウォッチオンリー設計の静かな見返りである——コインはそもそもサーバー上に存在したことがない。アドレスは公開鍵から導出されるので、同じ拡張公開鍵で新規インストールし直せば、すべての支払いを再発見できる。完全な障害で失うのはストアの設定とインボイス履歴だけであり、それこそがバックアップスクリプトの役目だ。Lightningはまったく違う答えであり、それ自体に一文を割く価値がある——チャネルの資金は生きており、チャネルの状態は支払いのたびに変化し、その状態の古いコピーを復元することは、チャネル残高をまるごと失わせかねない。すでに更新済みの状態を公開することこそ、まさにこのプロトコルが罰する行為だからだ。したがって正しい姿勢は非対称になる。データベースと設定はスケジュールに沿ってバックアップし、暗号化し、このマシンではないどこかへ送ること——そしてLightningのスタティックチャネルバックアップは、夜間アーカイブの1行としてではなく、別個の、継続的にコピーされる成果物として扱うこと。
いいえ、そしてこれについてははっきり言っておく価値がある。逆のことが暗黙のうちに前提とされがちだからだ。決済プロセッサーを取り除くことは、仲介者と手数料、そしてあなたの資金を凍結しうる当事者を取り除く。それは、あなたが何を、誰に対して負っているか、あるいは販売が課税対象かどうかを変えるものではない——それらは、あなたとあなたの事業がどこにあるかによって決まるのであり、サーバーがどこにあるか、あるいはどのソフトウェアがインボイスを発行したかによって決まるのではない。ほとんどの法域では、商品やサービスの対価として暗号通貨を受け取ることは、受け取った日の時価による通常の事業所得であり、あとでそれを処分することはまた別の課税イベントとなる。記録が今やプロセッサーのものではなく自分自身のデータベースにあるという事実は、それを任意のものにはしない。そして自分でホストしたインスタンスは、実際にはもう持っていないアカウントのスクリーンショットよりも、はるかに優れた監査証跡になる。正直なところプライバシー面の恩恵がある場所は、もっと狭く、しかし本物だ——顧客と金額の一覧を、第三者が保持し続けることがなくなる、という点である。残りについては、自分の法域の会計士に相談すること。
許可される——BTCPayインスタンスは、ごく普通のデータベースとごく普通のブロックチェーンデーモンを持つ、ごく普通のWebアプリケーションであり、利用規約にはそれをストアやブログと区別して扱う条項は何もない。実務上の注意点はポリシーではなくリソースに関するものだ。同期中のノードは最初の1日はディスクとIOの負荷が高いが、そのあとはほぼアイドルになる。帯域幅はどのティアでも無制限なので、公開のLightningノードでも従量課金にはならず、ピア接続用のインバウンドポートは自由に開けてよい。このサイトのほかの部分と整合しているのは、その対称性だ——アカウントに法的な氏名は不要で、インボイスはMonero、Bitcoin、あるいはLightningで決済され、いまやあなたのすべての顧客を知っているマシンは、あなたが誰であるかを知らない会社から借りている。本人確認済みのアカウントの上でセルフホストしたプロセッサーは、台帳を移しただけで、露出を移したわけではない。
Garrison——ヘルシンキ、ストックホルム、オスロ、レイキャビクのいずれかで、4 vCPU、8 GB、240 GBのNVMeが月額$7.90。プルーニングされたBitcoinノード、Lightningデーモン、インデクサー、ストアを、何年分もの余裕を持って動かせる。登録時のメールアドレスも不要、身分証明書も不要、そして支払ってくれたすべての人の一覧を握る会社も存在しない。
最終レビュー · 2026-10-12 · 出典 · BTCPay Server のドキュメント(Dockerデプロイ、ストレージフラグメント、バックアップと復元、ストア設定)、プルーニングに関するBitcoin Coreのドキュメント、スタティックチャネルバックアップに関するLightning実装のドキュメント · 頻度 · 年次
This guide is one spoke of a larger series. The pillar walks the three privacy layers end to end — the sibling spokes below dive into the specifics.
Three independent layers — signup, payment, network — explained, legal context included, common mistakes flagged.
Your own LN node — bitcoind + LND or Core Lightning, on a VPS.
自分だけのmonerod — フルかプルーニングか、トンネルの奥のRPC、Tor経由のブロードキャスト。
Deploy your own MCP server on a no-KYC VPS — TLS, streamable HTTP, OAuth.
Host an MCP server with no ID — the privacy stack, crypto-paid.
プライベートホスティング、北欧で構築。