Почему оно тебе вообще надо, непринуждённое вступление
Давай представим на минутку, что у тебя есть сайт. Хотя, наверное, некоторым и не надо представлять. И ты хочешь продавать свои услуги или товары, чтобы это сделать нужно как-то подключить платежи на сайт. Погуглив немного и пораспрашивав генеративные сети, ты скорее всего столкнёшься со следующей ситуацией - всё сложно.
Всё сложно, особенно для моего региона и моих "товарищей" из Беларуси и России. Ну в общем, как всегда :)
Тебе наверняка знакомы такие платёжные агрегаторы как PayPal, Stripe и Square. Они, как я считаю, являются отличными сервисами для владельцев маленьких сайтов, а так же для молодых и неопытных вебмастеров вроде меня. Их можно описать такой фразой: "Подключил и забыл". Увы, они сразу отпадают, ибо просто не работают в нашем регионе. Давай дальше.
Есть ещё и наши аналоги, которые способны принимать платежи и просто заточены под местных вебмастеров. Так, в Беларуси есть монополист под названием bePaid. В России это YooMoney, QIWI, SBP, SberPay, ну и WebMoney, разумеется. Но есть пара нюансов, которые стоит учесть:
- Не все они способны принимать платежи со всего мира. Так, я уверен только в bePaid, ибо они это напрямую написали на своём сайте.
- Возможна интеграция на сайт только если ты ИП или Самозанятый. Но не физическое лицо.
Вообще, нюансов гораздо больше и хотелось бы описать их по подробнее, но не об этом статья, а как ты уже догадался из заголовка статьи - об криптоплатежах и то как их реализовать развернув для этого, для начала, BTCPay сервер.
Преимущества такого способа принятия оплаты следующие:
- Независимость как от политической ситуации, так и от банковской системы.
- Отсутствие комисий. То есть, смотря как реализовать криптоплатежи на сайте и будет зависеть будешь ли ты платить комисию или нет.
Но недостатков у такого способа хватает тоже:
- Сложность реализации. Можно сделать проще и использовать различные агрегаторы и "шлюзы", но тогда первое преимущество улетучивается, да и второе тоже.
- Сложность использования. Да, не все умеют платить криптой и не стоит этому удивляться
- В некоторых странах это не законно. Ну если мы говорим про Беларусь, то здесь это чистая история.
- Проблема вывода средств. Не так уж и много сервисов позволяющих выводить криптовалюту в обычную валюту, смотри предыдущий пункт.
- Плохая репутация из-за всяких дамперов, спекулянтов, инвесторов, криптобро, крипто-пророков ну и обычных мошенников, как же без них.
Честно скажу, это довольно много минусов, чтобы решить добавлять криптоплатежи на свой сайт. Но в моей ситуации это наверное единственный способ, ведь он требует от меня, на самом деле, только технические навыки и желание его реализовать. Да и независимость от банков и политики звучит заманчиво. Поэтому, эта статья будет посвящена реализации таких платежей на сайте.
И как, собственно говоря это реализовать? Конкретно говоря, как я собираюсь такое реализовать на сайте? Ну, во-первых, не на этом сайте, а на отдельном VPS. А во-вторых, сделаю я это при помощи BTCPay Server, который и разверну на отдельном VPS. Общаться они будут используя REST API.
Как выглядит общий процесс разворачивания такого сервера и требования к нему
Сначала нужно купить/арендовать сервер. Это может быть как дешёвый VPS, так и выделенный сервер. Главное требование к серверу это размер выделенной памяти, ибо, для того чтобы хранить даже облегчённый узел биткойна, потребуется минимум 10-15 гигабайт.
Я так же рекомендовал бы использовать хотя бы 2 ядра и 4 гига оперативки. Это чтобы сервер не падал каждые 5 минут от перегрузки. Даже из таких требований выходит довольно дорого для самописной безделушки и даже так синхронизация облегчённого ядра может занять неделю :(
После потребуется установить и настроить соответствующий софт для работы по проверке блоков. Так, потребуется установить следующие пакеты на сервер:
- Bitcoin Core. Собственно говоря, это твой кошелёк для хранения, зачисления и перевода средств.
- .Net SDK. Необходимая зависимость для компиляции и запуска, таких пакетов как NBXplorer и BTCPay Server.
- NBXplorer. Минималистичный UTXO трекер HD кошельков, для отслеживания текущего баланса и создания новых адресов для платежей.
- BTCPay Server. Для принятия платежей, вот.
- База данный PostgreSQL. Как для NBXplorer, так и для BTCPay Server
- Nginx веб-сервер. Для возможности общения сайта владельца с сервером на котором установлен BTCPay Server
В теории всё довольно просто, нужно установить необходимые пакеты и настроить их под свои нужды. После создать две отдельные базы данных для NBXplorer и BTCPay. Следующим шагом будет разворачивание Nginx веб-сервера для доступа из вне, то есть с моего сайта. И всё.
Конечно, ещё нужно научиться работать с этим сервером через его API, и подключить к сайту. А именно создать соответствующие виджеты на сайте и разместить их. Но это гораздо проще, чем предыдущие шаги. Но хватит рассусоливаний и лишних рассуждений, давай приступим к настройке и подготовке сервера.
Настройка и подготовка сервера
Всё начинается с аренды сервера, как было сказано выше, единственным требованием к такому серверу является размер диска. Для наших нужд нужно как минимум 20 гигабайт. Не важно у какого провайдера ты приобретёшь данный сервер, данный гайд является провайдер-агностическим.
Предварительно, лучше упростить себе доступ к серверу и перейти к аутентификации при помощи SSH ключей. В этой статье я опущу данный процесс, но в этой статье ты сможешь ознакомиться с ним во всех деталях.
Следующее, что необходимо сделать, так это то, как сделать на удалённом сервере привилегированного пользователя. Ни в коем случае не делаем ничего через root-пользователя. Опять же, подробно об этом процессе можно прочитать уже в статье про создание привилегированного пользователя на Linux машинах.
После того, как создадим привилегированного пользователя установим такие базовые пакеты как:
| git | Для клонирования репозиториев на сервер |
| wget | Для скачивания файлов/архивов с интернета в терминале |
| vim | Текстовый редактор в терминале |
| tar | Универсальный архиватор и разархиватор архивов |
| postgresql и postgresql-contrib | База данных |
| nginx | Веб сервер для доступа из вне |
| certbot и python3-certbot-nginx | Специальный скрипт для генерации TTL/SSL сертификатов |
| Имя пакета | Описание пакета |
|---|
!!! Возможно, некоторые пакеты уже установлены в систему, я не могу знать, какие провайдер установил по умолчанию, поэтому перечислю все, что необходимы.
Делается это через одну команду:
После того, как была настроенна система/сервер то есть установленны необходимые пакеты, создан необходимый пользователь и упрощён и обезопасен доступ к серверу через SSH, можно приступать к установке и настройке непосредственных компонентов необходимых для работы BTCPay Server.
Установка Bitcoin Core 28.1
Начнём с установки того, что называют ядром биткойна. То что будет рассчитывать все проводимые транзакции в мире и какого в этом мире наше место. Установить архив с ядром можно здесь. Там же ты можешь увидеть все доступные для использования версии, и выбрать подходящую тебе. Я выберу самую последнюю версию, на момент написания данной статьи - это 28.1.
Сделаем мы это так, скачаем соответствующий архив, разархивируем его и установим некоторые из бинарных файлов в директорию для приложений и исполняемых файлов. Можно скачать в виде скрипта или просто скопировать, вот содержимое данного скрипта:
Мы установим bitcoind и bitcoin-cli. Первый нужно будет запустить как сервис на заднем фоне и обращаться к нему время от времени при помощи bitcoin-cli. Так же, потребуется предварительно настроить наше ядро. Для этого сделаем bitcoin.conf и поместим его в /etc/bitcoin. Создай директорию при необходимости.
В bitcoin.conf, нужно записать следующие настройки:
Необходимо ещё изменить права доступа к данному файлу:
Конфигурация ядра биткойна почти закончена, осталось только создать соответствующую службу и активировать её, чтобы она всегда перезапускалась при перезагрузке сервера. Файл службы я назову bitcoind.service и содержимое данной службы следующее:
Первоначальный код службы можно найти здесь, единственное, что я изменил так это имя пользователя, его группу и путь до службы. После того как файл сервиса был успешно создан, переместим его в директорию служб и активируем его:
Всё должно получиться, если же нет, то смотри логи. Вывод в терминал должен помочь.
После запуска демона с той конфигурацией, которую мы задали в bitcoin.conf, он будет скачивать весь текущий блокчейн. Вернее, в нашем случае с указанием prune=5000 он скачает только заголовки блоков чтобы сэкономить место на сервере - это называется инициализация узла.
Чтобы иметь возможность узнать статус синхронизации, можно использовать команду bitcoin-cli.

Это займёт некоторое время. Считай если дошло до 0.99 или 1.00 значений, узел синхронизирован. И так как это служба, которая работает в фоновом режиме, мы сможем продолжить работать над сервером. Например, скачать необходимую версию рабочих инструментов разработчика (или SDK) на сервер.
Установка .Net SDK 8
Нам нужно установить последнюю доступную версию т.е. 8. Дело в том, что и NBXplorer и BTCPay Server зависят от этих SDK, и на данный момент им необходима именно 8 версия, поэтому её и установим.
Проблема лишь в том, что в официальных пакетных репозиториях у Debian такого пакета нет. Поэтому для начала необходимо добавить такой репозиторий, от Microsoft.
С начала мы скачиваем deb пакет с серверов Microsoft, потом добавляем новое зеркало пакетов. И после удаляем, нет необходимости в его сохранении. Теперь нам должен быть доступен пакет dotnet-sdk-8.0
Но всегда перед тем как использовать пакеты из других пакетных репозиториях, необходимо обновить пакетный менеджер, так:
После установки, давай проверим установленную версию SDK, в результате команда должна вернуть номер текущей установленной версии SDK:
Так как теперь у нас есть необходимые компоненты, можно приступить к компиляции и запуску NBXplorer.
Установка NBXplorer
Данное приложение позволяет отслеживать все транзакции направленные данный сервер. То есть если пошли платежи с твоего сайта на BTCPay Server, который мы развернём чуть позже. Но для начала, давай установим и скомпилируем данное приложение.
Просто готовый скрипт
После того как приложение было установленно, нужно добавить новую базу данных для NBXplorer.
Войдём в среду работы с базами данных на PostgreSQL:
И создадим новую базу данных, делается это следующим образом:
База данных создана, значит можно создавать файл конфигурации nbxplorer.conf и копировать его в /etc/nbxplorer/ директорию. Содержимое nbxplorer.conf:
И скопировать файл в /etc/nbxplorer/:
Мы сейчас связали созданную нами базу данных и NBXplorer приложение. И эта связка должна работать в фоновом режиме, чтобы постоянно следить за появлением новых транзакций и добавлять их в базу данных. Для этого создадим службу. Содержимое файла службы - nbxplorer.service:
Просто замени везде btcpay-user на имя своего пользователя и эта служба уже будет готова к использованию на твоём сервере.
Давай же создадим наконец данную службу:
Вот таким образом запускается на сервере NBXplorer, не слишком тяжело правда? Остался последний демон, который нужно запустить - BTCPay Server.
Установка BTCPay Server
И начнём это со скачивания исходного кода с GitHub и компиляции самого приложения.
Дальше всё как в NBXplorer, создаём отдельную базу данный на PostgreSQL, добавляем файл конфигурации в систему, создаём и запускаем демона/службу в фоновом режиме.
Заходим в интерактивную оболочку postgresql:
Создаём базу данных:
Создаём файл конфигурации btcpay.conf, и вставляем туда следующее, предварительно поменяв на свои данные:
Помещаем созданный файл конфигурации btcpay.conf в /etc/btcpay:
И теперь нужно запустить BTCPay работать в фоновом режиме, как службу, создай файл btcpay.service и запиши туда следующее, предварительно поменяв пути до исполняемых файлов и скриптов, а также имя пользователя и группы с btcpay-user на имя своего пользователя:
Скопируем данный файл в директорию всех служб - /etc/systemd/system. Активируем его:
Чтобы проверить на корректность запуска и активации службы можно выполнить данную команду:
А чтобы проверить журнал работы данной команды можно запустить вот такую команду:
На этом, с минимально необходимыми компонентами, мы закончили. У нас есть всё необходимое для работы маленького узла в пиринговой, блокчейн системе для принятия платежей через криптовалюту. Но теперь, данный сервер необходимо открыть всему миру и делается это через веб сервер Nginx.
Установка и настройка Nginx Веб сервера
Важным требованием к данному серверу является его работа только через HTTPS протокол, иначе он может просто не запуститься.
Создаём TTL/SSL сертификат
Для этого нужно выпустить SSL сертификат, при чём не один раз, а постоянно. Делается это при помощи отличного CLI инструмента - certbot. Здесь есть полная инструкция того, как эту команду использовать, мы же просто сделаем так:
Не забудь подставить своё доменное имя. В моём случае я буду использовать btc-node.of.by.
У тебя могут возникнуть трудности с данным этапом, так при покупке нового домена его ещё нужно будет привязать к твоей машине т.е. VPS. Делается это через DNS-записи A и АААА. Первая запись должна содержать домен и IPv4 твоего VPS, вторая запись тоже должна содержать домен и уже IPv6 того же VPS.
Чтобы проверить, что они вступили в силу, используй любой WhoIs инструмент где ты сможешь увидеть IP своего VPS сервера. Если таковой виден, значит ты успешно подключил свой домен к VPS, и теперь прописывая доменное имя в адресной строке браузера, ты на самом деле обращаешься к своему серверу на 80 порт - протокол HTTP.
Запускаем Nginx веб-сервер
Для этого создай файл btcpay-server.conf в /etc/nginx/sites-available и запиши следующую конфигурацию, предварительно поменяв везде btc-node.of.by на имя своего сервера:
В этой конфигурации мы перенаправляем все запросы по HTTP протоколу на HTTPS. Так же связываем наш веб-сервер с BTCPay Server через открытый ранее порт 23000, который мы указали явно в настройках btcpay.conf.
Теперь создадим ссылку на данную конфигурацию в /etc/nginx/sites-enabled, удалим конфигурацию по умолчанию и перезапустим веб-сервер:
Удалить default конфигурацию необходимо только в sites-enabled, потому что если оставить данную конфигурацию, то сервер будет запускать сначала её, что помешает работе нашего сервера BTCPay.
Если всё сделано правильно, то ты должен будешь увидеть страницу входа на сервер.

Дополнительные улучшения к твоему BTCPay серверу
Это была минимальная установка, необходимая для работы BTCPay сервера. Но её можно дополнить дополнительными элементами, такими как Tor и Lightning Network (Это будет рассмотрено в отдельной статье).
Первый позволяет усилить безопасность передаваемых сообщений при совершении покупок в такой открытой и ненадёжной среде Интернет.
Второй же позволяет ускорить совершение транзакций в крипте и увеличивает пропускную способность, т.е. количество одновременных совершаемых транзакций до миллиардов в секунду, в сравнении с 10 у изначального биткойна.
Защита используя Tor
Начнём пожалуй с защиты. Tor кроме того, что усилит безопасность передаваемых сообщений, он ещё и поможет с обходом NAT.
Для этого установим сам тор:
И отредактируем файл /etc/tor/torrc. Где нам потребуется раскоментировать следующие строки, чтобы всё заработало:
- ControlPort 9051
- CookieAuthentication 1
- CookieAuthFileGroupReadable 1 (Иногда его может и не быть, просто добавь рядом)
Всё готово, теперь только добавим нашего пользователя в группу debian-tor и перезапустим соответствующие процессы:
Чтобы проверить, работает ли наш bitcoind на onion адресе, можно использовать команду:
В результате получишь такой вот ответ, где красным отмечен текущий onion адрес:

Подводим итоги
Вот я и закончил описывать процесс развёртывания BTCPay сервера на отдельном VPS. Это было долго, думаю ты с этим согласен. В этой статье мы смогли сами собрать все необходимые компоненты и объединить их в единую работающую структуру. Начиная с самого необходимого bitcoincore и продолжая наращивать на него nbxplorer и тот же btcpay server.
В конце открыв доступ к нашему серверу используя Nginx веб-сервер. И дополнили картину, установив Tor.
Я хотел ещё в этой статье описать процесс установки Lightning Network, но она и так сильно растянулась. Это будет рассмотрено в отдельной статье. В отдельной статье же и будет рассмотрен процесс практического использования такого вот сервера для нужд собственного сайта. Я покажу как можно будет добавить собственный кошелёк и как добавить кнопки оплаты на сайт.