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.