TUTORIAL
Come accettare pagamenti Bitcoin senza intermediari con BTCPay Server
Ogni payment processor ospitato è un'azienda che può congelarti. Per chiunque accetti Bitcoin non è un'ipotesi astratta: i grandi processori hanno aggiunto anni fa la verifica dell'identità, soglie per lo sblocco dei fondi e regole di liquidazione, e un commerciante che non supera uno di questi controlli di solito lo scopre quando i soldi sono già in transito. BTCPay Server esiste proprio per questo. È un software gratuito e open source che trasforma un server che controlli tu nel tuo checkout personale — fatture, una schermata punto vendita (POS), plugin per il negozio, Lightning — senza nessuna azienda in mezzo, nessuna percentuale trattenuta e nessun account da perdere. Installarlo richiede davvero un solo pomeriggio. A decidere se il risultato vale qualcosa è la macchina che sta sotto, e la manciata di dettagli che un'installazione predefinita lascia silenziosamente puntati contro di te.
Cosa sostituisce davvero BTCPay Server
Un processore ospitato si mette in mezzo tra il tuo cliente e il tuo wallet. Genera l'indirizzo, osserva la chain, converte l'importo, trattiene i fondi per un certo periodo e alla fine ti paga. Ognuno di questi passaggi è qualcosa che impara su di te ed è un punto in cui può rifiutarsi di procedere. BTCPay fa lo stesso lavoro su hardware che noleggi tu, e la differenza in quello che riesce a sapere di te è totale.
- I pagamenti arrivano direttamente nel tuo wallet. Dai a BTCPay una chiave pubblica estesa, lui deriva un indirizzo nuovo per ogni fattura e lo osserva — non detiene mai una chiave privata per i pagamenti on-chain e non può muovere un solo satoshi.
- Non c'è nessuna commissione e nessun account. Il software è open source, lo esegui tu stesso, e non c'è niente per cui fare domanda né niente da cui poter essere sospesi.
- Si occupa delle parti noiose da costruire: scadenza della fattura, conversione del tasso in tempo reale, pagamenti insufficienti o in eccesso, pagamenti parziali, rimborsi e una ricevuta che il cliente può verificare in modo autonomo.
- Include le interfacce di cui la maggior parte delle persone ha bisogno — una schermata punto vendita (POS), pulsanti di pagamento, una pagina di crowdfunding, plugin per le piattaforme e-commerce più diffuse — e un'API completa se lo stai collegando al tuo software.
- Lightning arriva nella stessa distribuzione se lo vuoi, ed è ciò che rende possibili i pagamenti sotto pochi dollari.
Vale la pena dichiarare chiaramente il confine. BTCPay non trasforma Bitcoin nella tua valuta locale, e non elimina l'exchange o la banca se è lì che i soldi devono comunque finire. Ciò che elimina è il processore — l'intermediario che tratteneva una percentuale, custodiva i tuoi fondi nel mezzo e per farlo pretendeva la tua identità. Quello che ottieni in cambio ha la stessa forma di un sito che ospiti tu stesso: più controllo, e il lavoro che ne consegue.
Diventi tu il payment processor
Quel lavoro è il costo onesto del self-hosting, ed è molto meglio capirlo prima dell'installazione che dopo. Nessuno controlla il tuo uptime, nessuno ripristina il tuo backup, e non c'è nessuno dall'altra parte di una linea di assistenza nel momento in cui un cliente insiste di aver pagato e tu non lo vedi da nessuna parte.
- L'uptime è affar tuo. Non è possibile creare una fattura mentre il server è offline, quindi un checkout che deve funzionare sempre ha bisogno di una macchina che qualcuno controlli davvero.
- I backup sono affar tuo. Perdere il server è una cosa da cui si può sopravvivere; perdere il descrittore del wallet o lo stato dei canali Lightning no.
- La custodia delle chiavi si divide in due. I fondi on-chain risiedono in un wallet che BTCPay si limita a osservare, il che è la disposizione sicura. I fondi Lightning risiedono in un hot wallet sul server stesso, il che non lo è — tratta quel saldo come liquidità operativa, mai come risparmio.
- Le contestazioni non hanno un arbitro. Non esistono chargeback, il che è in gran parte il punto, ma significa anche che ogni rimborso è una decisione che prendi tu e una transazione che invii tu.
- Gli aggiornamenti sono affar tuo. Sotto l'interfaccia amichevole c'è uno stack di container con dentro un nodo Bitcoin, e richiede la stessa disciplina di manutenzione di qualsiasi altra cosa lasciata in esecuzione su un IP pubblico.
Niente di tutto questo è pesante. Sono pochi minuti al mese una volta che il sistema gira, più un pomeriggio attento all'inizio. Semplicemente non è zero, e la commissione di un processore in parte comprava esattamente questo.
Dimensionare la macchina: il nodo che sta sotto decide tutto
BTCPay in sé è un'applicazione leggera. Il nodo Bitcoin su cui gira non lo è, e quasi tutti gli errori di dimensionamento qui nascono dal fare i conti sulla web app invece che sulla chain che sta sotto. Una distribuzione standard avvia Bitcoin Core, un indicizzatore che tiene traccia dei tuoi wallet, un database, un reverse proxy e l'applicazione — ed è Core a volere il disco, la memoria e la pazienza.
- Lo storage è la decisione che sceglie il tuo piano al posto tuo. Una chain non pruned supera oggi i 750 GB e cresce di circa 7 GB al mese. La distribuzione include invece preset per il risparmio di spazio che limitano i dati di blocco a circa 100, 50 o 25 GB, e ognuno di essi resta comunque un vero nodo completo che verifica ogni regola per conto proprio.
- Il pruning non accorcia la prima sincronizzazione. Core scarica e verifica comunque ogni blocco a partire dal blocco Genesis; il pruning decide solo cosa conservare in seguito.
- La memoria è da dove viene la velocità di sincronizzazione. 4 GB lo fanno girare, 8 GB sincronizzano decisamente più in fretta e lasciano margine per Lightning e per un database che non deve litigare con il nodo per la cache.
- L'NVMe non è opzionale. La sincronizzazione iniziale è dominata da letture e scritture casuali sul database UTXO, quindi lo stesso lavoro su un disco lento richiede giorni invece che ore.
- La banda non è un problema una volta sincronizzati, ma la prima sincronizzazione scarica l'intera chain. Un piano a consumo è la forma sbagliata per questo compito.
In pratica questo porta a VPS-8 a $13.99/mo — 4 vCPU EPYC, 8 GB DDR5 ECC e 120 GB di NVMe Gen4 — come predefinito sensato per un nodo pruned con Lightning, con VPS-16 a $26.99/mo se preferisci non dover più pensare al disco. Ogni livello VPS include NVMe Gen4 in RAID-10 e trasferimento illimitato, quindi la vera variabile è solo la capacità. Se vuoi la chain non pruned — per riscansionare un vecchio wallet, o per eseguire un server Electrum accanto al negozio — salta del tutto la gamma VPS: un server dedicato da $64/mo con 2 × 1 TB di NVMe è sia più economico sia molto più capiente del VPS più grande, e l'aritmetica peggiora solo col tempo. I compromessi sono gli stessi trattati in eseguire un nodo Bitcoin completo, perché è esattamente quello che stai facendo qui, con un checkout piazzato sopra.
Passo dopo passo: da un VPS appena creato a un checkout live
- 01Distribuisci il VPS e blindalo per primoUna macchina Debian o Ubuntu, SSH solo a chiavi, firewall a blocco predefinito — prima che ci sia sopra qualcosa di valore. La versione ordinata di quella checklist è una guida a sé.
- 02Punta un dominio verso il server e apri le porte 80 e 443BTCPay emette il proprio certificato al primo avvio, il che funziona solo se l'hostname risolve già verso la macchina ed entrambe le porte sono raggiungibili. Fare questo nell'ordine sbagliato è di gran lunga la causa più comune di installazioni fallite.
- 03Clona la distribuzione Docker ufficialeIl progetto fornisce una configurazione a container con le scelte già fatte per te. Usala invece di assemblare i pezzi a mano — è ciò su cui viene testato il percorso di aggiornamento.
- 04Decidi le tue opzioni prima del primo avvioRete, hostname, implementazione Lightning e preset di storage sono variabili d'ambiente lette una sola volta durante il setup. Cambiare in seguito il livello di pruning ha un costo, quindi scegli ora.
- 05Esegui lo script di setup e lascialo sincronizzareTutto si avvia in dei container e Bitcoin Core inizia il download iniziale dei blocchi. Questa è la parte lunga — diverse ore su NVMe — e l'unico passaggio che non puoi affrettare.
- 06Registra subito l'account amministratoreIl primo account che si registra diventa l'amministratore. Fallo nel momento stesso in cui l'interfaccia risponde, non la mattina dopo.
- 07Collega un wallet al tuo negozioCrea un negozio, poi collega un wallet importando una chiave pubblica estesa da un hardware wallet o da un account dedicato nel tuo software. BTCPay osserva gli indirizzi; non firma mai nulla.
- 08Testa con un pagamento reale, poi collega il front endInvia a te stesso un piccolo importo e verifica che la fattura risulti saldata. Solo a quel punto collega la schermata punto vendita, il plugin del negozio o l'API che il tuo sito richiamerà davvero.
Lightning: ne vale la pena, e cosa costa davvero
I pagamenti on-chain funzionano ovunque e costano quel che costa il mempool quel giorno, il che rende scomodo — e a volte assurdo — qualsiasi importo sotto pochi dollari. Lightning risolve questo problema, e BTCPay avvierà un nodo per te nella stessa distribuzione. Per pagamenti piccoli o frequenti è la risposta giusta. È anche un impegno operativo di natura diversa rispetto a un nodo Bitcoin, e vale la pena conoscere le differenze prima di attivarlo.
- Ti serve liquidità in entrata prima di poter essere pagato. Aprire un canale tuo ti dà capacità di spesa, non di ricezione. Finché qualcuno non apre un canale verso di te o non acquisisci capacità in entrata, il tuo nodo non può accettare assolutamente nulla.
- Il saldo è caldo per progettazione. I fondi dei canali vivono in un wallet sul server, online perché devono esserlo per forza. Tieni lì solo la liquidità operativa e sposta il resto on-chain.
- Lo stato dei canali non si mette in backup copiando i file. Ripristinare uno snapshot vecchio di un nodo Lightning può costarti i canali che descrive. Usa il meccanismo di backup dell'implementazione stessa e capisci davvero cosa ripristina.
- Qui il downtime costa più che on-chain. Un nodo offline non può instradare né ricevere, e uno stato obsoleto che torna online può essere penalizzato.
- I canali hanno costi on-chain a entrambe le estremità. Apertura e chiusura sono transazioni, quindi l'abitudine di aprire molti canali piccoli costa più di quanto sembri.
- Il tuo nodo è visibile se glielo permetti. Un nodo annunciato pubblicamente trasmette a tutti il proprio alias e indirizzo di rete, il che mette il tuo server su una mappa che chiunque può leggere.
Una via di mezzo sensata è Lightning con canali non annunciati — puoi essere pagato senza pubblicare la tua infrastruttura — e l'on-chain come opzione predefinita per qualsiasi importo elevato. Se vuoi che il nodo sia raggiungibile senza essere attribuibile, eseguilo su Tor, lo stesso ragionamento che mette un nodo Bitcoin dietro un servizio onion invece che su un IP pubblico.
Le fughe di identità che un'installazione predefinita lascia aperte
Questa è la sezione che conta se hai scelto BTCPay proprio per sfuggire a un payment processor che sapeva chi eri. Il software elimina perfettamente quel processore. Da solo, però, non rimuove tutto il resto che collega il checkout a una persona — e la maggior parte di quei collegamenti nasce da passaggi che sembrano non avere nulla a che fare con i pagamenti.
- Il dominio. Un registrar conserva la tua identità anche quando il WHOIS pubblico è oscurato, e ha bisogno di un indirizzo di contatto funzionante per mantenere attivo il nome a dominio. L'hostname è di gran lunga il modo più comune con cui un checkout self-hosted viene ricondotto al suo proprietario.
- Certificate Transparency. Nel momento in cui viene emesso un certificato, l'hostname esatto viene pubblicato in registri pubblici che chiunque può consultare. Un sottodominio che credevi privato — pay.qualcosa, btcpay.qualcosa — viene annunciato in tutto il mondo con tanto di timestamp.
- L'host. Se il server è stato acquistato con una carta intestata al tuo nome legale, la macchina è a tuo nome legale a prescindere da cosa ci giri sopra. Questo si decide in fase di registrazione, molto prima della prima fattura.
- La chiave pubblica estesa. Dare a BTCPay uno xpub gli permette di osservare ogni indirizzo che quella chiave deriva, compresi saldi e cronologia che non avevi mai intenzione di esporre a un'applicazione web. Usa un account dedicato per il negozio, mai lo xpub del tuo wallet principale.
- Il nodo Lightning. Un nodo annunciato pubblica un alias e un indirizzo. Un alias che porta il tuo brand, su un IP che serve anche il tuo checkout, collega i due elementi in modo permanente in un grafo pubblico.
- Le chiamate in uscita. I fornitori dei tassi di cambio, i plugin e le integrazioni di notifica contattano tutti l'esterno dalla macchina, e le notifiche via email passano attraverso qualsiasi account SMTP tu abbia configurato. Ognuno di questi è una terza parte che vede il tuo server.
- Il percorso di incasso. Le coin che lasciano il negozio per finire su un account exchange verificato arrivano con tutta la loro cronologia al seguito. Questa fuga è a valle di BTCPay, ed è quella che più spesso vanifica tutta l'attenzione messa a monte.
Chiudere queste falle è un lavoro ordinario, non qualcosa di esotico. Scegli un registrar che accetta crypto e raccoglie il minimo indispensabile, e forniscigli un indirizzo non collegato alla tua identità. Metti la macchina su un host che non ti ha mai chiesto chi sei e pagalo da un saldo in crypto — Bitcoin è pseudonimo, non anonimo, quindi ricaricare in Monero è ciò che chiude la traccia on-chain se per te questo conta. E raggiungi l'interfaccia di amministrazione tramite un tunnel WireGuard invece di esporre una pagina di login per qualcosa che detiene denaro. Ognuna è una piccola decisione presa una volta sola; insieme fanno la differenza tra "nessun processore" ed essere genuinamente privati.
Tenerlo in funzione dopo il lancio
Un checkout che funziona da un anno è un checkout che nessuno controlla da un anno. Una breve routine di manutenzione impedisce che questo si trasformi in un'interruzione proprio nel tuo giorno di maggior traffico.
- Aggiorna secondo il ritmo del progetto, non il tuo. La distribuzione ha un percorso di aggiornamento che sposta insieme versioni di container coerenti tra loro; aggiornare i singoli pezzi a mano è il modo in cui uno stack funzionante diventa uno stack rotto.
- Metti in backup ciò che non può essere rigenerato: il database e la configurazione del negozio, il descrittore del wallet, e il backup di Lightning se ne gestisci uno. La blockchain non è un backup — si riscarica e basta.
- Fai un ripristino una volta, di proposito, mentre tutto funziona ancora. Un backup non testato di un sistema di pagamento è solo un'ipotesi sui tuoi incassi.
- Tieni d'occhio il disco. Un nodo pruned ha un ingombro stabile, ma i log e i database no, e un disco pieno blocca il nodo, il che blocca le fatture.
- Mantieni la macchina aggiornata con le patch e le porte chiuse. Tutto ciò che c'è nella checklist di hardening dei primi dieci minuti si applica anche qui, con una posta in gioco decisamente più alta.
Aggiungi anche un controllo esterno sul negozio, già che ci sei. Qualcosa di semplice come un monitor che interroga dall'esterno l'endpoint della fattura ti avvisa che il checkout è down prima che se ne accorga un cliente, il che rappresenta gran parte della differenza pratica tra self-hosting ed essere irraggiungibili. E tratta la macchina stessa come descritto in i primi dieci minuti su un nuovo VPS, perché la posta in gioco è più alta su una macchina che custodisce denaro.
Errori che costano soldi veri
- Importare una seed phrase invece di una chiave pubblica estesa, trasformando un'applicazione web pubblica in un hot wallet che contiene ogni pagamento mai ricevuto.
- Configurare il DNS dopo aver eseguito lo script di installazione, per poi chiedersi perché il certificato non viene mai emesso e il sito non si carica.
- Scegliere il preset di pruning più aggressivo, per poi provare a collegare un wallet con anni di cronologia che il nodo non può più riscansionare.
- Trattare il saldo Lightning come risparmio invece che come liquidità operativa che per caso vive online.
- Fare il backup di un nodo Lightning copiando la sua directory dei dati e presumere che quella sia una via di ripristino valida.
- Comprare un piano dimensionato per l'applicazione web e finire lo spazio su disco a metà della sincronizzazione iniziale.
- Lasciare l'interfaccia di amministrazione aperta a tutto internet dietro una password riciclata da qualche altra parte.
- Registrare il dominio e noleggiare il server a proprio nome, dopo aver fatto bene tutto il resto.
BTCPay è uno dei pochi software che elimina del tutto un intermediario invece di sostituirlo con uno più simpatico. L'installazione è un pomeriggio e la sincronizzazione è una notte. Quello che ti resta è un checkout che accetta Bitcoin e Lightning, non addebita nulla, non custodisce nulla e non deve rendere conto a nessuno — in esecuzione su una macchina che puoi pagare con lo stesso saldo che incassa. Dimensiona il disco per il nodo, tieni la seed lontana dal server, e metti la macchina in un posto che non ti ha mai chiesto il tuo nome.