Pruned-нода Bitcoin Core на VPS: проверка подписей, bitcoin.conf и systemd

Установка Bitcoin Core на Ubuntu 24.04 / Debian 12 с обрезанной цепочкой: проверка SHA256SUMS и GPG-подписей сборщиков, prune и dbcache, hardened-юнит systemd, контроль первичной синхронизации и ограничение трафика.

14 октября 2026 г.·3 мин чтения·bitcoin, node, systemd, ubuntu

Полная нода Bitcoin Core сама проверяет каждый блок и каждую транзакцию по правилам консенсуса — вам не нужно доверять чужому представлению о цепочке. Pruned-нода делает ту же проверку, но хранит на диске только последние блоки. Ниже — установка Bitcoin Core, проверка загрузки, настройка обрезки и запуск bitcoind как службы systemd.

Что нужно

  • Сервер на tanaka.host: 2 vCPU, 4 ГБ памяти, 64 ГБ диска.
  • Ubuntu 24.04 или Debian 12, доступ по SSH под root — Подключение по SSH.
  • Запас трафика на первую синхронизацию.

Обрезка не экономит трафик. Pruned-нода всё равно один раз скачивает и проверяет всю цепочку с первого блока — больше 700 ГБ загрузки плюс отдача пирам. Проверьте лимит трафика на тарифе перед стартом.

1. Загрузка

Посмотрите последнюю версию на bitcoincore.org и задайте её в переменной:

VERSION=31.1
cd /tmp
wget https://bitcoincore.org/bin/bitcoin-core-${VERSION}/bitcoin-${VERSION}-x86_64-linux-gnu.tar.gz
wget https://bitcoincore.org/bin/bitcoin-core-${VERSION}/SHA256SUMS
wget https://bitcoincore.org/bin/bitcoin-core-${VERSION}/SHA256SUMS.asc

2. Контрольная сумма и подписи

Сначала архив против списка сумм:

sha256sum --ignore-missing --check SHA256SUMS

Вывод должен заканчиваться на bitcoin-VERSION-x86_64-linux-gnu.tar.gz: OK.

Сам список подписан несколькими сборщиками Bitcoin Core. Их ключи — в репозитории guix.sigs:

