La mascotte orso polare di NordBastion in piedi dietro un bancone da mercante in pietra nordica intagliata, con sopra un pannello di checkout olografico ciano fluttuante che mostra un codice QR con un simbolo Bitcoin ambra e un glifo a forma di fulmine, e un unico arco ininterrotto di monete luminose che corre dal pannello dritto fino a una porta di volta runata aperta accanto a lui, con un rack server e una finestra ad arco illuminata dall'aurora sullo sfondo
Guida pratica · Pagamenti in crypto·21 min di lettura · 60 min pratici

Accetti il pagamento lei stesso.
Non è rimasto nessuno che possa congelarlo.

Ogni processore di carte e ogni gateway crypto in hosting si mette in mezzo tra lei e il suo cliente, trattiene una percentuale, conserva l'elenco di chi le ha pagato cosa, e si riserva il diritto di fermarsi. BTCPay Server è il software che li elimina: un processore di pagamento open source, self-hosted, non custodial, in cui le monete finiscono direttamente in un portafoglio da cui il server non può spendere. Sei passaggi per un checkout Bitcoin e Lightning funzionante su un server che affitta in modo anonimo — la forma del nodo che decide il budget, la chiave watch-only, il problema della liquidità in entrata, e la regola di backup che Lightning infrange. Il server costa $7.90 al mese. Testato su Debian 12.

I sei passaggi
  1. 01

    Scelta

    Nodo completo, pruned o esterno

  2. 02

    Provisioning

    Prima il dominio, poi quattro porte

  3. 03

    Distribuisci

    Un generatore, un comando

  4. 04

    Connettere

    Chiave watch-only, mai un seed

  5. 05

    Lightning

    Canali e capacità in entrata

  6. 06

    Rilascio

    Checkout, backup, aggiornamenti

Prima di iniziare · Cos'è un processore

Bitcoin ha eliminato la banca. La maggior parte dei negozi ne rimette una.

Un pagamento su una blockchain non ha bisogno di un'azienda in mezzo. Il cliente firma una transazione, la rete la conferma, e il denaro è suo — non c'è un acquirer, non c'è una finestra di regolamento e non c'è nessuno dalla cui approvazione il pagamento dipenda. Questo è tutto il senso della cosa, ed è il motivo per cui questa tecnologia esiste.

Poi un negozio deve effettivamente accettare pagamenti, e i requisiti pratici arrivano tutti insieme. Ogni fattura ha bisogno del proprio indirizzo, così i pagamenti si possono distinguere. Qualcuno deve osservare la catena e decidere quando una fattura è pagata. L'importo deve essere quotato in una valuta in cui il cliente ragiona, a un tasso che tenga abbastanza a lungo perché lui prema invia. Lo stato dell'ordine deve rifluire nel negozio. E deve funzionare alle due di notte senza che nessuno stia a guardare. Costruire tutto questo è un progetto; non costruirlo è il motivo per cui quasi tutti si iscrivono invece a un gateway ospitato — rimettendo, nello spazio di un modulo, un intermediario in un sistema progettato per non averne uno.

Vale la pena dire chiaramente cosa detiene quell'intermediario, perché è più della commissione. Detiene le monete, almeno finché non viene eseguito un payout, il che significa che può ritardarne uno. Detiene l'elenco: ogni cliente, ogni importo, ogni timestamp, ogni prodotto, in un database che lei non può leggere né cancellare. Detiene un documento d'identità su di lei, perché un'azienda che tocca il denaro altrui è tenuta a raccoglierne uno. E detiene l'interruttore, perché i termini di servizio si riservano il diritto di decidere che la sua attività non è più gradita — una decisione che arriva via email, si applica sia al saldo sia all'account, e in pratica non è impugnabile.

BTCPay Server è la risposta esattamente a quel problema, e a nient'altro. È un processore di pagamento gratuito e open source che fa girare sulla propria macchina: deriva un indirizzo per ogni fattura, osserva la catena, quota i prezzi in valuta fiat, espone un checkout e un'API, e parla Lightning. Non detiene mai le sue monete, perché il portafoglio che osserva è uno che possiede già. Quattro modi per accettare un pagamento in crypto, e cosa costa davvero ciascuno:

Proprietà Un gateway crypto in hosting Un indirizzo grezzo nel footer BTCPay sull'istanza di qualcun altro BTCPay sul proprio VPS
Chi detiene le moneteIl gateway, fino al payoutLeiLei — osserva, non può spendereLei — osserva, non può spendere
Chi può impedirle di commerciareIl gateway, via emailNessunoL'operatore dell'istanzaNessuno
Chi vede ogni cliente e ogni importoIl gateway, in modo permanenteChiunque — un indirizzo, un totale pubblicoL'operatore dell'istanzaLei
Documento d'identità richiestoSì, prima del primo payoutNoQualunque cosa l'operatore richiedaNo
Costo per transazioneUna percentuale, per sempreNienteNienteNiente — $7.90 al mese, fisso
Distingue una fattura dall'altraSìNo — riconcilia a manoSìSì
Lo scelga quandoVuole zero operazioni e accetta i terminiDonazioni, una manciata all'annoVuole il software ma non il serverGli incassi sono suoi, e così anche l'elenco

Anche la seconda colonna non è uno scherzo — un singolo indirizzo in un footer va genuinamente bene per un link di donazione, e far finta del contrario vende software che a nessuno serve. Smette di andare bene nel momento in cui due persone pagano lo stesso importo lo stesso giorno, o nel momento in cui preferirebbe che il suo reddito annuo non fosse una cifra pubblica che chiunque può sommare.

Passo 01 · Scelta

Una decisione fissa l'intero conto. Quanta catena tiene?

Un processore di pagamento deve poter rispondere onestamente a una sola domanda: questa fattura è stata pagata? Rispondere significa osservare la rete Bitcoin, e osservarla correttamente significa far girare un nodo che valida i blocchi da sé anziché credere a quello che qualcun altro gli dice. Quel nodo è l'intero budget hardware di questo progetto — BTCPay stesso, l'indexer e il database insieme sono un errore di arrotondamento al suo confronto.

