Aprende a instalar un BTCPay Server usando Docker

José Maldonado
20 ENE 2021
Aprende a instalar un BTCPay Server usando Docker
1.

Introducción

El mundo de las criptomonedas evoluciona muy rápidamente, especialmente cuando nos referimos a su desarrollo y despliegue de nuevos servicios. Y, debido a esto, nos podemos beneficiar rápidamente de tales avances para hacernos menos dependientes de terceros. Después de todo, ese es el espíritu del mundo de las criptomonedas y la tecnología blockchain. Y de hecho, es la principal razón que ha llevado a la creación de este nuevo artículo, en el cual te explicaremos paso a paso, cómo realizar el despliegue de un servidor BTCPayServer usando Docker.

2.

En primer lugar, ¿Qué es BTCPay Server?

BTCPay Server, es un servicio de procesamiento de pagos de criptomonedas. Uno que puede ser integrado a tu web o tienda online de forma completamente gratuita y libre. El objetivo de este proyecto es simple: permitirte recibir pagos en Bitcoin, altcoins con soporte por este servidor e incluso Lightning Network, sin depender de terceros, sin cobro de tarifas por el servicio, y lo mejor, todo el dinero de los pagos va a tu monedero de forma directa. En pocas palabras, BTCPay Server te permite crear tu propio servicio de pago (como PayPal) pero usando criptomonedas, siendo totalmente gratuito, seguro y privado.

Por supuesto, las características de BTCPay Server no terminan allí, también podemos destacar:

  1. Es un sistema de pagos completamente P2P.
  2. Sin tarifas de transacción (aparte de la tarifa de red)
  3. Sin tarifas de procesamiento
  4. Sin intermediario
  5. Sin KYC
  6. Sin custodia (control total sobre la clave privada)
  7. Esa centrado en la privacidad, la seguridad y el anonimato (con el uso e integración de Tor)
  8. Ofrece soporte para tecnologías como SegWit y Lightning Network (LND, c-lightning, Eclair y Ptarmigan)
  9. Permite ofrecer procesamiento de pagos para terceros. 
  10. Sistemas de PoS (Point of Sale o Punto de Venta) para su integración en tiendas físicas.
  11. Monedero interno manejado por un nodo completo (o nodo podado, según se configure). 

Sin duda, son características muy potentes que te permitirán un amplio espectro de usos para este tipo de software. En especial, si eres una empresa o tienda que busca ofrecer a sus clientes pagos en criptomonedas de forma segura y económica. 

3.

Docker, contenedores para aplicaciones de forma fácil

La segunda herramienta que usaremos en este caso es Docker, un programa que nos permite crear "contenedores" o espacios de ejecución aislados dentro de nuestro computador con Windows o GNU/Linux. Básicamente, Docker nos permite crear espacios de ejecución que tienen todo lo necesario para ejecutar una determinada aplicación, pero estando la misma aislada de nuestro sistema operativo. De esta forma, si algo llega a fallar (como que hackearan el contenedor) solo el contenedor se vería afectado dejando al resto del sistema completamente funcional. Esto nos ofrece la ventaja de hacer que las recuperaciones sean mucho más rápidas y la puesta en marcha de servicios también sea mucho más sencilla. 

En este caso, Docker nos servirá para instalar una instancia de BTCPay Server completa sin complicarnos la vida en dicha tarea, y esto gracias a que la mayoría de contenedores vienen preconfigurados para ser puestos en producción.  En pocas palabras, es instalar y echar andar el servicio sin mayores problemas. 

4.

Comenzando la instalación de BTC Pay Server

Ahora que conocemos las dos herramientas que usaremos, empezaremos a explicar el proceso de instalación de este sistema. 

Requisitos del Sistema

Lo primero que debemos tener en cuenta son los requisitos del sistema. En primer lugar, debes contar (al menos) con lo siguiente:

  • CPU de al menos 4 núcleos
  • Mínimo de 4 GB de memoria RAM (u 8 GB, que es mucho mejor)
  • Al menos 500 GB de disco duro (si planeas soportar Bitcoin con su nodo completo Lightning Network). 
  • Una conexión de banda ancha (al menos de 10 MB simétricos)

