Развёртывание BTCPay Server
BTCPay Server — это self-hosted платёжный процессор с открытым исходным кодом. Никаких комиссий процессора, никакой зависимости от третьих сторон, полный контроль над ключами. Поддерживает Bitcoin, Lightning Network, Monero, Litecoin и несколько десятков других монет через плагины. Хорошо подходит для магазинов, донатов, выставления счётов.
Это не тривиальный деплой CRUD-приложения. BTCPay тянет за собой Bitcoin Core (или Neutrino), NBXplorer (кастомный индексер), Postgres, и опционально LND/CLN/Eclair для Lightning. Полный стек на Docker Compose занимает 15–30 GB на диске и требует 4+ GB RAM только для синхронизации.
Требования к серверу
| Конфигурация | RAM | Диск | Процессор |
|---|---|---|---|
| Минимум (mainnet, без Lightning) | 4 GB | 700 GB HDD / 500 GB SSD | 2 vCPU |
| Рекомендуется (с Lightning) | 8 GB | 700 GB SSD | 4 vCPU |
| Для высокой нагрузки | 16+ GB | 1 TB NVMe | 8 vCPU |
Bitcoin Core на mainnet требует ~600–650 GB для полной ноды. Можно использовать pruned ноду (экономия места), но тогда BTCPay не сможет делать rescan — если адрес добавлен позже синхронизации, старые транзакции не будут видны. Для приёма новых платежей pruned нода работает корректно.
ОС: Ubuntu 22.04 LTS или Debian 12 — официально поддерживаемые.
Установка через BTCPay Server Configurator (Docker)
Официальный и рекомендуемый способ:
# Установка зависимостей
apt-get update && apt-get install -y curl git
# Загрузка и запуск установщика
curl -sSL https://btcpayserver.org/install.sh | sudo bash
Это запустит интерактивный конфигуратор. Но лучше понимать, что происходит под капотом, и делать это вручную:
# Клонирование конфигов
git clone https://github.com/btcpayserver/btcpayserver-docker
cd btcpayserver-docker
# Настройка переменных окружения
export BTCPAY_HOST="pay.yourdomain.com"
export NBITCOIN_NETWORK="mainnet"
export BTCPAYGEN_CRYPTO1="btc"
export BTCPAYGEN_LIGHTNING="lnd" # или clightning, eclair
export BTCPAYGEN_REVERSEPROXY="nginx" # nginx с автоматическим Let's Encrypt
export BTCPAYGEN_ADDITIONAL_FRAGMENTS="opt-save-storage" # pruned нода
# Для дополнительных монет:
# export BTCPAYGEN_CRYPTO2="ltc"
. ./btcpay-setup.sh -i
Флаг opt-save-storage включает pruned Bitcoin Core (256 MB pruning). Если нужна полная нода — не добавлять этот фрагмент.
Конфигурация DNS и HTTPS
BTCPay требует доменного имени — без него не сгенерируется Let's Encrypt сертификат, а без HTTPS не заработает Lightning (требует WSS). Делегирование DNS до начала установки:
pay.yourdomain.com A <server-ip>
Проверить до деплоя:
dig +short pay.yourdomain.com
# Должен вернуть IP сервера
Let's Encrypt через certbot интегрирован в Docker Compose конфиг автоматически при использовании nginx reverse proxy.
Lightning Network: LND vs CLN
LND (Lightning Network Daemon, Go) — более распространён, лучше документирован для разработчиков, есть REST и gRPC API, интеграции с большинством инструментов. Рекомендую для новых проектов.
CLN (Core Lightning, C) — более легковесный, модульная архитектура через плагины, более тесно следует спецификациям BOLT. Предпочтителен если нужны кастомные плагины или routing node.
Для BTCPay оба работают корректно. Разница ощутима при интеграции сторонних сервисов — там чаще встречается поддержка LND.
Первоначальная настройка Lightning
После синхронизации Bitcoin Core:
# Войти в контейнер LND
docker exec -it $(docker ps -q -f name=lnd) bash
# Создать кошелёк (seed фраза — сохранить в cold storage!)
lncli create
# Получить адрес для пополнения
lncli newaddress p2wkh
# После пополнения: открыть каналы
lncli connect 03...@host:9735
lncli openchannel --node_key=03... --local_amt=1000000 # 0.01 BTC в сатоши
Для production Lightning node нужна ликвидность. Минимум — 3–5 каналов с хорошо связанными нодами (ACINQ, WalletOfSatoshi, Bitfinex). Для входящей ликвидности (получение платежей) нужны входящие каналы — купить через Lightning Pool или Amboss Magma.
Резервное копирование
Три компонента, требующих регулярного бэкапа:
Bitcoin Core wallet — не критично если используется только как нода (ключи хранятся в BTCPay/NBXplorer).
LND channel backups (SCB) — критично. Static Channel Backup позволяет закрыть каналы при потере ноды. Автоматически обновляется при каждом изменении каналов:
# Путь к файлу SCB в контейнере
/root/.lnd/data/chain/bitcoin/mainnet/channel.backup
# Настроить cron для копирования на S3/Backblaze
0 * * * * docker cp $(docker ps -q -f name=lnd):/root/.lnd/data/chain/bitcoin/mainnet/channel.backup /backup/lnd-$(date +%Y%m%d-%H%M).backup
PostgreSQL база — BTCPay хранит все данные магазина, инвойсы, конфигурацию:
# Дамп базы
docker exec -t btcpayserver_postgres pg_dump -U postgres btcpayserver | gzip > /backup/btcpay-$(date +%Y%m%d).sql.gz
Мониторинг
После деплоя добавьте мониторинг через BTCPay Health endpoint:
# Health check
curl https://pay.yourdomain.com/health
# Или через API для мониторинга Grafana/Prometheus
BTCPay Server имеет встроенную страницу /server/services с состоянием всех сервисов. Рекомендую настроить внешний uptime monitor (UptimeRobot, BetterUptime) на этот endpoint.
Полный деплой от нуля до рабочего состояния: установка сервера + конфигурация DNS + деплой BTCPay — 2–4 часа. Синхронизация Bitcoin Core mainnet — 12–48 часов в зависимости от скорости диска. Настройка Lightning с каналами — ещё день.







