Déployez votre point de vente avec BTCPay Server
Acheter Bitcoin (BTC)
Publicité eToro
Aujourd’hui, nous allons nous attaquer à la problématique des processeurs de paiement. Il en existe déjà plusieurs comme :
Si ces services sont reconnus, ils souffrent néanmoins d’être complètement centralisés. C’est regrettable surtout lorsque l’on sait que Bitcoin est un système de transfert de valeur pair-à-pair (a peer-to-peer electronic cash system) et que son objectif est la désintermédiation.
Tout a commencé par un désaccord entre le développeur Nicolas Dorier et BitPay, l'un des processeurs de paiement les plus populaires :
C’est suite à cet épisode que Nicolas Dorier a commencé à développer sa propre solution de processeur de paiement open source et désintermédié. Sous le doux nom de BTCpay Server, il peut être installé par le commerçant ou par un tiers de confiance. Mieux que ça, il est prévu pour être déployé sur n’importe quel type de machine (y compris un Raspberry Pi 3 ou 4) tout en restant suffisamment bien pensé pour répondre aux exigences d’architecture des grandes entreprises.
Malgré son nom, il supporte également Litecoin, Dash et la documentation (à destination des développeurs) explique très clairement comment adapter l’outil pour supporter d’autres cryptomonnaies. Par ailleurs, l’intégration du Lightning Network est déjà opérationnelle.
Ne vous y trompez pas : BTCPay Server n’est pas ce type de projet à la demi-vie, l’outil fonctionne déjà très bien et a le soutien de Square qui pour rappel a été cofondé par Jack Dorsey (PDG et fondateur de Twitter). En effet la branche ‘crypto’ de Square a d'ailleurs récemment versé 100 000 $ à la fondation BTCPay server.
Notez également que BTCPay Server peut répondre à deux grands cas d’usage :
- Un commerçant souhaitant déployer son propre point de vente (commerce ou commerce électronique)
- Un hébergeur de point de vente souhaitant fournir un moyen de paiement aux commerçants
Si la première solution est celle qui fournit le plus d’autonomie aux commerçants, la seconde est idéale pour ceux qui ne souhaiteraient pas installer eux-mêmes la solution.
C’est donc avec une joie non dissimulée que je vais vous partager l’installation en mode simplifié.
Objectifs
BTCpay Server dispose d’un grand nombre de fonctionnalités dont :
- Le paiement en bitcoins ‘on-chain’ (full node bitcoind et NBXplorer)
- Le paiement en bitcoin par Lightning Network (nœud lnd ou c-lightning)
- L'anonymisation du site web du nœud Lightning Network à l’aide de TOR
- Patron (alternative open source à Patreon)
- L'intégration Woocommerce
- La publication des services web via NGINX (certificat géré automatiquement via Let’s Encrypt)
L’objectif de ce tutoriel est de mettre en place une instance BTCPay Server auto-hébergée à destination d’un unique commerçant et disposant des fonctionnalités de paiement ‘on-chain’ et Lightning Network. TOR sera déployé bien que cela soit optionnel.
La fonctionnalité de paiement ‘on-chain’ se base sur l’usage du wallet matériel Ledger (Nano S ou X). En effet, nous verrons que BTCPay Server facilite grandement cette intégration dans le but réduire un maximum la confiance nécessaire dans le gestionnaire de l’instance. Cette configuration permet aux commerçants d’utiliser des adresses Bitcoin issues de son propre wallet sans pour autant fournir à l'application la capacité de paiement.
Pour le mode de paiement Lightning Network, le commerçant utilisera le nœud de l’instance.
Notez qu’à fin septembre 2019, un full node Bitcoin nécessite 270 Go d’espace disque. Heureusement, BTCPay Server permet de réduire cet espace à l’aide de la fonction prune.
Point d’attention concernant Lightning Network : le protocole est encore en cours de développement et les implémentations actuelles (lnd, c-lightning, etc.) ne fournissent pas le même niveau de sécurité que le protocole Bitcoin. D’autre part, chaque paiement réalisé par ce biais reste séquestré dans les canaux. Un commerçant souhaitant récupérer ses fonds devra donc fermer ses canaux ou utiliser des bourses d’échanges comme ZigZag. Par ailleurs, il est recommandé d’avoir une bonne connaissance du fonctionnement de Lightning Network surtout si vous souhaitez l’utiliser comme moyen de paiement à votre commerce.
Définition des pré-requis
S’il est possible d’installer BTCPay Server sur un Raspberry, ce tutoriel est réalisé sur un hébergement virtuel hébergé (VPS) chez Scaleway (le prix est annoncé hors-taxe).
BTCPay Server nécessitant l’hébergement d’un full node Bitcoin, prévoyez 60 Go d’espace disque (avec le support du prune activé). Docker étant utilisé dans ce tutoriel, les données seront stockées dans /var/lib/docker (partition / sur ma configuration).
Voici les spécifications logicielles :
- Ubuntu 18.04 LTS
- Docker 19.03
- docker-compose : 1.24
- Git
Je ne détaillerai pas en profondeur l’installation de Docker. Cependant, selon votre configuration, il est possible que votre espace disque dédié au stockage ne soit pas votre disque principal. Dans ce cas, il ne sera pas possible de stocker l’ensemble du registre de votre nœud Bitcoin. Il faudra donc modifier le répertoire de travail de docker de la manière suivante (source).
Modifiez le fichier de configuration du démon Docker (/lib/systemd/system/docker.service).
Localisez la ligne suivante :
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Remplacez-la par (remplacez /new/path/docker par votre futur répertoire de travail dans la partition de stockage) :
ExecStart=/usr/bin/docker daemon -g /new/path/docker -H fd://
Stoppez Docker :
systemctl daemon-reload
Créez votre nouveau répertoire de travail et copiez l’ensemble des données docker :
mkdir /new/path/docker
rsync -aqxP /var/lib/docker/ /new/path/docker
Relancez Docker :
systemctl start docker
Installation
Avant de commencer, sachez que le tutoriel se base sur la documentation suivante (btcpayserver/btcpayserver-docker). Elle est extrêmement complète et je vous invite à y jeter un œil pour toutes configurations sortant du cadre de ce tutoriel.
Clonez le projet Git :
git clone https://github.com/btcpayserver/btcpayserver-docker
cd btcpayserver-docker
Ici, il s’agira de définir les éléments de configuration à l’aide des variables suivantes :
export BTCPAY_HOST="a81e41ba-46ec-47e7-a6c9-4d3906ca8415.pub.cloud.scaleway.com"
export NBITCOIN_NETWORK="mainnet"
export BTCPAYGEN_CRYPTO1="btc"
export BTCPAYGEN_REVERSEPROXY="nginx"
export BTCPAYGEN_LIGHTNING="lnd"
export BTCPAYGEN_ADDITIONAL_FRAGMENTS="opt-save-storage-xs;opt-add-tor"
export LIGHTNING_ALIAS="a81e41ba-46ec-47e7-a6c9-4d3906ca8415.pub.cloud.scaleway.com"
export BTCPAY_ENABLE_SSH="true"
Cette configuration définit les éléments suivants :
- BTCPAY_HOST : le nom DNS de l’instance web de BTCPay Server
- NBITCOIN_NETWORK : le réseau Bitcoin (principal ou de test)
- BTCPAYGEN_CRYPTO1 : la cryptomonnaie principale
- BTCPAYGEN_REVERSEPROXY : le reverse proxy utilisé (utilisé pour publier BTCPay Server)
- BTCPAYGEN_LIGHTNING : l’implémentation de Lightning utilisée
- LIGHTNING_ALIAS : le nom DNS de l’instance lnd
- BTCPAY_ENABLE_SSH : Permet de mettre à jour l'installation depuis le site web
La variable BTCPAYGEN_ADDITIONAL_FRAGMENTS est particulière, car elle permettra de paramétrer finement notre instance. Dans notre cas, les options suivantes seront définies :
- opt-save-storage-xs : permet de limiter la taille du nœud Bitcoin à 25 Go
- opt-add-tor : active TOR
Le lancement de la commande permettra de télécharger, installer et lancer les images Docker. Après quelques minutes, votre instance BTCpay est prête.
Connectez-vous à votre instance en HTTPS à l’adresse configurée dans la variable BTCPAY_HOST. La page s’affiche.
Vous remarquerez l’affichage de la fenêtre suivante. Elle indique simplement que votre nœud Bitcoin est en cours de synchronisation. Il faudra plusieurs jours selon votre connexion.
Sans attendre la fin de la synchronisation avec le réseau, cliquez sur “Register” afin de vous créer votre compte administrateur.
Identifiez-vous avec.
Création du premier store
Comme évoqué en introduction, la solution BTCPay Server est une solution non custodial. La création d’un store permet à un commerçant de définir les paramètres de paiement comme votre clef publique étendue et votre nœud Lightning Network.
Paiement on-chain
La clef publique étendue permet au commerçant de générer automatiquement des factures à l’adresse de son wallet. Dans ce tutoriel, nous utilisons le portefeuille hardware de Ledger. Ce dernier est intégré nativement et l’usage de ce portefeuille simplifie vraiment la création du store.
Au préalable, je vous suggère de créer un nouveau compte sur Ledger Live.
Dans le menu Account, cliquez sur Add account.
Allez jusqu’à l’étape 3 et sélectionnez Segwit.
Une fois créé, sélectionnez votre nouveau compte et cliquez sur la clef à molette.
Dans la nouvelle fenêtre, cliquez sur Advanced Logs afin d’afficher le chemin de dérivation.
Branchez votre Ledger Nano à votre ordinateur et lancez l’application Bitcoin.
Dans l’interface BTCPay Server, allez dans le menu Settings, cherchez la configuration Derivation Scheme et cliquez sur Modify. L’écran suivant s’affiche.
Cliquez sur Import from Hardware Device, sélectionnez Ledger Wallet et sélectionner le compte en se basant sur le chemin de dérivation obtenu dans Ledger Live (dans mon cas 49/0/1 correspondant à Account 1). Sur votre Nano, il vous sera demandé à plusieurs reprises d’exporter votre clef publique. Confirmez toutes les demandes.
Une fois cette opération réalisée, votre clef publique étendue est ajoutée dans l’interface web.
Allez à l’étape suivante. Cette dernière vous affiche les premières adresses de votre compte Ledger Live qu’il vous faut confirmer en générant une nouvelle adresse de réception sur l’application Ledger Live.
Confirmez cette dernière étape.
Paiement par Lightning Network
Gestion du nœud
Avant de configurer le store, il est nécessaire de créer des canaux afin de fournir de la liquidité nécessaire au paiement. Il faut capitaliser suffisamment votre nœud sous peine de ne pas pouvoir recevoir les paiements.
La première chose à faire est d’apporter de la liquidité entrante. Rien de plus simple : rendez-vous directement sur LNBIG et cliquez sur “LND / C-lightning / Eclair”, puis cliquez sur Next.
Identifiez les commandes sous “Commands for LND inside BTCPay” et collez-la en SSH dans le répertoire btcpayserver-docker de votre serveur.
Après quelques secondes, LNBIG initie l’ouverture du canal. Cela peut prendre plusieurs heures pour qu’il soit effectif.
Configuration du magasin
Sans attendre la création effective de votre canal, allez dans l’interface BTCPay Server, menu “Settings”, cherchez la configuration “Lightning Network (experimental)” et cliquez sur “Modify”.
L’écran suivant est affiché.
Nous allons configurer le magasin afin qu’il utilise le nœud Lightning Network de l’instance. Pour ce faire, cliquez sur “clicking here” afin de définir la méthode de connexion adéquat.
La ligne suivante doit s’afficher :
Cliquez sur Submit pour valider.
Création d’un point de vente
Au sens BTCPay Server une ‘app’ peut être un point de vente (point of sale) ou un financement participatif. Dans le cas d’un point de vente, c’est ici qu’un commerçant peut créer l’affichage de sa boutique ainsi que les produits à mettre en vente.
Dans l’onglet App, cliquez sur ‘Create a new App’. Donnez-lui un nom, sélectionnez ‘PointOfSale’ et le store que vous avez créé plus haut.
Cliquez sur Create. BTCPay Server crée un exemple éditable sur la base d’un magasin de vente de thé.
Il serait difficile d’être exhaustif au regard du nombre de possibilités. Je vous invite à jeter un œil à la documentation du site (https://docs.btcpayserver.org/features/apps). Vous trouverez facilement de quoi paramétrer à votre convenance votre point de vente.
Notez qu’il est possible d’avoir une prévisualisation du rendu global en cliquant sur ‘View App’. En voici un exemple :
Pour terminer, voici deux exemples de paiement.
On-chain
Lightning Network
En supplément
En plus du présent tutoriel, voici quelques informations supplémentaires pour vous aider à prendre en main la solution.
Historiques des factures
BTCPay Server permet très facilement récupérer l’historique des factures. Il est même très facile de l’exporter en CSV ou en JSON.
Pour ce faire, allez dans le menu store et cliquez sur l’action “Invoices”.
L’écran suivant est affiché.
À l’aide de la fonction de recherche, il est possible de filtrer les résultats à l'aide de plusieurs critères.
Il est également possible d'afficher les détails des factures.
Ces informations sont nécessaires en cas de litige.
Gestion du nœud Lightning
Il est possible de gérer son nœud de plusieurs manières.
La première consiste à utiliser l’interface web Ride The Lightning (RTL). Cliquez sur “Server Settings”, “Services” et enfin “See Information” du service Ride The Lightning server.
Ensuite, cliquez sur “clicking here” pour ouvrir la page d’administration de votre nœud.
La page suivante s’affiche.
La seconde méthode passe par la commande ./bitcoin-lncli.sh accessible en SSH.
Ces outils vous serviront à gérer votre nœud et réaliser les actions suivantes :
- Ouvrir et fermer vos canaux
- Capitaliser vos nœuds
- Vérifiez l’état de vos canaux et votre liquidité
- L’historique des factures Lightning Network de votre nœud
- La création de factures Lightning Network
- Le paiement de factures Lightning Network
Capitalisation du nœud
En SSH, il suffit de lancer la commande suivante :
./bitcoin-lncli.sh newaddress np2wkh
Avec Ride The Lightning, cliquez sur “LND wallet” et “Send/Receive”.
Sélectionnez “np2wkh” et cliquez sur Generate Address. Envoyez des fonds à cette adresse.
Création d’un canal sortant
En cas de nécessité, il est peut être intéressant de créer un canal avec de la liquidité sortante.
Avec Ride The Lightning, cliquez sur “Channels” et “Management”.
Dans le champ “Alias”, ajoutez le nœud distant sous la forme id@adresse:port (par exemple : 02ad921d465e6ecfe493e90864275ffcf1b70c6050c76e6c33701b0c3686d687b9@ye4p5iq5jzc537ch6sk5t25fhhzawtrdhw4tkwsngohamzjl55byzgyd.onion:9735).
Ajoutez la quantité de satoshis à mettre sous séquestre et cliquez sur “Open”.
Fermeture d’un canal
La fermeture d’un canal permet de libérer les fonds. Deux possibilités peuvent se présenter :
- Le nœud distant est en ligne : le canal est fermé rapidement et les fonds sont récupérés après confirmation de la transaction.
- Le nœud distant ne répond pas : la fermeture du canal et la récupération des fonds peuvent prendre jusqu’à une semaine.
Avec Ride The Lightning, cliquez sur “Channels” et “Management”.
Cliquez sur l’icône correspondant au canal à fermer :
Hello, merci pour cet excellent tuto, pareil pour moi je n'ai jamais réussi à utiliser mes Ledgers (S ou X) pour paramétrer la dérivation, j'ai par contre trouvé cet excellente alternative :
https://blog.btcpayserver.org/btcpay-vault/
Merci pour le tuto.
De mon coté je n'ai jamais réussi a utiliser la fonctionnalité "import from ledger", pourtant tout semble OK (ledger et navigateur).
Du coup j'importe l'adresse xpub, mais les adresses affichées ne correspondent pas avec la première que le ledger me propose (et j'ai perdu un paiement BTC comme ça)
Bonjour. Étrange pour le navigateur. As-tu essayé avec un autre navigateur ? De mon côté avec brave, je n'ai pas eu de problème. Par contre, tu devais avoir ledger live d'ouvert non ? Il est préférable de le fermer durant cette opération. Concernant le second point, je pense que tu peux te rassurer puisqu'il n'est pas possible de perdre un paiement. Par contre, il faudra mettre un peu les mains dans le moteur. Par défaut, btcpay part du principe que ta clef publique étendue est du type P2WPKH (pay to witness public key hash - au format bc1.......). Dans le… Read more »
Excellent article, c'est rare d'avoir des tutos qui rentrent autant dans le détail ! Juste une petite précision concernant le support de Tor, dans le cas de BTCPay il ne s'agit en fait pas de confidentialité mais de simplifier la configuration réseau qui est un peu complexe dans certains cas, l'équipe avait écrit un article là-dessus quand il l'avait ajouté https://medium.com/@BtcpayServer/about-tor-and-btcpay-server-2ec1e4bd5e51
Enfin bon c'est vraiment un détail, mais je pense que c'est bon d'être conscient qu'activer tor ne rend pas notre serveur BTCPay invisible !
Bonjour Sosthene,
Super, merci pour votre message et ces compléments d'information. Nous allons voir pour mettre l'article à jour en ce sens 🙂
Bonjour Sosthène et un grand merci pour ton commentaire.
A vrai dire, je ne suis pas encore à l'aise avec TOR, mais en effet, il ne permet pas un anonymat à toute épreuve.
J'aime beaucoup BTCPay car l'équipe (notamment Nicolas) sont sans langue de bois et l'article medium le démontre bien.