Ci sono tre disposizioni che hanno senso e una che non ne ha. Un nodo archivistico mantiene ogni blocco mai minato: abbondantemente oltre i 700 GB nel 2026, e in crescita di circa 50 GB l'anno. È quello che vuole se ha anche intenzione di far girare un block explorer o fare analisi storiche, ed è eccessivo per un negozio. Un nodo pruned scarica e valida completamente ogni blocco esattamente allo stesso modo, poi scarta i vecchi e mantiene una finestra scorrevole. Il modello di sicurezza è identico — questa è la parte su cui la gente sbaglia, perché “pruned” suona come “parziale”, e non lo è — e il generatore di deployment fornisce frammenti già pronti per questo.

Un nodo esterno è la terza: punti lo stack verso un nodo Bitcoin che gestisce già, tramite un collegamento privato. Se ha già seguito la guida al nodo Lightning non ha motivo di tenere una seconda copia della catena, e una VPN mesh tra le due macchine è il modo pulito di collegarle. La disposizione che non ha senso è puntare un negozio verso il nodo pubblico di uno sconosciuto: impara ogni indirizzo che sta osservando, cioè il suo fatturato, ed è nelle condizioni di mentirle sul fatto che una fattura sia stata pagata.

Deployment Catena su disco Volume totale necessario A cosa rinuncia
Pruned, finestra minima~5–25 GB~40 GBLe riscansioni, e qualsiasi margine d'errore. L'impostazione più piccola non è consigliata.
Pruned, finestra di ~50 GB~50 GB~80 GBNiente che un negozio noti. Il minimo sensato.
Pruned, finestra di ~100 GB~100 GB~140 GBNiente. La scelta predefinita comoda, con margine per Lightning.
Archivistico, storico completo700 GB +~960 GBNiente — ma lo paga ogni mese, per sempre.
Nodo esterno che gestisce giàNessuno su questo server~40 GBIndipendenza — il checkout è giù quando lo è l'altro server.
L'unica cosa che il pruning le costa davvero

Un nodo pruned non può riscansionare i blocchi che ha scartato. In pratica significa che non può ricostruire lo storico di un portafoglio le cui transazioni precedono il deployment — l'indexer scansiona in avanti a partire dal giorno in cui collega la chiave, quindi i vecchi pagamenti verso quell'account semplicemente non compariranno nel negozio. Non è un problema se fa quello che raccomanda il passo 04 e dà al negozio un account appena creato; è un pomeriggio genuinamente spiazzante se collega un portafoglio che usa da tre anni e metà del suo storico risulta mancante. Decida cosa sta facendo prima di installare, non dopo.

Un'altra decisione appartiene a qui, non a dopo, perché cambia quello che l'installer costruisce: se vuole Lightning fin dal primo giorno. Solo on-chain è una configurazione completa e un punto di partenza perfettamente rispettabile. Aggiungere Lightning più avanti è supportato e non doloroso, ma è un secondo demone con fondi propri e proprie regole di backup, e c'è molto da dire a favore del dimostrare che il denaro vero arriva attraverso il percorso semplice prima di introdurre quello complicato.

Passo 02 · Provisioning

Il dominio deve esistere prima. L'installer chiederà un certificato.

Ordini il server. Nel pannello: Ordina → VPS → Garrison, immagine Debian 12, nel bastione in cui vuole che vivano i dati del negozio — Helsinki, Stoccolma, Oslo o Reykjavík. Garrison è la scelta predefinita giusta perché contiene una catena pruned da 100 GB, un nodo Lightning e il database senza che debba ripensare al disco per anni. Sentinel funziona con un pruning più stretto; Bulwark è il livello per un nodo archivistico. Non è richiesto alcun indirizzo email per aprire l'account, e la fattura si salda in Monero, Bitcoin, Lightning o qualsiasi altro asset supportato — il che è la parte piacevole di questo progetto in particolare, dato che sta costruendo una macchina per accettare pagamenti in crypto e la sta pagando con uno di essi.

Poi esegua la checklist di hardening della prima ora prima di qualsiasi altra cosa — SSH solo a chiave su una porta spostata, aggiornamenti automatici, un firewall a diniego predefinito. Questo server conterrà col tempo il registro di ogni cliente che ha e il materiale delle chiavi di un nodo Lightning con fondi vivi al suo interno. Non è un server da lasciare con l'autenticazione a password per una settimana.

Ora il record DNS, e lo faccia prima di eseguire l'installer, non dopo. Scelga l'hostname su cui vivrà il checkout — shop.example.com, pay.example.com, quello che preferisce — e punti un record A verso l'indirizzo del VPS, più un AAAA se lo vuole raggiungibile via IPv6. Lo lasci propagare. Il reverse proxy che l'installer configura cercherà di ottenere un certificato per quel nome esatto durante il suo primo avvio, usando una sfida HTTP che richiede che il nome risolva già verso questa macchina. Un record non ancora attivo è, di gran lunga, il modo più comune in cui una prima installazione finisce in un errore che disorienta.

L'hostname non è del tutto permanente, ma lo tratti come se lo fosse

Il deployment include uno script per cambiare il dominio in un secondo momento, quindi questo è recuperabile e non fatale. Quello che non è recuperabile con un solo comando è tutto ciò che sta a valle: il certificato viene riemesso, ogni pulsante di pagamento e URL di webhook che ha distribuito punta ancora al vecchio nome, un Lightning address è un nome su un dominio e si sposta insieme ad esso, e qualsiasi plugin del negozio va riconfigurato. Scelga un nome che è disposto a tenere sulla carta intestata per anni, e preferisca un sottodominio di un dominio che pubblica già a uno nuovo che descrive cosa fa la macchina.

Poi scriva le regole del firewall mentre ancora nessuno è in ascolto. Quattro porte, e solo quattro. Il checkout è per necessità un endpoint HTTPS pubblico — il browser di un cliente deve poterlo raggiungere — e la porta 80 resta aperta perché il rinnovo del certificato la usa. La porta peer-to-peer di Lightning serve solo se vuole che altri nodi possano aprire canali verso di lei, cosa che il passo 05 sosterrà essere nel suo interesse. La porta peer-to-peer di Bitcoin non ha alcun bisogno di essere aperta: il suo nodo fa connessioni in uscita perfettamente bene, e aprirla in entrata lo rende solo più facile da trovare.

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