Unas notas antes de continuar:

  1. El tamaño del disco duro puede ser menor, pero para ello deberás activar las opciones para usar un nodo podado dentro de BTC Pay Server. Esto no resta seguridad al sistema, y te permite una mayor flexibilidad en cuanto al almacenamiento. 
  2. Si planeas usar esto a modo personal la conexión de tu hogar puede servir, si planeas usarlo para una web o tienda en línea, o también para prestar servicios a terceros, es recomendable alquilar servidores y crear una infraestructura segura para este tipo de servicios. 
  3. El proceso de instalación en este artículo está simplificado, la idea es brindar una herramienta de conocimiento básico que puede ayudarte a instalar este tipo de herramientas en tu tienda física u online sin mayores complicaciones. 

Instalando Docker

Lo primero que debemos hacer es la instalación de Docker. Para ello, si estamos en Windows, debemos ir a la web oficial del proyecto. Una vez allí, debemos ir a la sección "Products" y elegir "Docker Desktop" y descargar la versión de Docker Desktop. En el caso de que uses Linux, deberás usar el administrador de paquetes de tu distribución y descargar con él, la versión de Docker disponible para tu sistema. El objetivo en ambos casos es tener instalado este software para facilitar el trabajo de instalación de BTC Pay Server.

 

IMPORTANTE

En Windows, Docker recomienda que instales WSL, una característica de Windows que te permite crear un ambiente integrado de GNU/Linux con Windows. El proceso de instalación de WSL puedes encontrarlo en este enlace. 

 

Una vez que termines con la instalación comenzaremos con la configuración inicial de Docker. 

En primer lugar, al ejecutar el programa aparecerá la siguiente pantalla, solo debes hacer clic en el botón “Start”. 

https://lh3.googleusercontent.com/eEcDtSF2JKSHaQ6ymRLPpyfLL6U_cpUi84h7RkZ3wItAf11by6HwzyiEVgT7ju39uZUGecDo_g8z5phMcPJMbWARmb-fdg3RAD5cvRocKRJae__QDEKBDO3J13jV_GF0Ju1rkN6n

Luego podrás iniciar con el proceso de instalación y prueba de Docker. En este punto, el programa comenzará con la ejecución de una serie de comandos que te instalaran una demo de lo que Docker es capaz de hacer. 

https://lh4.googleusercontent.com/5v5_7HMm_OTd59kBHcNWfux2tcZE-quHgENlSf-eJektirfUm1NWsIR9TjRJxsTHOa3uHal5kPobVUEG-Sl6Hg51rA_ENPDJfs4QQqKxkHHkpWg8A0Nx1PX2VnNobUTheTbnBjGu

Al finalizar el proceso podrás ver la siguiente pantalla:

https://lh3.googleusercontent.com/E4Hkwxk4RhMiuMpRQlbvmd-MhJisVyyYjv01ZXj9tCd6ML6A-UEG6DkSdd1aPX8uuBR51yKU-noRlhS_Zes81kSu6Rj0UQFzvOB_A4PjRfN9_OK0nB7xhSfwu21UlgtH2asp_x6n

Si das clic en dicho botón “View in Browser” podrás ver los resultados de esta primera ejecución de Docker:

https://lh5.googleusercontent.com/gnSDNT74DYJ0NpRRZI1zzAHIhOLyzbiBulWiDOjXaNplDDIwwsUYUNWDmxnpt132BqE_tHR2cRLL-VZZJE4Yn712WbY9yAfNZ5PyuuRFkPftzXkcnAx1D2FUYctcCiIprjeXa_pG

Una web con información introductoria sobre Docker y todo lo que puede hacer. Sin embargo, esta no es una web cualquiera, dicha web es servida desde el contenedor Docker que has creado en tu computador, y no necesitas de Internet para navegar por ella. 

Comenzado la instalación de BTCPay Server

Ahora bien, para instalar BTCPay Server usando Docker, lo primero que haremos es descargar todo lo necesario para su configuración. Esto podemos hacerlo al ir al GitHub del proyecto BTCPay Server. Una vez allí elegiremos la opción "Code" y le daremos a la opción "Download ZIP". Con esto descargamos todo lo que necesitamos para configurar BTCPay Server.

Lo siguiente será descomprimir el ZIP y dirigirnos con una terminal de Windows, hacia el directorio donde están todos los archivos en nuestro caso:

D:\DOCKER\BTCPAYSERVER-DOCKER

En esta imagen podemos ver el direccionamiento:

En este punto, podemos iniciar la instalación de BTCPay Server con un solo comando, pero antes, haremos algunas modificaciones para adaptar el servidor a nuestras necesidades.

 