apt install -y git gnupg
git clone https://github.com/bitcoin-core/guix.sigs
gpg --import guix.sigs/builder-keys/*
gpg --verify SHA256SUMS.asc SHA256SUMS

Ищите строки gpg: Good signature. Предупреждения «not certified with a trusted signature» нормальны, если вы не строили сеть доверия. Отсутствующие публичные ключи можно игнорировать, пока есть подписи тех, кому вы доверяете.

Если проверка не прошла — стоп. Не совпала сумма или нет ни одной хорошей подписи: удалите файлы и скачайте заново. Бинарник, не прошедший проверку, не запускайте.

3. Установка

tar -xzf bitcoin-${VERSION}-x86_64-linux-gnu.tar.gz
install -m 0755 -o root -g root -t /usr/local/bin bitcoin-${VERSION}/bin/bitcoind bitcoin-${VERSION}/bin/bitcoin-cli
bitcoind -version

Системный пользователь для ноды:

useradd --system --no-create-home --shell /usr/sbin/nologin bitcoin

4. bitcoin.conf

Конфиг в /etc/bitcoin, данные в /var/lib/bitcoind — та же схема, что в официальном юните из репозитория Bitcoin Core:

mkdir -p /etc/bitcoin
nano /etc/bitcoin/bitcoin.conf
server=1
prune=10000
dbcache=2048
maxconnections=40
  • prune=10000 — хранить ~10 000 MiB последних блоков. Минимум 550. Чем больше, тем дальше в прошлое можно делать rescan.
  • dbcache=2048 — 2 ГБ под кэш UTXO, сильно ускоряет первичную синхронизацию. На сервере с 4 ГБ после синхронизации снизьте до 1024 или уберите строку.
  • server=1 включает локальный RPC для bitcoin-cli. По умолчанию он слушает только localhost — так и оставьте.

База состояния цепочки хранится отдельно от обрезанных блоков и растёт со временем; 64 ГБ оставляют запас.

Права, чтобы служба могла читать конфиг:

chown -R root:bitcoin /etc/bitcoin
chmod 0710 /etc/bitcoin
chmod 0640 /etc/bitcoin/bitcoin.conf

5. Служба systemd

nano /etc/systemd/system/bitcoind.service

Юнит на основе contrib/init/bitcoind.service из репозитория Bitcoin Core, путь к бинарнику заменён на /usr/local/bin:

[Unit]
Description=Bitcoin daemon
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/local/bin/bitcoind -pid=/run/bitcoind/bitcoind.pid \
                                  -conf=/etc/bitcoin/bitcoin.conf \
                                  -datadir=/var/lib/bitcoind \
                                  -startupnotify='systemd-notify --ready' \
                                  -shutdownnotify='systemd-notify --stopping'
Type=notify
NotifyAccess=all
PIDFile=/run/bitcoind/bitcoind.pid
Restart=on-failure
TimeoutStartSec=infinity
TimeoutStopSec=600
User=bitcoin
Group=bitcoin
RuntimeDirectory=bitcoind
RuntimeDirectoryMode=0710
StateDirectory=bitcoind
StateDirectoryMode=0710
PrivateTmp=true
ProtectSystem=full
ProtectHome=true
NoNewPrivileges=true
PrivateDevices=true
MemoryDenyWriteExecute=true

[Install]
WantedBy=multi-user.target

Длинный TimeoutStopSec важен: при остановке bitcoind сбрасывает кэш на диск, и убитый раньше времени процесс при следующем старте может уйти в долгий reindex.

systemctl daemon-reload
systemctl enable --now bitcoind
systemctl status bitcoind

6. Первичная синхронизация

bitcoin-cli запускайте от пользователя bitcoin, чтобы он прочитал RPC-cookie в каталоге данных:

sudo -u bitcoin bitcoin-cli -datadir=/var/lib/bitcoind getblockchaininfo
Поле Что значит
blocks / headers проверенные блоки и известные заголовки; заголовки синхронизируются первыми
verificationprogress прогресс от 0 до 1, нелинейный — свежие блоки тяжелее
initialblockdownload true, пока нода не догнала сеть
pruned должно быть true
size_on_disk держится около цели prune плюс небольшой буфер

Ещё полезно:

sudo -u bitcoin bitcoin-cli -datadir=/var/lib/bitcoind getnetworkinfo
sudo -u bitcoin bitcoin-cli -datadir=/var/lib/bitcoind getconnectioncount
journalctl -u bitcoind -f

На 2 vCPU первичная синхронизация занимает от одного до нескольких дней; упирается в CPU и диск, а не в сеть. SSH-сессию можно закрывать — служба продолжит работу.

Исходящих соединений для собственной ноды достаточно. Хотите помогать сети — откройте 8333: ufw allow 8333/tcp (см. Брандмауэр UFW и firewalld). Pruned-нода ретранслирует новые блоки и транзакции, но старые блоки отдавать не может.

Ограничение трафика после синхронизации

Когда initialblockdownload станет false, суточный трафик сильно упадёт. Чтобы ограничить отдачу, добавьте в bitcoin.conf дневную цель в MiB, например maxuploadtarget=5000, и systemctl restart bitcoind. Ниже 144 MiB в сутки опускаться не рекомендуется.

Чего обрезка не умеет

  • Отдавать исторические блоки другим пирам.
  • txindex=1 несовместим с prune — произвольные старые транзакции не найти.
  • Rescan кошелька старше хранимых блоков требует полной пересинхронизации.

Нужно это — берите необрезанную ноду с диском больше 1 ТБ.

Нода готова: бинарник проверен, prune и dbcache заданы, bitcoind работает под hardened-юнитом systemd. Если интересуют платежи Lightning, в статье LND с Neutrino показана лёгкая схема вообще без локального bitcoind.