Due note sulle risorse prima di continuare. Dia dello swap al server se non ne ha — il download iniziale dei blocchi è l'ora più affamata di memoria di questo progetto, e 4 GB di RAM con 2 GB di swap si comportano molto meglio di 4 GB da soli. E verifichi i conti sul disco del passo 01 rispetto al livello che ha effettivamente ordinato, perché un nodo che riempie il proprio volume a metà sync non fallisce educatamente; corrompe il proprio indice e ricomincia da capo.

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
Passo 03 · Deploy

Un generatore, non un compose file. Lei lo descrive; è lui ad assemblarlo.

Il deployment ufficiale non è un docker-compose.yml che si modifica a mano. È un generatore: descrive il deployment che vuole tramite variabili d'ambiente, e uno script assembla il file compose a partire da una libreria di frammenti — uno per Bitcoin Core, uno per l'indexer, uno per PostgreSQL, uno per l'applicazione BTCPay, uno per ciascuna implementazione Lightning, uno per il reverse proxy, e una lunga coda di extra opzionali. Questo è un design migliore di quanto sembri a prima vista, perché gli aggiornamenti rigenerano il file anziché chiederle di unire le modifiche di qualcun altro alle sue. Significa anche che il blocco di variabili d'ambiente qui sotto è la configurazione reale del suo deployment, e vale la pena tenerlo nello stesso posto delle sue altre note infrastrutturali.

Cloni il repository ed esporti le variabili d'ambiente. Ogni riga qui sotto corrisponde direttamente a una decisione del passo 01: l'hostname è il dominio che ha puntato al passo 02, il frammento di storage è la finestra di pruning che ha scelto, e la variabile Lightning è un'implementazione oppure viene omessa del tutto per un avvio solo on-chain.

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

Due dettagli in quel blocco meritano una frase ciascuno. Il punto iniziale in . ./btcpay-setup.sh -i non è un refuso — lo script viene sourced anziché eseguito, quindi l'ambiente che imposta resta nella sua shell e i comandi helper funzionano anche dopo. E il nome del frammento di storage è sensibile alla versione: il generatore ha distribuito nel tempo varianti che riducono a circa 100, 50, 25 e 5 GB, con nomi che sono stati modificati tra una release e l'altra. Legga l'elenco dei frammenti nel repository che ha appena clonato invece di fidarsi di un valore copiato da un articolo di blog, incluso questo.

L'installer impiegherà qualche minuto, scaricherà molte immagini, otterrà il certificato e avvierà tutto. Poi inizia l'attesa: il nodo deve scaricare e validare la catena prima che il negozio possa confermare un pagamento, il che significa ore e non minuti anche da pruned, perché il pruning scarta i blocchi dopo averli validati, non salta il lavoro. L'interfaccia web è disponibile immediatamente e le mostrerà un banner di sincronizzazione. Non emetta una fattura vera finché non è sparito.

./bitcoin-cli.sh getblockchaininfo | grep -E 'blocks|headers|verificationprogress|pruned'
docker ps --format '{{.Names}}\t{{.Status}}'
Reclami l'account amministratore nei prossimi cinque minuti

Un'istanza appena installata non ha utenti, e il primo account a registrarsi diventa l'amministratore. Finché non lo reclama, chiunque raggiunga l'URL può farlo — e l'URL non è segreto: nel momento in cui il certificato è stato emesso, l'hostname è stato pubblicato nei log pubblici di certificate transparency, che vengono indicizzati e scansionati in continuazione da persone che cercano esattamente questo. Apra il sito e si registri prima di qualsiasi altra cosa, poi controlli in Server Settings e verifichi che la registrazione non sia aperta a sconosciuti. È una finestra di cinque minuti che molti lasciano aperta per giorni perché il negozio “non è ancora online”.

Vale la pena conoscere due frammenti opzionali mentre è ancora nella configurazione. Uno aggiunge un hidden service Tor, così il checkout è raggiungibile anche a un indirizzo onion v3 oltre che su clearnet — utile per i clienti che preferirebbero non risolvere il suo dominio, e la stessa idea della guida al servizio onion. Un altro aggiunge una seconda criptovaluta. Entrambi si impostano allo stesso modo, aggiungendo alla variabile additional-fragments e rieseguendo lo script di setup; il generatore ricostruisce il file compose e riavvia solo ciò che è cambiato.

Passo 04 · Connessione

Le dia una chiave pubblica. Non le dia mai un seed.

Crei un negozio, e poi prenda l'unica decisione di questa pagina che conta davvero. BTCPay offrirà due modi per collegare un portafoglio Bitcoin: collegarne uno esistente, oppure lasciare che ne generi uno nuovo tenendo il seed sul server. Il primo è watch-only ed è quello che vuole. Il secondo trasforma una macchina pubblica, esposta a internet, in un hot wallet che detiene il suo fatturato, e nessuna quantità di hardening rende questo un buono scambio per un server il cui unico compito è essere raggiungibile da sconosciuti.

Il meccanismo dietro questo consiglio è abbastanza elegante da meritare di essere capito. I portafogli moderni sono gerarchici: un seed deriva un albero di chiavi, ed esiste una chiave pubblica estesa — uno xpub, o la sua variante zpub per il segwit nativo — a partire dalla quale si può calcolare ogni indirizzo di ricezione di un account senza alcuna capacità di firmare. La consegni al negozio e potrà generare un indirizzo nuovo per ogni fattura, osservare la catena per i pagamenti verso ciascuno di essi, e mostrarle il saldo. Non può muovere un satoshi. La metà privata resta nel suo portafoglio, o sul suo dispositivo hardware, e non viaggia mai.