https://lh3.googleusercontent.com/n_3MAyVnWUJhblzhZ0Hbs5QVIkWShxwkYlqK4N57_vWEMftaVpOjPUtXf1h7r9f49DteEZb1QN7X8cff1QHnTazQPzompY1sLHwSX0ah0NB9nA6OA8OpDv3eNAQxaT-nT2_J9Cb-

Configurando BTCPay Server antes de la instalación

En primer lugar, BTCPay Server tiene una gran variedad de opciones de configuración que podemos ver acá. Estas nos permiten adaptar el servicio a nuestras necesidades. Entre las más llamativas podemos mencionar:

  1. La capacidad de instalar nodos podados para nuestro BTCPay Server, con lo que necesitamos menos espacio de almacenamiento para nuestro nodo local. Estas opciones están bajo el nombre de "opt-save-storage" y hay diversos niveles de ajustes, uno de los cuales no es compatible con la activación de Lightning Network.
  2. La capacidad de activar Autopilot y Keysend para nuestro servicio de Lightning Network.
  3. Integración con WooCommerce, lo que nos viene perfecto para tiendas en línea que usen este sistema.
  4. Opción para activar Tor y ejecutar nuestro servicio sobre esta red.

En este caso, activaremos la opción de ejecutar nodos podados para BTCPay Server, y para hacerlo debemos ir nuestra carpeta y hacer la siguiente modificación al archivo “build.ps1"

# This script will run docker-compose-generator in a container to generate the yml files

 

If (-not ($BTCPAYGEN_DOCKER_IMAGE)) { $BTCPAYGEN_DOCKER_IMAGE = "btcpayserver/docker-compose-generator" }

 

If ($BTCPAYGEN_DOCKER_IMAGE -eq "btcpayserver/docker-compose-generator:local"){

      docker build docker-compose-generator -f docker-compose-generator/linuxamd64.Dockerfile --tag $BTCPAYGEN_DOCKER_IMAGE

} Else {

      docker pull $BTCPAYGEN_DOCKER_IMAGE

}

 

docker run -v "$(Get-Location)\Generated:/app/Generated" `

           -v "$(Get-Location)\docker-compose-generator\docker-fragments:/app/docker-fragments" `

           -v "$(Get-Location)\docker-compose-generator\crypto-definitions.json:/app/crypto-definitions.json" `

           -e "BTCPAY_HOST=btcpay.local" `

           -e "NBITCOIN_NETWORK=mainnet" `

           -e "BTCPAYGEN_CRYPTO1=btc" `

           -e "BTCPAYGEN_CRYPTO2=$BTCPAYGEN_CRYPTO2" `

           -e "BTCPAYGEN_CRYPTO3=$BTCPAYGEN_CRYPTO3" `

           -e "BTCPAYGEN_CRYPTO4=$BTCPAYGEN_CRYPTO4" `

           -e "BTCPAYGEN_CRYPTO5=$BTCPAYGEN_CRYPTO5" `

           -e "BTCPAYGEN_CRYPTO6=$BTCPAYGEN_CRYPTO6" `

           -e "BTCPAYGEN_CRYPTO7=$BTCPAYGEN_CRYPTO7" `

           -e "BTCPAYGEN_CRYPTO8=$BTCPAYGEN_CRYPTO8" `

           -e "BTCPAYGEN_CRYPTO9=$BTCPAYGEN_CRYPTO9" `

           -e "BTCPAYGEN_REVERSEPROXY=none" `

           -e "BTCPAYGEN_ADDITIONAL_FRAGMENTS=opt-save-storage-xs" `

           -e "BTCPAYGEN_EXCLUDE_FRAGMENTS=$BTCPAYGEN_EXCLUDE_FRAGMENTS" `

           -e "BTCPAYGEN_LIGHTNING=$BTCPAYGEN_LIGHTNING" `

           -e "BTCPAYGEN_SUBNAME=$BTCPAYGEN_SUBNAME" `

           -e "BTCPAY_HOST_SSHAUTHORIZEDKEYS=$BTCPAY_HOST_SSHAUTHORIZEDKEYS" `

           --rm $BTCPAYGEN_DOCKER_IMAGE

 

If ($BTCPAYGEN_REVERSEPROXY -eq "nginx") {

    Copy-Item ".\Production\nginx.tmpl" -Destination ".\Generated"

}

 

