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

Полная нода 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.