Quindi: apra Sparrow, Electrum, oppure l'app desktop del suo portafoglio hardware, crei un nuovo account dedicato a questo negozio, ed esporti la sua chiave pubblica estesa. Nelle impostazioni del portafoglio del negozio scelga di collegare un portafoglio esistente, incolli la chiave, e verifichi i primi indirizzi che BTCPay deriva contro quelli mostrati dal suo portafoglio. Se corrispondono, il percorso di derivazione è corretto e il collegamento è fatto. Se non corrispondono, ha scelto il tipo di script sbagliato — la differenza tra uno xpub e uno zpub è la differenza tra due insiemi di indirizzi completamente separati.

Una chiave pubblica estesa non è una stringa innocua

Non può spendere, ed è proprio questo il punto — ma può enumerare. Chiunque la ottenga può derivare ogni indirizzo che l'account userà mai e quindi leggere ogni pagamento che ha mai ricevuto e riceverà mai, per tutto il tempo in cui la usa. È una divulgazione permanente e irrevocabile degli incassi del suo negozio, ed è per questo che l'account che collega dovrebbe essere dedicato al negozio anziché essere quello che contiene i suoi risparmi. Tratti la chiave come confidenziale, la tenga fuori da screenshot e ticket di supporto, e se dovesse comunque trapelare, sposti il negozio su un nuovo account invece di sperare bene.

Ora le impostazioni delle fatture, che sono il punto in cui un negozio viene davvero calibrato. La scadenza è impostata di default a circa quindici minuti, ed è un blocco del tasso di cambio più che un limite tecnico: è per quanto tempo è disposto a mantenere un prezzo denominato in fiat contro un asset volatile. La riduca per un mercato volatile, la allunghi se i suoi clienti sono lenti. Le conferme decidono quando una fattura conta come saldata — zero conferme è istantaneo ed è adatto per un caffè, una conferma è il default ordinario, e sei sono per gli importi in cui un'ora di attesa costa meno dell'alternativa. La tolleranza di sottopagamento le permette di accettare una fattura che arriva leggermente in difetto, cosa che succede di continuo quando il portafoglio di un cliente detrae la propria commissione dall'importo anziché aggiungerla; una piccola percentuale qui elimina un'intera categoria di email di supporto.

Poi lo testi con denaro vero, non con la testnet. Emetta una richiesta di pagamento per un importo trascurabile, la paghi da un portafoglio sul telefono, e osservi la fattura passare da nuova a in lavorazione a saldata. Quella singola transazione dimostra che il nodo è sincronizzato, che il percorso di derivazione è corretto, che il fornitore del tasso di cambio funziona, che il certificato è valido su un browser mobile, e che il denaro è arrivato in un portafoglio che controlla. Nient'altro dimostra tutte e cinque le cose insieme.

Passo 05 · Lightning

I canali sono la parte facile. Essere pagabili è la parte difficile.

Bitcoin on-chain salda magnificamente una fattura da $400 e male una da $4: il cliente attende una conferma e paga una commissione che può essere una frazione percepibile dell'acquisto. Lightning ribalta entrambe le cose — regolamento in circa due secondi, commissioni misurate in frazioni di centesimo — ed è per questo che un negozio che vende cose piccole ne ha bisogno, mentre uno che vende cose grandi forse no. Se ha impostato un'implementazione Lightning al passo 03, il demone è già in esecuzione e BTCPay si è già collegato ad esso; le impostazioni del negozio devono solo abilitare Lightning come metodo di pagamento.

Quale implementazione ha scelto ha conseguenze che vale la pena nominare. Core Lightning è l'opzione conservativa e leggera, con un'architettura di plugin pulita. LND è la più diffusa e ha il più grande ecosistema di strumenti di gestione attorno a sé. Ora esiste anche un terzo tipo di opzione — un demone leggero che esternalizza la gestione dei canali a un fornitore di servizi mantenendo le chiavi sulla sua macchina — che scambia un po' di indipendenza con la scomparsa di tutto quello che c'è nei prossimi tre paragrafi. È una scelta legittima per un negozio che vuole Lightning ma non vuole diventare un operatore di nodo; è semplicemente uno scambio diverso, non uno gratuito.

Un nodo appena creato non può essere pagato, e niente glielo dice

Un canale Lightning contiene una quantità fissa di denaro, divisa tra i due estremi. Quando apre un canale e lo finanzia, tutto quel denaro sta dalla sua parte — il che è capacità di inviare, e capacità di ricevere esattamente pari a zero. Un negozio ha bisogno del contrario. Così un nodo appena finanziato con tre canali sani può comunque far fallire ogni singola fattura in entrata, e il fallimento assomiglia a un errore di routing più che a un errore di configurazione. Questo è il motivo più comune in assoluto per cui un checkout Lightning self-hosted appare non funzionante il primo giorno.

Ci sono tre modi onesti per ottenere capacità in entrata, e non si escludono a vicenda. Può aprire canali in uscita e poi spendere attraverso di essi — comprando qualcosa, pagando una fattura, spostando denaro verso un exchange — il che spinge il suo saldo dal lato opposto e converte capacità di invio in capacità di ricezione. Può chiedere a un nodo ben connesso di aprire un canale verso di lei, il che è una richiesta normale nella comunità Lightning e gratuita a parte la commissione on-chain del peer. Oppure può comprare liquidità in entrata da uno dei diversi servizi che la vendono, il che costa una piccola percentuale e richiede minuti anziché settimane. Non c'è alcuna raccomandazione di affiliazione in questa pagina e non ce ne sarà una; scelga in base alla reputazione e al prezzo attuale.

Una volta che può essere pagato, due funzionalità trasformano il nodo in una vetrina di negozio. Un Lightning address — con la stessa forma di un indirizzo email, sul suo stesso dominio — permette a chiunque di inviarle denaro da qualsiasi portafoglio moderno senza che esista prima una fattura, il che è il meccanismo di donazione e mancia più amichevole che esista. E il codice QR sulla pagina di checkout può offrire entrambi i binari contemporaneamente, così un cliente con un portafoglio Lightning paga in pochi secondi e uno senza paga on-chain, dalla stessa schermata e senza che lei debba prendere alcuna decisione.