If ($BTCPAYGEN_REVERSEPROXY -eq "traefik") {

    Copy-Item ".\Traefik\traefik.toml" -Destination ".\Generated"

    

    New-Item  ".\Generated\acme.json" -type file

}

 

En este caso hemos realizado cinco modificaciones. La primera hemos agregado la opción "BTCPAY_HOST=btcpay.local", con la cual asignamos ese nombre a nuestro servicio de forma interna. La segunda modificación es la opción  "NBITCOIN_NETWORK=mainnet", la cual nos permite decir que BTCPay funcionará con la red Mainnet. Nuestra tercera modificación es "BTCPAYGEN_CRYPTO1=btc”, con la cual definimos a Bitcoin como nuestra principal criptomoneda.

Siguiendo, nuestra cuarta modificación es "BTCPAYGEN_REVERSEPROXY=none" la cual para nuestras pruebas no es importante (pero si lo es si deseas usar este servicio en producción). Y finalmente nuestra última modificación es la opción ""BTCPAYGEN_ADDITIONAL_FRAGMENTS=opt-save-storage-xs" para un nodo podado a 25 GB (compatible con Lightning Network).

Terminados los cambios, guardamos y ejecutamos en terminal el archivo “build.ps1”, lo que empezará generar nuestro archivo docker-compose. 

https://lh6.googleusercontent.com/2bcssPhLdYgpna65eCRko02joup6QOQYoR2f9bZkGdgio6PxUV0wvRN2zWXcfZiGzR3pb8v4YXyhGOA3JzYbrmyVwH91kz4Se6I9whgcv2n4HAbIvcOsvRR9xn_PHuvOSkp-NJtr

Lo siguiente que haremos es navegar hasta la carpeta "Generated" y cambiar el nombre del archivo "docker-compose.generated.yml" a "docker-compose.yml", una vez realizado este cambio desde la terminal (y estando en el mismo directorio donde esta este archivo) ejecutaremos el comando 

docker-compose up

Y con ello comenzará la instalación automatizada de BTCPay Server, solo debemos esperar a que termine todo el proceso. 

https://lh3.googleusercontent.com/-A-qNEIM19_wBmed2gN5tjZEA0SqVbor9M_S3iaKztgX8H0RWj3QtlJIwC098SG3ve50ykmdcQy-34IjXyMTsPHPhg2Z7lRSqT16gsIaw9dpVD9LksR78VRJRg2pZB_mZ7hwy9LB

Al final, en nuestro Docker podemos ver la instalación de BTCPay Server, la cual podemos iniciar desde el mismo.

https://lh3.googleusercontent.com/lSs6tIs_7kheHVfR9oqwg26yNJWamy_KZBF_4hixm2vsTUotilhVLMbLzMl2MBofW2gB-sqN9Mq7BirXaesEGUKGThXkRman5w8nvm2ieHcQ3lv754SxOC-ncbpmeChCGRjCVZTu

Para ello solo debemos seleccionar “Generated” (que es el nombre automatico creado, puedes poner el que desees) y hacer clic en “Run”, con lo que al finalizar si vas a un navegador y pones la dirección “127.0.0.1”, podrás entrar finalmente a tu servidor BTCPay Server completamente funcional.

 

https://lh6.googleusercontent.com/eR1_72sYwa_VBpT4zajL03hbmzvZS7JOsLmyRcgIlWPFWcqmYGZiIHiiAVJ3sKDq4JeYuF79RLFUct7HfwgQcSO89n-ZZ-1W_QC--j3Oj-OfyOwzQaQh55zlCrmpE-nLnwnqrXJK

5.

Notas importantes

Si por algún motivo, el BTCPay Server instalado apunta a regtest o testnet, solo debes revisar que la opción NBITCOIN_NETWORK dentro del docker-compose, apunte a “mainnet” que es la red principal de Bitcoin. 

Muchas de las fallas que se pueden presentar dentro del sistema están sobre todo relacionadas con la buena configuración de este archivo. En cualquier caso, la ayuda y documentación de BTCPay Server da para solucionar todo este tipo de problemas. 

Lo siguientes es que antes de usar el sistema deberás dejar que sincronice, de esta manera te aseguras que todo funcione correctamente. Mientras eso sucede, puedes ir configurando y conociendo el sistema, su funcionamiento e integración con otras herramientas.