Делаем приём платежей криптовалютой своими руками

Делаем приём платежей криптовалютой своими руками

Первым делом надо выделить отдельный сервер для размещения кошелька. Почему именно отдельный сервер? Отдельный сервер позволит снизить риски вывода всех ваших средств злоумышленником в случае взлома основного сайта. Ну и не стоит забывать, что для хранения blockchain требуется много места на диске (~150Gb места на диске и т. п. — подробности по ссылке).

Какие есть варианты дешевых серверов? Их масса, на мой взгляд самый адекватный — сервера от hetzner.de или chipcore.com. На chipcore.com, например, можно взять dedicated с диском на 500Gb (хватит на BTC и еще пару блокчейнов) всего за 990 рублей (примерно 17 баксов). Если знаете что-то дешевле — пишите в комментариях, очень интересно (думаю, не только мне).

После того, как вы осмысленно приняли решение о том, что хотите принимать криптовалюты на своём сайте и купили сервер (либо использовали имеющийся), надо установить bitcoin ноду.

На сервере должна быть установлена любая подходящая операционная система, самый простой вариант — Ubuntu 16.10 (да, на самом деле — это не лучший выбор, лучше установить 16.04 либо дождаться 18.04 и подождать еще пару месяцев для стабилизации). Как правило, заморачиваться с разбивкой диска нет смысла и можно смело использовать 2-4Gb на swap и остальное пускать на корневой раздел (/ или root).

После того, как сервер будет доступен, первое, что надо сделать — отключить авторизацию по паролям и настроить авторизацию по ssh ключам. Сделать это достаточно просто, есть хорошее описание от DigitalOcean.

После того, как сервер будет настроен, достаточно пары команд для того, чтобы запустить полноценную ноду кошелька

Устанавливаем bitcoind

sudo apt-add-repository ppa:bitcoin/bitcoin
sudo apt-get update
sudo apt-get install bitcoind

Это всё, что требуется для установки ноды

Настройка bitcoind

Первым делом надо создать пользователя bitcoin:

adduser bitcoin
# везде выбираем стандартные значения и указываем какой-нибудь сложный пароль

и создать служебные директории:

mkdir -p /etc/bitcoin
chown bitcoin: /etc/bitcoin
mkdir -p /run/bitcoind
chown bitcoin: /run/bitcoind
mkdir -p /var/lib/bitcoind
chown bitcoin: /var/lib/bitcoind

Теперь осталась самая мелочь – корректно настроить ноду для приема денег на своем сервере JSON RPC запросов.

Минимальный конфиг будет выглядеть так:

rpcuser=USERNAME
rpcpassword=PASSWORD
rpcbind=127.0.0.1
rpcallowip=127.0.0.1/32

Его надо положить по адресу /etc/bitcoin/bitcoin.conf. И не забыть установить корректного владельца:

chown bitcoin: /etc/bitcoin/bitcoin.conf

Важно: использование USERNAME и PASSWORD — deprecated метод и немного не безопасный. Более правильно использовать rpcauth, пример можете найти по ссылке.

Далее, достаточно настроить systemd сервис для запуска ноды (в том числе после перезагрузки).

Для этого можно просто скопировать юнит файл, размещенный по адресу в директорию /etc/systemd/system/:

wget https://raw.githubusercontent.com/bitcoin/bitcoin/master/contrib/init/bitcoind.service -O /etc/systemd/system/bitcoind.service

После чего запустить его и настроить автозапуск:

systemctl daemon-reload
systemctl start bitcoind
systemctl enable bitcoind

Теперь можно проверить рабостопособность ноды:

curl --data-binary '{"jsonrpc": "1.0", "method": "getinfo", "params": [] }'  -H 'Content-Type: application/json' http://USERNAME:PASSWORD@127.0.0.1:8332/

Если всё ок — в ответ придёт примерно такое сообщение:

{"result":{"balance":0.000000000000000,"blocks":59952,"connections":48,"proxy":"","generate":false,
     "genproclimit":-1,"difficulty":16.61907875185736},"error":null,"id":"curltest"}

Настройка сервера основного сайта

Осталось только настроить сервер, на котором расположен ваш сайт.

Наиболее безопасный и простой способ сделать доступным на бекенде API кошелька — прокинуть ssh туннель через сервис systemd (ну или любой другой init сервис). В случае использования systemd конфигурация сервиса максимально проста:

[Unit]
Description=SSH Tunnel BTC
After=network.target

[Service]
Restart=always
RestartSec=20
User=tunnel
ExecStart=/usr/bin/ssh -NT -o ServerAliveInterval=60 -L 127.0.0.1:8332:127.0.0.1:8332 tunnel@YOUR_SERVER_IP

[Install]
WantedBy=multi-user.target

Эту конфигурацию нужно разместить по пути /etc/systemd/system/sshtunnel-btc.service.

После этого ставим сервис в автозапус и запускаем:

systemctl enable sshtunnel-btc.service
systemctl start sshtunnel-btc.service