Prima che arrivi il primo pagamento Lightning, faccia il passo di backup che deve avvenire ora, non più avanti. Ogni implementazione mantiene un piccolo file che descrive lo stato attuale dei suoi canali — LND lo chiama static channel backup — ed è l'artefatto che le permette di recuperare i fondi se la macchina va persa. Cambia ogni volta che un canale viene aperto o chiuso, quindi lo copi fuori dal server automaticamente, non a mano. Legga l'avvertimento al passo 06 prima di dare per scontato che il suo archivio notturno copra già questo aspetto, perché per Lightning nello specifico non lo fa.

Passo 06 · Rilascio

Adesso lo metta di fronte ai clienti. Poi lo mantenga noioso.

Scelga la superficie di checkout più piccola che si adatta a quello che ha già. Una richiesta di pagamento è un link che invia a qualcuno — nessun sito web richiesto, e il modo più veloce di fatturare a un cliente. Un'app punto vendita trasforma la stessa istanza in una cassa con un elenco di prodotti, il che funziona da un telefono a una bancarella del mercato. Un pulsante di pagamento è un frammento di HTML per un sito statico. Un plugin per il negozio aggiunge Bitcoin come metodo di pagamento a un vero negozio online e riscrive automaticamente lo stato dell'ordine. E la REST API emette fatture, ne riporta lo stato e chiama un webhook quando una si salda, il che è l'integrazione che invecchia meglio perché non dipende da altro che HTTP e un segreto condiviso.

Qualunque cosa scelga, colleghi il webhook e poi verifichi che scatti. Una fattura che si salda e non notifica mai la sua applicazione è la modalità di fallimento che nessuno intercetta, perché tutto sembra corretto su entrambi i lati se osservato isolatamente: il denaro è arrivato, il cliente ha visto una pagina di conferma, e l'ordine resta inevaso. Si invii di proposito un webhook di fattura saldata, confermi che il suo endpoint lo abbia ricevuto, e verifichi la firma invece di fidarsi del payload — quell'endpoint è pubblico e chiunque può inviarci dati.

Un backup notturno non è un percorso di ripristino per Lightning

Questo è l'unico avvertimento in questa pagina che può costarle denaro anziché tempo, e la documentazione stessa del progetto lo afferma con le stesse identiche parole: un vecchio stato dei canali Lightning è tossico. Ripristinare la copia di ieri notte di un database dei canali e lasciare che il nodo giri significa trasmettere uno stato che la sua controparte ha già superato — cosa che il protocollo tratta come un tentativo di imbroglio e punisce assegnandole l'intero saldo del canale. Quindi l'archivio va bene per il database del negozio, la configurazione e lo storico delle fatture, ma non è un piano di recupero per i canali. Copi lo static channel backup fuori dalla macchina in modo continuo, conservi il più recente, e se mai dovesse ripristinare un intero server da un archivio, lo faccia sapendo che il lato Lightning richiede la procedura di recupero documentata e non un ripristino diretto.

Capito questo, la routine è breve. Il deployment include uno script di backup che archivia i volumi e fa il dump del database saltando i dati della blockchain, e accetta una passphrase in modo che l'archivio sia cifrato prima di lasciare il server. Lo esegua a intervalli regolari, poi invii il risultato a una macchina in una giurisdizione diversa nel modo descritto dalla guida ai backup — un repository append-only vale i dieci minuti extra in questo caso, perché un server di pagamento compromesso non dovrebbe poter cancellare il registro di ciò che ha elaborato.

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

Poi vengono gli aggiornamenti, e un server di pagamento è l'unica macchina in cui “aggiornarlo più avanti, di proposito” è la politica corretta. Il deployment ha un proprio script di aggiornamento che rigenera il file compose e scarica le nuove immagini; lo esegua quando ha letto le note di rilascio, non quando gli va di farlo a un cron job. Prima faccia l'archivio. Avanzi di una release alla volta. E tenga scritta da qualche parte la versione precedente, perché un rollback che può fare in un minuto è ciò che rende l'intera faccenda a basso rischio.

./btcpay-update.sh                   # deliberate, after reading the release notes
df -h /                              # the check that should be an alert, not a habit

Infine, imposti un avviso e un promemoria. L'avviso riguarda l'uso del disco — un nodo blockchain è l'unico processo sulla macchina che cresce da solo, e un volume pieno manda giù il checkout in un modo lento da diagnosticare perché nient'altro è cambiato. Lo faccia scattare all'ottanta per cento, non al novantacinque. Il promemoria è mensile, e consiste nell'aprire il negozio e controllare due cose: che le fatture continuino a saldarsi, e che i canali Lightning che ha aperto siano ancora vivi. Un processore di pagamento fallisce silenziosamente, e il modo in cui lo scopre è un cliente che le dice di non essere riuscito a pagare.

La parte onesta · Cosa non fa

Ha eliminato l'intermediario. Non è diventato invisibile.

Fare self-hosting del processore è un miglioramento reale e specifico, e non è un atto di sparizione. Cinque cose restano vere dopo che tutto quanto sopra è stato fatto, e conoscerle è la differenza tra una difesa e una storia consolatoria.

Il ledger di Bitcoin è pubblico e permanente. Eliminare il gateway ha eliminato il database privato di un'azienda; non ha cifrato la catena. Ogni pagamento che il suo negozio riceve è visibile per sempre a chiunque conosca un indirizzo, e gli indirizzi si aggregano: un portafoglio che combina due pagamenti in un'unica spesa ha appena detto al mondo che quei due clienti hanno pagato lo stesso negozio. Questa è una proprietà dell'asset, non del software, ed è il motivo per cui un'attività con una reale esigenza di privacy guarda anche a Monero.

L'hostname del checkout viene pubblicato nel momento stesso in cui esiste. I log di certificate transparency sono pubblici e indicizzati in continuazione, quindi il nome scelto al passo 02 è scopribile anche se non lo collega mai a nulla. È per questo che l'account amministratore va reclamato nei primi minuti e non nella prima settimana, e perché la pagina di login merita una password robusta e un secondo fattore fin dal primo giorno.

