Розгортування 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 з каналами — ще один день.







