Jeder gehostete Krypto-Zahlungsdienstleister verlangt dieselben zwei Dinge, bevor er auch nur einen Satoshi für Sie bewegt: wer Sie sind, und die Erlaubnis, das Geld unterwegs zu halten. Beide sind Entscheidungen, die jemand anderes über Ihr Geschäft getroffen hat. BTCPay Server erledigt denselben Job — Rechnungen, Wechselkurse, eine Checkout-Seite, Webhooks, eine Kassenfunktion — als Software, die Sie selbst betreiben, ohne Konto, ohne Prozentanteil, und ohne dass irgendjemand zwischen der Wallet des Kunden und Ihrer eigenen steht.
Der Preis dafür ist, dass Sie zum Betreiber werden. Diese Anleitung handelt davon, was das wirklich kostet: welcher Teil des Stacks die Ressourcen frisst (nicht BTCPay), welchen Plan die Sache tatsächlich braucht, wie man sie in etwa einer Stunde Aufmerksamkeit und einem Tag Wartezeit bereitstellt, und — der Teil, der entscheidet, ob das Ganze überhaupt eine gute Idee war — wo die Schlüssel liegen, sobald sie läuft. Bitcoin und Lightning sind die Voreinstellung; Monero ist eine optionale Integration und, wie es sich trifft, diejenige mit der saubersten Schlüsselverwaltung der drei. Die Maschine darunter lässt sich mit einer E-Mail-Adresse mieten und in denselben Coins bezahlen, die Sie gerade anfangen anzunehmen.
Was ein selbst gehosteter Zahlungsdienstleister wirklich ändert
Der Slogan lautet meist „keine Gebühren“, und das ist der uninteressanteste Teil davon. Vier Dinge ändern sich, und nur eines davon hat mit Geld zu tun:
- Niemand hält Ihr Geld während der Durchleitung. Ein gehosteter Zahlungsdienstleister nimmt die Zahlung des Kunden in seine eigene Wallet auf und schreibt sie Ihnen erst danach gut. Genau in dieser Lücke passieren Holds, Prüfungen und Sperren. BTCPay empfängt nie etwas: Der Kunde zahlt an eine Adresse, die von Ihrem Schlüssel abgeleitet ist, und die Coins gehören Ihnen ab der ersten Bestätigung.
- Niemand fragt, wer Sie sind. Das Onboarding bei einem Zahlungsdienstleister ist ein Identitätsprozess, an dessen Ende eine Bank steht. Software zu installieren ist das nicht. Das ist der ganze Unterschied, und deshalb lautet die Antwort auf „wie nehme ich Krypto ohne KYC an“ immer „betreiben Sie den Prozessor selbst“.
- Die Kosten hören auf, mit Ihnen zu skalieren. Ein Prozentsatz wird für immer berechnet und wächst mit dem Erfolg. Ein VPS und eine Domain kosten in einem guten Monat genauso viel wie in einem schlechten.
- Sie erben die operative Arbeit. Uptime, Updates, Backups, und die Person zu sein, die die Nachricht bekommt, wenn ein Kunde sagt, die Rechnung sei nie beglichen worden. Das ist der wahre Preis, und er wird in Aufmerksamkeit bezahlt, nicht in Währung.
Was Sie nicht bekommen, ist das eine, worin Zahlungsdienstleister wirklich gut sind: Coins in Geld auf einem Bankkonto zu verwandeln, in Ihrem Auftrag. BTCPay hält, was ihm bezahlt wurde, in dem Coin, in dem es bezahlt wurde. Umtausch, Rechnungsstellung in Fiat, Buchhaltungsexporte, die ein Finanzamt anerkennt — alles separate Probleme, und die meisten Wege, sie zu lösen, führen genau die identifizierte Gegenpartei wieder ein, die Sie gerade entfernt haben. Überlegen Sie sich, welche Hälfte dieses Tauschgeschäfts Sie eigentlich wollten, bevor Sie irgendetwas aufbauen.
Was tatsächlich bereitgestellt wird, und welcher Teil teuer ist
Der Name führt auf nützliche Weise in die Irre. „BTCPay Server“ ist nicht ein einzelnes Programm; die Standardbereitstellung ist eine kleine Flotte von Containern, die gemeinsam hochfährt, und zu wissen, welcher welcher ist, macht den Unterschied zwischen korrekter Dimensionierung und Raten:
- Bitcoin Core. Eine echte Vollnode, die ab Genesis validiert. Das ist die Komponente, die Sie Speicherplatz kostet, den größten Teil des ersten Tages, und fast den gesamten Arbeitsspeicher. Alles andere ist vergleichsweise gratis.
- NBXplorer. Der Indexer zwischen Core und BTCPay. Sie geben ihm erweiterte öffentliche Schlüssel; er verfolgt die daraus abgeleiteten Adressen und meldet BTCPay, wenn Geld eingeht. Er ist außerdem die Komponente, die sich ums Pruning sorgt, aus Gründen, auf die der Abschnitt zu den Fehlerszenarien später zurückkommt.
- BTCPay Server selbst. Die Anwendung: Stores, Rechnungen, die Checkout-Seite, die Kassenfunktion, Webhooks, die Greenfield API. Vergleichsweise genügsam — ein paar hundert Megabyte Arbeitsspeicher.
- PostgreSQL. Rechnungen, Stores, Einstellungen, Nutzer, API-Schlüssel. Klein, und der eigentliche Grund für Ihre Backups.
- nginx mit automatischen Zertifikaten. Ein Reverse-Proxy plus ein Begleiter, der ein Zertifikat für Ihren Hostnamen ausstellt und erneuert. Deshalb müssen die Ports 80 und 443 wirklich aus dem Internet erreichbar sein.
- Optional eine Lightning-Node (Core Lightning oder LND) und ein Monero-Daemon mit einer Wallet-RPC daneben — jeder bringt seine eigene Chain und seinen eigenen Appetit auf Speicherplatz mit.
Die Frage bei der Dimensionierung lautet also nie „wie groß muss BTCPay sein“. Sie lautet „wie viel Chain behalte ich, und wie viele Chains“. Beantworten Sie das, und der Plan wählt sich von selbst.
Ehrliche Dimensionierung, und welcher Plan passt
Das Projekt dokumentiert 2 GB RAM mit Swap als Minimum und 4 GB als Empfehlung, und die Lücke zwischen diesen beiden Zahlen ist die Lücke zwischen einer Installation, die technisch durchläuft, und einer, an die Sie tatsächlich Kunden heranlassen wollen. Eine Anwendungslaufzeit, PostgreSQL und ein synchronisierender bitcoind, die sich 2 GB teilen, werden fertig — langsam, wobei die Swap-Datei Arbeit übernimmt, die sie nicht übernehmen sollte.
Der Speicherplatz richtet sich danach, wie stark Sie kürzen, und die Deployment-Variante stellt das als Fragment dar, das Sie dem Installer übergeben. Die Familie läuft bei opt-save-storage auf etwa 100 GB Blockdateien, bei -s auf etwa 50 GB, bei -xs auf etwa 25 GB und bei -xxs auf etwa 5 GB. Letzteres ist eine Falle für alles, was überleben soll: Es behält so wenig Historie, dass die gewöhnliche Wartung anfängt zu scheitern. Für einen Store ist -s oder -xs das sinnvolle Band.
Konkrete Zahlen aus der Preisübersicht, denn „kommt darauf an“ ist keine Antwort:
- Nur Bitcoin, gekürzt, ein Store — Scout, 2 vCPU / 4 GB / 70 GB NVMe, $9.00/mo. Die ehrliche Untergrenze, und für die meisten Leser die richtige Antwort.
- Bitcoin und Lightning — Runner, 3 vCPU / 6 GB / 100 GB, $14.00/mo. Ein Lightning-Daemon ist genügsam bei der Disk, besteht aber hartnäckig darauf, online zu bleiben; der Spielraum ist für die Node darunter.
- Bitcoin, Lightning und Monero — Alpha, 6 vCPU / 12 GB / 200 GB, $28.00/mo. Eine gekürzte Monero-Chain liegt allein schon bei rund 85 GB, weshalb es bei zwei Chains und zwei Indexern mit 8 GB eng wird. Hunter (4 vCPU / 8 GB / 140 GB, $19.00/mo) reicht nur, wenn Bitcoin hart gekürzt bleibt und das auch so bleibt.
- Eine ungekürzte Node hinter dem Store — ein anderes Projekt mit einer anderen Rechnung. Die Vollnode-Anleitung hat diese Zahlen, und sie beginnen bei Fenrir.
CPU zählt genau einmal. Die Signaturverifizierung während des initialen Block-Downloads parallelisiert, sodass zwei bis vier vCPU die erste Synchronisierung von Tagen auf etwa einen Tag verkürzen und die CPU danach wieder in den Leerlauf geht. Bandbreite ist eine einmalige Ausgabe für die gesamte Chain, auf einem 1 Gbps-Port mit unbegrenztem Traffic und ohne Mehrverbrauchsrechnung am Monatsende. Latenz ist für einen Zahlungsdienstleister irrelevant, wählen Sie den Standort also nach Jurisdiktion statt nach Millisekunden — Amsterdam, Paris, Bukarest und Sofia liegen alle zum Grundpreis.
Was Sie brauchen, bevor Sie anfangen
Eine kurze Liste, und ein Punkt darauf ist nicht technisch.
- Eine Domain, mit einem bereits auf den Server zeigenden A-Record. Das Zertifikat wird über HTTP gegen diesen Hostnamen ausgestellt, daher muss DNS vor dem Lauf des Installers aufgelöst sein, nicht währenddessen. Eine Subdomain wie
pay.example.comist die übliche Form. - Die Ports 80 und 443 offen zur Welt. Port 80 ist nicht optional, auch wenn hinterher nichts Sinnvolles darauf lauscht; die Zertifikatsprüfung braucht ihn.
- Debian 13 aus der Template-Bibliothek, auf einer Maschine, die bereits den zehnminütigen Härtungsdurchgang hinter sich hat. Erledigen Sie das zuerst — sobald ein Stack läuft, ist es deutlich schwerer, das noch anständig nachzuholen.
- Eine Wallet, die Sie bereits kontrollieren, und ihr erweiterter öffentlicher Schlüssel. Sparrow, Electrum oder eine Hardware-Wallet. Halten Sie sie bereit, bevor Sie installieren, damit Sie nie in Versuchung geraten, den Server eine für Sie generieren zu lassen.
- Eine E-Mail-Adresse für die Zertifizierungsstelle. Sie erhält Ablaufwarnungen und sonst nichts.
- Eine jetzt getroffene Entscheidung über das Kürzen. Ihre Meinung später zu ändern bedeutet, die Chain von Grund auf neu zu synchronisieren, und das ist ein Tag, den Sie nicht zweimal erleben wollen.
Schritt für Schritt
- Den Server bereitstellen, die Domain darauf zeigen lassen und zuerst absichern
Bestellen Sie den Plan, auf den der Abschnitt zur Dimensionierung verwiesen hat, wählen Sie Debian 13, und wählen Sie den Standort nach Jurisdiktion statt nach Latenz. Legen Sie den DNS-Record sofort an, denn er muss propagiert sein, bis der Installer eine Zertifizierungsstelle bittet, Ihren Besitz des Namens zu beweisen:
pay.example.com. 300 IN A 198.51.100.10Dann der Durchgang aus der Debian-Härtungsanleitung: ein Non-Root-Nutzer mit einem Schlüssel, Passwort-Authentifizierung aus, unbeaufsichtigte Sicherheitsupdates an, und eine Default-Deny-Firewall. Alles Folgende geht davon aus, dass das erledigt ist und dass 22, 80 und 443 die einzigen offenen Ports sind.
apt update && apt full-upgrade -y apt install -y git curlInstallieren Sie Docker nicht von Hand. Das Setup-Skript installiert und konfiguriert die Version, die es erwartet, und eine selbstgestrickte Installation ist der häufigste Grund, warum ein erster Lauf scheitert.
- Das Deployment-Repository klonen und Ihre Fragmente wählen
Das gesamte Deployment ist ein einziges Repository aus Shell-Skripten und Compose-Fragmenten. Klonen Sie es als root, irgendwohin, wo Sie sich erinnern werden:
git clone https://github.com/btcpayserver/btcpayserver-docker cd btcpayserver-dockerKonfiguration besteht aus Umgebungsvariablen, die der Installer einmal liest und dann dauerhaft speichert, sodass die folgenden Exports die gesamte Konfigurationsdatei sind, die Sie je schreiben werden:
export BTCPAY_HOST="pay.example.com" export NBITCOIN_NETWORK="mainnet" export BTCPAYGEN_CRYPTO1="btc" export BTCPAYGEN_REVERSEPROXY="nginx" export BTCPAYGEN_LIGHTNING="clightning" export BTCPAYGEN_ADDITIONAL_FRAGMENTS="opt-save-storage-s" export LETSENCRYPT_EMAIL="you@example.com"BTCPAYGEN_LIGHTNINGakzeptiertclightning,lnd,phoenixdoder gar nichts — lassen Sie es leer, wenn Sie noch nicht bereit sind, heiße Gelder zu halten, denn es später hinzuzufügen ist nur ein weiterer Lauf desselben Skripts. Fragment-Namen sind der Teil davon, der sich zwischen Releases ändert, lesen Sie also die aktuelle Deployment-Seite des Projekts, bevor Sie einfügen. - Den Installer ausführen und dann die Chain synchronisieren lassen
Ein einziger Befehl baut die Compose-Datei, zieht die Images und fährt alles hoch:
. ./btcpay-setup.sh -iDas ist in ein paar Minuten fertig und hinterlässt eine funktionierende Weboberfläche. Es hinterlässt keinen funktionierenden Store, denn Bitcoin Core lädt jetzt die Chain herunter und validiert sie, und nichts kann bezahlt werden, bis das abgeschlossen ist. Beobachten Sie es, statt zu raten:
bitcoin-cli.sh -getinfo btcpay-down.sh # stop everything btcpay-up.sh # start everythingDie Zahl, der Sie vertrauen sollten, ist
verificationprogress, und sie täuscht am Anfang: Die ersten neunzig Prozent gehen schnell, und die letzten zehn brauchen den Großteil der Zeit, weil neuere Blöcke voll sind. Auf NVMe mit zwei bis vier vCPU rechnen Sie mit etwa einem Tag. Lassen Sie es in Ruhe arbeiten — ein Neustart mitten in der Synchronisierung kostet Sie nur den Cache. - Das Admin-Konto anlegen und die Tür hinter sich schließen
Öffnen Sie
https://pay.example.comund registrieren Sie sich. Das zuerst angelegte Konto wird zum Administrator, was das Zeitfenster zwischen dem Ende des Installers und Ihrer Registrierung zum einzigen wirklich gefährlichen Moment in diesem Prozess macht. Erledigen Sie das sofort, aus einem Browser-Tab, den Sie bereits offen haben.Schalten Sie dann in den Servereinstellungen die offene Registrierung aus, damit der zweite Besucher kein Konto mehr anlegen kann, und aktivieren Sie die Zwei-Faktor-Authentifizierung für sich selbst. Beides sind zwei Klicks, und zusammen machen sie den Unterschied zwischen einem eigenen Zahlungsdienstleister und dem Zahlungsdienstleister von irgendjemand anderem. Laden Sie alle weiteren Administratoren ausdrücklich ein.
- Eine Wallet verbinden, von der der Server nicht ausgeben kann
Legen Sie einen Store an und hängen Sie dann eine Bitcoin-Wallet ein. BTCPay bietet an, eine neue für Sie zu generieren; wählen Sie den anderen Weg — eine bestehende Wallet verbinden — und fügen Sie den erweiterten öffentlichen Schlüssel auf Kontoebene ein, den Sie aus Ihrer eigenen exportiert haben:
zpub6r... # account-level extended PUBLIC key (xpub / ypub / zpub), never a prv # Sparrow: wallet settings. Electrum: Wallet -> Information -> Master Public KeyDiese Zeichenkette ist per Design öffentlich. Sie lässt BTCPay eine unbegrenzte Zahl von Empfangsadressen ableiten und Zahlungen an sie erkennen; sie erlaubt es BTCPay nicht, oder irgendjemandem, der es kompromittiert, auch nur einen Satoshi zu bewegen. Der private Schlüssel bleibt, wo er war, idealerweise auf einer Hardware-Wallet, die diese Maschine nie kennengelernt hat.
Zwei Konsequenzen, die es sich zu verinnerlichen lohnt. Verwenden Sie für den Store ein frisches Konto oder einen dedizierten Ableitungspfad statt des Schlüssels einer Wallet, die Sie schon jahrelang nutzen — der Abschnitt zu den Fehlerszenarien erklärt, warum sich Historie und Pruning nicht vertragen. Und denken Sie daran: Wer immer diesen erweiterten Schlüssel besitzt, kann jede Zahlung sehen, die Sie je empfangen haben: nicht gleich ein Schlüssel, aber eben auch nicht nichts. Behandeln Sie ihn wie ein Kontobuch, das offen auf einem Schreibtisch liegen gelassen wurde.
- Lightning hinzufügen und entscheiden, wie viel von Ihrem Geld dort lebt
Wenn Sie
BTCPAYGEN_LIGHTNINGschon bei der Installation gesetzt haben, läuft die Node bereits und ist intern verbunden, und die Store-Einstellungen müssen sie nur noch einschalten. Falls Sie es leer gelassen haben, exportieren Sie die Variable und führen Sie das Setup-Skript erneut aus; es ist idempotent und synchronisiert die Chain nicht neu.export BTCPAYGEN_LIGHTNING="clightning" . ./btcpay-setup.sh -iJetzt der Teil, der eine Entscheidung ist und keine Konfiguration. Kanalguthaben liegen in einer Wallet, aus der der Server ausgeben kann, denn genau das ist ein Zahlungskanal; ein Watch-only-Lightning gibt es nicht. Eine Kompromittierung dieser Maschine kostet Sie genau das Kanalguthaben und sonst nichts, weshalb der richtige Betrag dort der ist, dessen Verlust Sie ärgern, aber nicht ruinieren würde. Kehren Sie regelmäßig zu Cold Storage, nach einem Zeitplan, den Sie auch wirklich einhalten.
Rechnen Sie damit, dass der erste Monat eher Liquidität als Zahlungen betrifft. Eine Merchant-Node braucht eingehende Kapazität, das Gegenteil von dem, was das Öffnen eines Kanals gibt — das Öffnen finanziert die eigene Seite. Eingehende Liquidität von einem Dienst zu kaufen, einen Submarine Swap laufen zu lassen, um Guthaben auf die andere Seite zu schieben, oder zu warten, bis Peers sich Ihnen entgegen öffnen, sobald Sie Volumen haben, sind die drei ehrlichen Optionen. Core Lightning und LND funktionieren beide; Core Lightning lässt sich neben einer gekürzten Node leichter durchdenken, aus Gründen, die die Vollnode-Anleitung behandelt.
- Monero mit einer View-only-Wallet hinzufügen
Monero wird auf dieselbe Weise angehängt, als zweiter Krypto-Slot, was neben allem anderen einen Monero-Daemon und eine Wallet-RPC hochfährt:
export BTCPAYGEN_CRYPTO2="xmr" . ./btcpay-setup.sh -iKalkulieren Sie eine zweite Chain ein: gekürzt etwa 85 GB, und eine erste Synchronisierung, die auf NVMe ein bis zwei Tage dauert. Die Monero-Node-Anleitung hat die Details zu beidem.
Die Schlüsselverwaltung ist hier der beste Teil des ganzen Setups. Monero trennt die Fähigkeit, eingehende Zahlungen zu sehen, von der Fähigkeit, sie auszugeben, sodass Sie aus Ihrer Hauptadresse und Ihrem privaten View Key eine View-only-Wallet generieren, und das ist alles, was der Server jemals hält:
monero-wallet-cli --generate-from-view-key store-viewEs fragt nach der Standardadresse, dem privaten View Key und einem Passwort. Kopieren Sie die resultierenden Wallet-Dateien in das Monero-Wallet-Verzeichnis, das das Deployment bereitstellt, richten Sie den Store darauf aus, und BTCPay generiert pro Rechnung eine Subadresse und überwacht sie auf Zahlungen. Der Spend Key verlässt nie die Maschine, auf der Sie ihn generiert haben.
Eine Sache, um die Sie den Checkout herum gestalten sollten: Empfangene Outputs sind für zehn Blöcke gesperrt, etwa zwanzig Minuten, sodass BTCPay eine Zahlung ankommen sieht, lange bevor sie ausgebbar ist. Für digitale Güter ist das eine Frage der Richtlinie. Für alles, was persönlich übergeben wird, ist es eine Warteschlange.
- Testen wie ein Kunde, dann wie ein Betreiber
„Die Seite lädt“ ist kein Test. Erstellen Sie eine Rechnung über einen trivialen Betrag, bezahlen Sie sie von einer echten Wallet, und arbeiten Sie sich dann durch die Einstellungen, die entscheiden, was passiert, wenn eine Zahlung nicht perfekt ist:
- Bestätigungsrichtlinie. Wie viele Blöcke, bevor eine Rechnung als beglichen gilt. Null Bestätigungen sind vernünftig für einen Kaffee und falsch für einen Laptop; das ist eine Einstellung pro Store und die folgenreichste Zahl in der Oberfläche.
- Rechnungsablauf. Wie lange ein Kunde Zeit hat, bevor der genannte Kurs nicht mehr gilt. Fünfzehn Minuten ist die Voreinstellung, und das ist knapp für alle, die aus einer Börsenauszahlung heraus bezahlen.
- Zahlungstoleranz. Der Prozentsatz an Unterzahlung, den Sie akzeptieren, statt einen Kunden mit einer halb bezahlten Rechnung und einem Support-Ticket zurückzulassen. Klein und ungleich null ist die pragmatische Einstellung.
- Unter- und Überzahlung. Bezahlen Sie eine Rechnung einmal absichtlich zu knapp, und beobachten Sie, was Ihr Store deswegen tut. Das lernt sich sehr viel besser mit dem eigenen Geld.
Dann die Hälfte des Betreibers: Aktivieren Sie einen Webhook und bestätigen Sie, dass Ihr Shop ihn tatsächlich empfängt, generieren Sie einen Greenfield-API-Schlüssel, falls irgendetwas programmatisch Rechnungen erzeugen soll, und erstellen Sie ein vollständiges Backup, bevor Sie live gehen — damit die erste Wiederherstellung, die Sie je durchführen, eine Probe ist und kein Notfall.
Wo die Schlüssel liegen, und der eine Fehler, der zählt
Fast jedes schlechte Ergebnis mit einem selbst gehosteten Zahlungsdienstleister geht auf eine einzige, früh und beiläufig getroffene Entscheidung zurück: den Server etwas halten zu lassen, das ausgeben kann. Es lohnt sich, bei den drei Fällen konkret zu werden, denn sie unterscheiden sich wirklich.
- Bitcoin on-chain: immer Watch-only. BTCPay hält einen erweiterten öffentlichen Schlüssel und sonst nichts. Wird die Maschine kompromittiert, erfährt der Angreifer, was Ihnen bezahlt wurde, und kann ändern, wohin künftige Rechnungen zeigen — ein echter Angriff, und der Grund, nach jedem Vorfall die Wallet Ihres Stores zu überprüfen — aber er kann keinen bereits empfangenen Coin anrühren.
- Lightning: per Definition heiß. Kanäle werden mit Coins finanziert, die der Server ausgeben kann, denn genau das ist ein Kanal. Das ist die bewusste Ausnahme, und der Abschnitt weiter oben dimensioniert sie.
- Monero: strukturell View-only. Der private View Key legt jede eingehende Zahlung offen und autorisiert keine davon. Auf der Bitcoin-Seite gibt es dazu keine Entsprechung.
Die eine Funktion, die dieses Modell absichtlich durchbricht, ist Payjoin. Sie lässt Ihren Server einen Input zur Transaktion des Kunden beisteuern, was die Common-Input-Heuristik, auf die sich Chain-Analyse stützt, spürbar schwächt und für beide Seiten ein echter Privatsphäre-Gewinn ist — aber ein Empfänger muss signieren können, also braucht es dafür eine Hot Wallet innerhalb von BTCPay. Das ist ein echter Kompromiss und kein Feature zum Nulltarif. Gehen Sie ihn bewusst ein, und finanzieren Sie sie so, wie Sie die Lightning-Wallet finanzieren: mit einem Betrag, nicht mit allem.
Und falls Sie den Setup-Assistenten die Store-Wallet generieren lassen, weil das der schnellste Weg war: Notieren Sie sich den Seed, den er Ihnen gezeigt hat, verifizieren Sie ihn in einer Offline-Wallet, und planen Sie dann die Migration zu einem Watch-only-Setup. Ein Seed, der jemals auf einem mit dem Internet verbundenen Server lag, ist ein Seed mit laufendem Countdown.
Backups, und die Teile, die wirklich unersetzlich sind
Sortieren Sie den Zustand danach, was seine Wiederherstellung kosten würde, denn die Antworten fallen sehr unterschiedlich aus:
- Die Chain. Kein Backup-Problem. Sie ist öffentliche Daten und synchronisiert sich neu, langsam und kostenlos. Sichern Sie sie niemals.
- Die Datenbank. Rechnungen, Stores, Einstellungen, Nutzer, API-Schlüssel. Das ist das eigentliche Backup, sie ist klein, und ihr Verlust kostet Sie die Buchhaltung jedes einzelnen Verkaufs — nicht das Geld, aber den Papierkram.
- Ihre On-Chain-Wallet. Bereits sicher, weil der Schlüssel nie hier war. Das ist die Belohnung für Schritt fünf.
- Der Lightning-Kanalzustand. Derjenige, der zubeißt. Ein statisches Kanal-Backup lässt Sie nach einem Totalverlust die Mittel in Ihren Kanälen wiederherstellen, indem es sie zwangsweise schließt; es stellt die Kanäle nicht wieder her, und ist wertlos, wenn es veraltet ist. Es ändert sich bei jedem Öffnen oder Schließen eines Kanals, gehört also in eine automatisierte externe Kopie statt in einen Ordner, an den Sie sich vierteljährlich erinnern.
- Die Monero-View-only-Wallet. Wiederherstellbar aus der Adresse und dem View Key, die Sie weiterhin offline aufbewahren. Sichern Sie diese, und behandeln Sie die Wallet-Dateien als Cache.
Das Deployment liefert Helfer mit, die das korrekt erledigen:
btcpay-backup.sh # stops the stack, dumps Postgres, tars the config, restarts
btcpay-restore.sh # puts one of those archives backGenau diese Pause ist der Sinn der Sache — eine Hot-Kopie einer laufenden Datenbank kann sich in etwas Interessantes zurückspielen lassen. Verschlüsseln Sie alles, was die Maschine verlässt, und denken Sie daran, dass der wöchentliche Snapshot, der bei jedem Plan dabei ist, eine Annehmlichkeit ist und kein Backup: Ein Snapshot lebt zusammen mit dem, was er schützen soll.
Fehlerszenarien, die die Schnellstart-Anleitungen auslassen
In grober Reihenfolge, wie oft sie jemanden einen Abend kosten:
- Das Zertifikat wird nie ausgestellt. In neun von zehn Fällen wurde der A-Record erst nach dem Lauf des Installers angelegt, oder Port 80 ist gefiltert. Beheben Sie das DNS, bestätigen Sie, dass der Name von irgendwo außerhalb Ihres eigenen Laptops auflöst, und starten Sie dann das Setup-Skript erneut. Blind gegen die Zertifizierungsstelle erneut zu versuchen bringt Ihnen ein Rate-Limit und eine Woche Wartezeit ein, ändern Sie also zwischen den Versuchen etwas.
- Ein importierter erweiterter Schlüssel mit Historie zeigt kein Guthaben. Das ist die Pruning-Falle. Der Indexer findet neue Zahlungen, indem er neue Blöcke beobachtet, aber die Vergangenheit einer bestehenden Wallet zu rekonstruieren bedeutet, Blöcke zu lesen, die eine gekürzte Node bereits gelöscht hat. Verwenden Sie ein frisches Konto für den Store, und das Problem existiert nicht; wenn Sie Historie importieren müssen, brauchen Sie eine ungekürzte Node und einen Rescan.
- „Der Kunde hat bezahlt, und die Rechnung ist immer noch offen.“ Meist Unterzahlung durch die Gebühr der sendenden Wallet, eine Rechnung, die abgelaufen ist, während die Zahlung unbestätigt herumlag, oder eine Bestätigungsrichtlinie, die strenger ist, als Sie sich erinnern, sie gewählt zu haben. Alle drei sind Einstellungen, und alle drei sind der Grund, warum Sie zuerst mit eigenem Geld testen.
- Die Node fällt still und leise zurück. Ein hängengebliebener bitcoind gibt weiterhin Adressen aus und verpasst Zahlungen, ohne sich zu beschweren. Vergleichen Sie Ihre Blockhöhe regelmäßig mit einer öffentlichen Quelle und schlagen Sie bei einer Lücke Alarm; das sollten Sie nicht von einem Kunden erfahren müssen.
- Ein Update zum falschen Zeitpunkt.
btcpay-update.shverhält sich brav, startet aber alles neu. Führen Sie es bewusst aus, nie automatisch, und nie während eines Verkaufs. - Die Adresse erwirbt einen Ruf. Eine Checkout-Seite auf einer geblockten IPv4 ist eine Checkout-Seite, die manche Unternehmensnetzwerke und Mailfilter stillschweigend ablehnen. Jeder Plan hier liefert eine dedizierte Adresse ohne Historie, und es lohnt sich, sie zu prüfen, bevor Sie die Domain auf irgendetwas drucken.
Jurisdiktion, die Domain, und was Selbst-Hosting nicht verbirgt
Die Software entfernt eine Gegenpartei. Sie entfernt nicht den Rest der Angriffsfläche, und ehrlich damit umzugehen ist nützlicher als eine weitere Liste von Features.
Die Domain ist die Schwachstelle. Sie ist irgendwo registriert, sie löst öffentlich auf, und sie ist das Erste, worauf jeder schaut. Ein Zahlungsdienstleister, der selbst gehostet wird auf einem Hostnamen, der auf Ihren eigenen Namen bei einem Registrar in Ihrem eigenen Land registriert ist, hat das Geld aus den Händen eines Dritten herausgeholt und die Identität exakt dort belassen, wo sie war. Wenn das für das relevant ist, was Sie verkaufen, verdient der Registrar mindestens so viel Nachdenken wie der Host.
Die Jurisdiktion ist eine echte Variable. Wo die Maschine steht, entscheidet, wessen Gerichtsbeschluss sie erreicht und wie viel Verfahren im Weg steht. Das ist Reibung und Distanz, keine Immunität — ein Punkt, den der Eintrag zu Offshore-Hosting ausführlich macht, und es lohnt sich, ihn zu lesen, bevor Sie eine Flagge über ein Netzwerk stellen.
Das Konto ist das letzte Glied. Den Server mit einer E-Mail-Adresse zu mieten und in Monero zu bezahlen bedeutet, dass kein Kontoauszug die Checkout-Seite mit einer Bank verknüpft — seltsam, das zu übersehen, während man ein System baut, dessen ganzer Sinn es ist, keine zu brauchen. Jeder Plan hier ist standardmäßig no-KYC, und jeder Standort liefert eine dedizierte saubere IPv4 mit eigenem Reverse-DNS.
Und die Grenze wird ausgesprochen statt nur angedeutet. Nodes, Zahlungsdienstleister und Stores sind gewöhnliche Infrastruktur und hier willkommen; die Nutzungsrichtlinie ist kurz, öffentlich, und hat einen Boden, unter den es nicht geht. Ob Sie eine Lizenz brauchen, um Zahlungen anzunehmen, ist eine Frage danach, was Sie verkaufen und wo Sie sind, nicht nach der Software — und es ist eine Frage für jemand Qualifizierten, nicht für eine Hosting-Anleitung.
Häufige Fragen
Welchen VPS-Plan brauche ich für BTCPay Server?
Scout (2 vCPU / 4 GB / 70 GB NVMe, $9.00/mo) mit einer gekürzten Bitcoin-Node ist die ehrliche Untergrenze für einen funktionierenden Store, und das ist es, was die meisten Leser kaufen sollten. Fügen Sie Lightning hinzu, und Runner (3 vCPU / 6 GB / 100 GB, $14.00/mo) ist komfortabler; fügen Sie Monero als zweite Chain hinzu, und Alpha (6 vCPU / 12 GB / 200 GB, $28.00/mo) ist die Größe, bei der Sie aufhören, darüber nachzudenken. Das Projekt dokumentiert 2 GB als Minimum, was stimmt und nicht angenehm ist.
Kann ich BTCPay Server ohne eine vollständige Bitcoin-Node betreiben?
Ja, aber Sie entscheiden nur, welches Vertrauen übrigbleibt. BTCPay lässt sich auf eine externe Node richten, die Sie bereits betreiben — die vernünftige Variante davon, und ein guter Grund, vorher die Vollnode-Anleitung befolgt zu haben — oder auf die Node von jemand anderem, was einen Dritten wieder einführt, der jede Adresse sieht, die Ihr Store generiert. Die mitgelieferte Node existiert, weil das die einzige Konfiguration ist, in der niemand zusieht. Eine gekürzte Node ist immer noch eine Vollnode: Kürzen Sie sie, und der größte Teil des Ressourcen-Einwands verschwindet.
Unterstützt BTCPay Server Monero?
Ja, als optionale Integration, die Sie beim Deployment aktivieren. Sie fährt einen Monero-Daemon und eine Wallet-RPC hoch, und Sie verbinden sie mit einer View-only-Wallet, generiert aus Ihrer Hauptadresse und Ihrem privaten View Key — sodass der Server Zahlungen sehen, aber nicht ausgeben kann, was eine bessere Lösung ist als alles, was auf der Bitcoin-Seite verfügbar ist. Die Kosten sind eine zweite Chain zum Synchronisieren und Speichern, sowie die Zehn-Block-Sperre auf empfangene Outputs, etwa zwanzig Minuten, bevor die Mittel ausgebbar sind.
Ist es legal, einen eigenen Zahlungsdienstleister zu betreiben?
Die Software zu betreiben ist gewöhnlicher Softwarebetrieb. Die regulierte Tätigkeit ist an den meisten Orten das Halten oder Bewegen von Geld im Auftrag anderer Personen, und ein non-custodial Zahlungsdienstleister, der Zahlung für die eigenen Waren entgegennimmt, tut genau das nicht, weil niemals etwas im Auftrag von irgendjemandem gehalten wird. Was Sie verkaufen und wo Sie leben, bestimmt weiterhin Ihre Pflichten, Steuern eingeschlossen, und Selbst-Hosting ändert daran nichts. Das ist eine Hosting-Anleitung und keine Rechtsberatung: Wenn Sie vorhaben, für Dritte zu verarbeiten, gehen Sie davon aus, dass Sie in einer anderen Kategorie sind, und fragen Sie jemand Qualifizierten.
Verliere ich das Geld, wenn der Server ausfällt?
Das On-Chain-Geld nicht, sofern Sie Schritt fünf befolgt haben — diese Coins liegen in einer Wallet, deren Schlüssel nie auf dem Server war, und eine frische Installation, der derselbe erweiterte öffentliche Schlüssel gefüttert wird, sieht sie wieder. Was Sie verlieren, ist die Aufzeichnung: Rechnungen, Store-Einstellungen, API-Schlüssel, sofern Sie kein Datenbank-Backup hatten. Lightning ist die Ausnahme, weil Kanalguthaben auf dem Server liegen; sie nach einem Totalverlust wiederherzustellen braucht ein aktuelles statisches Kanal-Backup, und das erzwingt die Schließung Ihrer Kanäle, statt sie wiederherzustellen.
Brauche ich einen Domainnamen für BTCPay Server?
In der Praxis ja. Das Deployment stellt ein Zertifikat für einen Hostnamen aus, Browser und Wallets erwarten HTTPS auf einer Checkout-Seite, und Kunden werden gebeten, Geld an das zu schicken, was in der Adressleiste steht. Eine Subdomain von etwas, das Sie bereits besitzen, reicht völlig. Wenn eine öffentliche Domain selbst das Problem ist, lässt sich BTCPay stattdessen über einen Onion-Dienst erreichen — eine legitime Konfiguration, die auch verändert, wie viele Kunden die Seite erreichen können.
Was kostet Selbst-Hosting tatsächlich im Monat?
Die Software ist kostenlos und AGPL-lizenziert, also besteht die Rechnung aus dem VPS, der Domain und Ihrer Zeit. Bei $9.00 im Monat für Scout und ein paar Dollar im Jahr für einen Namen hört die Rechnung gegen jeden prozentbasierten Zahlungsdienstleister schon bei sehr kleinem Volumen auf, knapp zu sein — und anders als ein Prozentsatz wächst sie nicht mit Ihrem Erfolg. Die ehrlichen Kosten sind der dritte Posten: Sie sind jetzt die Person, die merkt, wenn die Node aufhört zu synchronisieren.