L'uscita verso il fiat è dove l'identità ritorna. Niente in questo stack la obbliga a identificarsi per accettare un pagamento. Convertire il ricavato in denaro bancario, invece, quasi sempre sì, perché quella conversione avviene presso un exchange o un broker regolamentato. Il self-hosting sposta il requisito di identità dal punto vendita al punto di uscita — un miglioramento reale nell'esposizione, ma non la stessa cosa della sua assenza.

I suoi obblighi di rendicontazione non si sono spostati insieme al server. Dove un'attività è registrata e dove vive il suo titolare decidono cosa è dovuto e cosa va dichiarato. La giurisdizione della macchina che emette le fatture non c'entra. Nella maggior parte dei luoghi, ricevere crypto per beni o servizi è reddito ordinario al valore del giorno, e cederla in seguito è di nuovo un evento a sé. Un'istanza self-hosted è un registro migliore di un account presso un processore che potrebbe perdere — non è un modo per non averne uno.

Non ci sono chargeback, e questo taglia in entrambe le direzioni. Un pagamento confermato è definitivo, ed è esattamente questa proprietà a rendere quasi impossibile la frode ai danni di un commerciante, ed è per questo che la commissione è zero. È anche il motivo per cui un cliente insoddisfatto non ha alcun meccanismo a disposizione al di fuori della sua buona volontà. Pubblichi una politica di rimborso, usi la funzione payout per onorarla, e sappia che si è assunto il compito di risoluzione delle controversie che la percentuale serviva a pagare.

Quello che ha effettivamente comprato, con precisione: il denaro arriva in un portafoglio da cui solo lei può spendere, nessuno può fermare la vendita, nessuno trattiene una percentuale, e l'elenco di chi le ha pagato cosa esiste solo su una macchina che affitta senza un nome particolare. È un'affermazione ristretta e reale. Vale quello che costa solo se il passo 06 è stato fatto — un processore di pagamento self-hosted senza un ripristino testato non è un miglioramento per l'attività, è un singolo punto di fallimento che detiene il suo fatturato.

Dimensionamento · Cosa ordinare

L'applicazione è minuscola. La catena è l'intera fattura.

Livello Mensile Risorse Cosa fa girare comodamente
Sentinel$3.902 vCPU · 4 GB · 120 GB · 1 GbpsUn nodo pruned da 25–50 GB con Lightning. Aggiunga dello swap; tenga d'occhio il disco.
Garrison$7.904 vCPU · 8 GB · 240 GB · 1 GbpsUn nodo pruned da 100 GB, Lightning e anni di margine. La scelta predefinita.
Ravelin$16.908 vCPU · 16 GB · 480 GB · 2.5 GbpsLo stesso, più una seconda catena o un negozio impegnato con plugin.
Bulwark$32.9016 vCPU · 32 GB · 960 GB · 5 GbpsUn nodo archivistico con margine per continuare a crescere. Solo se le serve lo storico.

BTCPay, l'indexer e PostgreSQL insieme occupano pochi gigabyte e quasi nessuna CPU una volta che il nodo è sincronizzato; un negozio che riceve un centinaio di pagamenti al giorno non metterà in difficoltà il livello più piccolo sul fronte compute. Ciò su cui i livelli differiscono è il disco, e il disco è deciso interamente dal passo 01. Il sync è l'unica ora genuinamente pesante del progetto — è vincolato dall'IO più che dalla CPU, ed è per questo che qui conta l'NVMe e non il numero di core. La banda è illimitata su ogni livello, quindi un nodo Lightning raggiungibile pubblicamente non costa nulla in più da far girare.

Note dal campo · Sei trappole

Sei modi in cui questo va storto. Due di essi costano denaro.

Trappola 01 · Fatale

L'account amministratore che nessuno ha reclamato

La prima persona che si registra su un'istanza appena installata diventa l'amministratore, e l'hostname è stato pubblicato nei log di certificate transparency nel momento stesso in cui il certificato è stato emesso. Si registri entro pochi minuti dal termine dell'installazione, poi verifichi in Server Settings che la registrazione non sia aperta a sconosciuti.

Trappola 02 · Fatale

L'hot wallet sul server pubblico

Lasciare che sia il server a generare il portafoglio è questione di un clic, e mette il seed su una macchina il cui compito è rispondere a sconosciuti. Colleghi invece una chiave pubblica estesa: il negozio osserva, deriva e riconcilia, e non può spendere. Tenga la metà privata in un portafoglio o su un dispositivo hardware.

Trappola 03 · Tossica

Ripristinare lo stato Lightning di ieri notte

Un database dei canali di ieri descrive uno stato che la sua controparte ha già superato. Rimetterlo online può consegnarle l'intero saldo del canale come penale. L'archivio notturno copre il negozio; i canali richiedono il percorso di recupero documentato e un backup del canale copiato in continuo.

Trappola 04 · Silenziosa

Fatture Lightning che nessuno può pagare

Finanziare un canale le dà capacità di inviare, non di ricevere. Un nodo nuovo con del denaro dentro fallisce comunque ogni pagamento in entrata, e l'errore assomiglia a un problema di routing. Si procuri liquidità in entrata prima di pubblicizzare l'opzione Lightning, non dopo il primo reclamo.

Trappola 05 · Spiazzante

Un nodo pruned e un portafoglio con un passato

Colleghi un account vecchio di tre anni a un nodo pruned e le sue vecchie transazioni non compariranno mai, perché i blocchi che le contenevano sono stati scartati. Niente è rotto e niente lo segnala. Dia al negozio un account appena creato, oppure faccia girare la modalità archivistica.

Trappola 06 · Evitabile

Il volume che si è riempito durante il sync

Un nodo è l'unico processo che cresce da solo, e un disco pieno corrompe l'indice invece di fermarsi educatamente — il che significa ricominciare il download da capo. Faccia i calcoli del passo 01 sul livello che ha ordinato, e imposti l'avviso all'ottanta per cento anziché al novantacinque.

FAQ · Pagamenti Bitcoin self-hosted

Domande, con risposta.

Undici domande che emergono mentre si costruisce tutto questo — a partire dalle due che decidono se valga la pena costruirlo affatto.

BTCPay Server è davvero gratuito, o c'è un tranello?

È genuinamente gratuito, e la forma di questa gratuità conta più del prezzo. BTCPay Server è software open source distribuito con una licenza permissiva e mantenuto da una fondazione anziché da un'azienda con un obiettivo di fatturato; non c'è commissione per transazione, non c'è percentuale, non c'è volume minimo, non c'è un account da aprire né un contratto da firmare, perché non esiste alcuna controparte — sta facendo girare un programma sul proprio server, allo stesso modo in cui fa girare un server web. Quello che paga invece è reale ma diverso: pochi dollari al mese per il server, una serata per configurarlo, e l'obbligo permanente di mantenere aggiornato un servizio che gestisce pagamenti. Il confronto che si dovrebbe davvero fare non è “gratis contro l'uno per cento”. È “un compito operativo che possiede lei contro una dipendenza che non possiede”, e la risposta onesta è che un negozio che riceve venti pagamenti l'anno è probabilmente servito meglio da qualcosa di ospitato altrove, mentre un negozio che ne riceve venti a settimana qui ottiene sia un risparmio sia più libertà.

È custodial? Chi detiene davvero le monete?

Le detiene lei, e il meccanismo merita di essere capito piuttosto che dato per fidato. La configurazione raccomandata dà a BTCPay una chiave pubblica estesa proveniente da un portafoglio che già controlla. Da quella chiave il server può derivare un nuovo indirizzo di ricezione per ogni fattura e osservare la catena per i pagamenti verso di esso — e non può costruire una spesa valida, perché la metà privata non lascia mai il suo portafoglio. Il denaro si sposta dal cliente direttamente in un indirizzo che solo lei può trasferire altrove; niente viene mai detenuto sul server, quindi non c'è nulla da trattenere, congelare o perdere in una violazione. BTCPay offrirà anche di generarle un portafoglio e tenere il seed sul server, il che è comodo ed è l'unica configurazione contro cui questa guida mette in guardia per qualsiasi cosa detenga fatturato reale: trasforma un server pubblico, esposto a internet, in un hot wallet. Lightning è la vera eccezione — i fondi dei canali devono essere vivi per instradare — ed è per questo che il saldo Lightning va trattato come una cassa e non come un caveau.

Di quanto disco ho davvero bisogno?

Dipende interamente da una decisione, e l'intervallo copre due ordini di grandezza. Un nodo Bitcoin Core archivistico mantiene ogni blocco mai minato: abbondantemente oltre i 700 GB nel 2026, e in crescita di circa 50 GB l'anno, quindi serve un livello dimensionato per questo, e continuerà a servirne di più. Un nodo pruned valida ogni blocco esattamente nello stesso modo e poi scarta i vecchi, mantenendo una finestra scorrevole — il generatore di deployment fornisce frammenti che riducono a circa 100, 50, 25 o 5 GB, e qualsiasi valore da 50 GB in su è una scelta di produzione perfettamente seria per un commerciante. Aggiunga da 10 a 20 GB per l'indexer, il database, il nodo Lightning e il sistema operativo, e i conti tornano: un livello da 120 GB fa girare un deployment pruned da 25–50 GB, uno da 240 GB ne fa girare uno da 100 GB con anni di margine, e l'archivistico ne vuole 960 GB. Scelga pruned a meno che non abbia una ragione specifica per non farlo; il modello di sicurezza è identico.

Posso far girare BTCPay senza un mio nodo Bitcoin?

In parte, e vale la pena sapere esattamente dove sta il confine. Lo stack può essere puntato verso un nodo Bitcoin che gestisce già altrove — un server nella stessa tailnet, o uno dietro un tunnel — ed è una disposizione pienamente supportata che le risparmia una seconda copia della catena se ha già fatto il lavoro nella guida al nodo Lightning. Quello che non può fare in modo sensato è far girare un processore di pagamento contro il nodo pubblico di qualcun altro, e il motivo non è di licenza ma di privacy e fiducia: chiunque risponda alle sue query impara ogni indirizzo che il suo negozio sta osservando, il che equivale a imparare il suo fatturato, e può anche mentirle sul fatto che una fattura sia stata pagata. C'è una terza opzione a cui le persone ricorrono — usare un'istanza BTCPay ospitata e gestita da terzi — ed è un modo perfettamente ragionevole per iniziare. Sia solo chiaro che questo sposta i dati del negozio verso un operatore che può vederli, il che è gran parte del motivo per cui esisteva il self-hosting.

Devo per forza fare la parte Lightning?

No, ed è del tutto ragionevole saltarla il primo giorno. Solo on-chain è una configurazione completa e funzionante: le fatture vengono pagate, il cliente attende una conferma, il negozio incassa. Ciò che Lightning compra è la differenza tra “circa dieci minuti e una commissione che fa male sugli importi piccoli” e “due secondi e una frazione di centesimo”, che è la differenza tra un checkout che funziona per una fattura da $400 e uno che funziona anche per una da $4. Il costo è che Lightning è un secondo demone con fondi propri, propri modi di fallire e una propria disciplina di backup — incluso il problema della liquidità in entrata del passo 05 e l'avvertimento sullo stato tossico del passo 06. Un ordine sensato è lanciare on-chain, confermare che l'intera pipeline funzioni con denaro vero, e aggiungere Lightning come un secondo progetto deliberato anziché aggiungerlo di fretta nella stessa serata.

Quale portafoglio dovrei collegare al negozio?

Qualsiasi portafoglio in grado di esportare una chiave pubblica estesa per un singolo account — Sparrow, Electrum, BlueWallet, oppure un portafoglio hardware attraverso uno di questi — e la parte importante non è la marca, ma che sia un account dedicato anziché quello che contiene i suoi risparmi. Due ragioni. La prima è la privacy, ed è permanente: una chiave pubblica estesa è un indice madre di ogni indirizzo che deriverà mai, quindi chiunque la ottenga può enumerare ogni pagamento che quell'account ha mai ricevuto e mai riceverà. Dare al negozio un proprio account a sé fa sì che una fuga di dati esponga solo gli incassi del negozio e nulla più. La seconda è operativa: un account dedicato rende leggibile il reddito del negozio senza dover fare analisi forense su uno storico misto, e rende il trasferimento verso il cold storage una decisione unica e noiosa. Un portafoglio hardware che detiene la chiave privata, con il negozio che sorveglia quella pubblica, è la disposizione a cui puntare.

Posso accettare Monero, o altre monete, sulla stessa istanza?

Sì, con l'avvertenza che ogni catena aggiuntiva è un intero nodo aggiuntivo, con il proprio disco, il proprio tempo di sincronizzazione e la propria manutenzione. Il generatore supporta direttamente una seconda e una terza criptovaluta, ed esiste un'integrazione Monero disponibile come frammento aggiuntivo — lo stesso deployment presenta poi al cliente una scelta di binari al checkout. Quello che la gente sottovaluta è il conto delle risorse: ogni catena che abilita è un altro demone che indicizza un altro ledger sullo stesso volume, e due catene su un livello dimensionato per una è il modo in cui un server di pagamento finisce lo spazio su disco di domenica. Se Monero è importante per il suo negozio, legga prima la guida al nodo Monero e consideri di dargli un server a sé; un processore di pagamento che è giù perché un demone non correlato ha riempito il disco è peggio di uno che accetta solo Bitcoin.

Come si collega questo a un negozio vero?

Quattro modi, in ordine crescente di quanto software ha già. Se non ha niente, BTCPay fornisce già pronti un punto vendita ospitato e una pagina di richiesta di pagamento che può inviare come link — è sufficiente per fatturare a un cliente o incassare pagamenti a una bancarella al mercato senza alcun sito web. Se ha un sito statico, un pulsante di pagamento è un frammento di HTML. Se ha un vero e proprio negozio online, esistono plugin mantenuti per le piattaforme e-commerce più comuni che trasformano Bitcoin in un ulteriore metodo di pagamento al checkout, con lo stato dell'ordine riportato indietro automaticamente. E se ha una propria applicazione, la REST API emette fatture, ne riporta lo stato, e chiama un webhook da lei specificato quando una si salda — che è l'integrazione che invecchia meglio, perché non dipende da altro che HTTP. Inizi con una richiesta di pagamento, verifichi che il denaro arrivi, poi integri.

Cosa succede se il VPS muore — perdo i soldi?

Per l'on-chain, no, ed è questo il premio silenzioso del design watch-only: le monete non sono mai state sul server. Gli indirizzi sono derivati da una chiave pubblica, quindi un'installazione nuova con la stessa chiave pubblica estesa riscopre ogni pagamento; ciò che perde in un fallimento totale è la configurazione del negozio e il suo storico delle fatture, che è esattamente a cosa serve lo script di backup. Lightning è una risposta genuinamente diversa e merita una frase a parte: i fondi dei canali sono vivi, lo stato del canale cambia a ogni pagamento, e ripristinare una copia vecchia di quello stato può costarle l'intero saldo del canale, perché pubblicare uno stato superato è esattamente ciò che il protocollo punisce. Quindi la postura corretta è asimmetrica. Faccia il backup del database e della configurazione secondo una pianificazione, lo cifri, lo invii da qualche parte che non sia questa macchina — e tratti lo static channel backup di Lightning come un artefatto separato, copiato in continuo, e non come una riga nell'archivio notturno.

Fare self-hosting del processore significa che non ho obblighi di rendicontazione?

No, e vale la pena essere diretti su questo, perché il contrario viene tacitamente dato per scontato. Eliminare il processore di pagamento elimina un intermediario, una commissione e un soggetto che potrebbe congelare i suoi fondi. Non cambia ciò che deve, a chi, o se una vendita è tassabile — queste cose dipendono da dove si trovano lei e la sua attività, non da dove si trova il server o quale software ha emesso la fattura. Nella maggior parte delle giurisdizioni, ricevere criptovaluta per beni o servizi è reddito d'impresa ordinario al valore del giorno in cui è stato ricevuto, e cederla in seguito è di nuovo un evento a sé; il fatto che il registro ora risieda nel suo database anziché in quello di un processore non lo rende facoltativo, e un'istanza self-hosted è in pratica una traccia di controllo migliore di uno screenshot di un account che non ha più. Dove si trova il guadagno di privacy onesto è più ristretto ma reale: nessuna terza parte detiene un elenco continuo dei suoi clienti e degli importi. Per il resto, chieda a un commercialista nella sua giurisdizione.

NordBastion consente un processore di pagamento su un VPS?

Sì — un'istanza BTCPay è un'ordinaria applicazione web con un ordinario database e un ordinario demone blockchain, e non c'è nulla nella politica di utilizzo accettabile che la tratti diversamente da un negozio o un blog. Le note pratiche riguardano le risorse più che la policy: un nodo in sincronizzazione è pesante su disco e IO per il primo giorno e poi quasi inattivo, la banda è illimitata su ogni livello quindi un nodo Lightning pubblico non è misurato a consumo, e le porte in entrata per le connessioni peer sono sue da aprire. La parte che si allinea con il resto del sito è la simmetria: l'account non richiede il suo nome legale, la fattura si salda in Monero, Bitcoin o Lightning, e la macchina che ora conosce ogni cliente che ha è affittata da un'azienda che non sa chi lei sia. Un processore che fa girare in self-hosting su un account identificato ha spostato il registro, non l'esposizione.

Ottenere il server

Un checkout tutto suo, su un account che non porta il suo nome. KYC-free, pagamento in crypto.

Garrison — 4 vCPU, 8 GB e 240 GB di NVMe per $7.90 al mese, a Helsinki, Stoccolma, Oslo o Reykjavík. Sufficiente per un nodo Bitcoin pruned, un demone Lightning, l'indexer e il negozio, con margine per anni. Nessuna email alla registrazione, nessun documento d'identità, e nessuna azienda che detiene l'elenco di chiunque le abbia mai pagato.

Ultima revisione · 2026-10-12 · Fonti · Documentazione di BTCPay Server (deployment Docker, frammenti di storage, backup e ripristino, impostazioni del negozio), documentazione di Bitcoin Core sul pruning, documentazione delle implementazioni Lightning sui backup statici dei canali · Cadenza · annuale

Hosting privato, costruito nel Nord.