Maskot beruang kutub NordBastion berdiri di belakang meja pedagang batu Nordik berukir, dengan panel checkout holografik cyan yang melayang di atasnya menampilkan kode QR bersimbol Bitcoin berwarna amber dan glif kilat, serta satu lengkungan koin bercahaya yang tak terputus mengalir dari panel itu langsung menuju pintu brankas berukir rune yang terbuka di sampingnya, dengan rak server dan jendela melengkung yang diterangi aurora di belakangnya
How-to · Pembayaran kripto·21 menit membaca · 60 menit hands-on

Terima sendiri pembayarannya.
Tidak ada lagi siapa pun yang tersisa untuk membekukannya.

Setiap card processor dan setiap gateway kripto hosted berdiri di antara Anda dan pelanggan Anda, mengambil persentase, menyimpan daftar siapa membayar apa kepada Anda, dan berhak menghentikannya kapan saja. BTCPay Server adalah perangkat lunak yang menyingkirkan mereka: sebuah payment processor yang open-source, self-hosted, dan non-custodial, tempat koin langsung masuk ke sebuah wallet yang server sendiri tidak bisa membelanjakannya. Enam langkah menuju checkout Bitcoin dan Lightning yang berfungsi, di sebuah mesin yang Anda sewa secara anonim — bentuk node yang menentukan budget, kunci watch-only, masalah likuiditas masuk, dan aturan backup yang dilanggar Lightning. Mesinnya hanya $7.90 sebulan. Sudah diuji di Debian 12.

Enam langkah
  1. 01

    Pilih

    Node full, pruned, atau eksternal

  2. 02

    Sediakan

    Domain dulu, baru empat port

  3. 03

    Deploy

    Satu generator, satu perintah

  4. 04

    Hubungkan

    Kunci watch-only, jangan pernah seed

  5. 05

    Lightning

    Channel dan kapasitas masuk

  6. 06

    Luncurkan

    Checkout, backup, upgrade

Sebelum Anda mulai · Apa itu processor

Bitcoin menyingkirkan bank. Kebanyakan toko memasangnya kembali.

Pembayaran di atas blockchain tidak membutuhkan perusahaan di tengah-tengahnya. Pelanggan menandatangani sebuah transaksi, jaringan mengonfirmasinya, dan uangnya menjadi milik Anda — tidak ada acquirer, tidak ada jendela settlement, dan tidak ada pihak yang persetujuannya harus ditunggu. Itulah inti dari keseluruhan konsepnya, dan itulah alasan teknologi ini ada sama sekali.

Lalu sebuah toko perlu benar-benar bisa menerima pembayaran, dan seluruh kebutuhan praktisnya datang sekaligus. Setiap tagihan butuh alamatnya sendiri, supaya pembayaran bisa dibedakan satu sama lain. Seseorang harus memantau chain dan memutuskan kapan sebuah tagihan sudah dibayar. Jumlahnya harus dikutip dalam mata uang yang dipahami pelanggan, pada kurs yang bertahan cukup lama sampai mereka menekan tombol kirim. Status pesanan harus mengalir kembali ke tokonya. Dan semua itu harus tetap berfungsi jam dua pagi tanpa ada yang mengawasi. Membangun semua itu adalah sebuah proyek tersendiri; tidak membangunnya adalah alasan hampir semua orang mendaftar ke gateway hosted sebagai gantinya — dan, hanya dalam satu formulir, memasukkan kembali seorang perantara ke dalam sistem yang justru dirancang untuk tidak memilikinya.

Apa yang dipegang oleh perantara itu layak dinyatakan secara gamblang, karena lebih dari sekadar biayanya. Ia memegang koinnya, setidaknya sampai sebuah payout dijalankan, yang berarti ia bisa menundanya. Ia memegang daftarnya: setiap pelanggan, setiap jumlah, setiap timestamp, setiap produk, dalam sebuah database yang tidak bisa Anda baca dan tidak bisa Anda hapus. Ia memegang berkas identitas Anda, karena perusahaan yang menyentuh uang orang lain diwajibkan mengumpulkannya. Dan ia memegang sakelarnya, karena syarat layanannya mencadangkan hak untuk memutuskan bisnis Anda tidak lagi diterima — sebuah keputusan yang datang lewat email, berlaku pada saldo maupun akun Anda, dan dalam praktiknya tidak bisa diajukan banding.

BTCPay Server adalah jawaban untuk persis masalah itu, dan tidak untuk masalah lain. Ia adalah payment processor gratis dan open-source yang Anda jalankan di mesin Anda sendiri: ia menurunkan satu alamat per tagihan, memantau chain, mengutip harga fiat, menyediakan checkout dan API, serta bisa berbicara Lightning. Ia tidak pernah memegang koin Anda, karena wallet yang dipantaunya adalah wallet yang sudah Anda miliki sendiri. Empat cara untuk menerima pembayaran kripto, dan berapa biaya sesungguhnya masing-masing:

Properti Sebuah gateway kripto hosted Sebuah alamat mentah di footer BTCPay di instance milik orang lain BTCPay di VPS Anda sendiri
Siapa yang memegang koinnyaGateway-nya, sampai payoutAndaAnda — ia memantau, ia tidak bisa membelanjakan danaAnda — ia memantau, ia tidak bisa membelanjakan dana
Siapa yang bisa menghentikan Anda berdagangGateway-nya, lewat emailTidak ada siapa punOperator instanceTidak ada siapa pun
Siapa yang melihat setiap pelanggan dan jumlahnyaGateway-nya, secara permanenSemua orang — satu alamat, satu total publikOperator instanceAnda
Dokumen identitas diperlukanYa, sebelum payout pertamaTidakApa pun yang diminta operatorTidak
Biaya per transaksiPersentase, selamanyaTidak adaTidak adaTidak ada — $7.90 sebulan, flat
Membedakan satu tagihan dari tagihan lainnyaYaTidak — Anda merekonsiliasi secara manualYaYa
Pilih ini jikaAnda menginginkan nol operasional dan menerima syaratnyaDonasi, segelintir dalam setahunAnda menginginkan perangkat lunaknya, tapi bukan servernyaPenghasilannya milik Anda, begitu pula daftarnya

Kolom kedua juga bukan lelucon — satu alamat saja di footer benar-benar cukup untuk sebuah tautan donasi, dan berpura-pura sebaliknya hanya menjual perangkat lunak yang tidak dibutuhkan siapa pun. Ini berhenti menjadi cukup begitu dua orang membayar jumlah yang sama pada hari yang sama, atau begitu Anda lebih memilih agar pendapatan tahunan Anda bukan angka publik yang bisa dijumlahkan siapa saja.

Langkah 01 · Pilih

Satu keputusan menentukan seluruh biayanya. Berapa banyak chain yang Anda simpan?

Sebuah payment processor harus bisa menjawab satu pertanyaan secara jujur: apakah tagihan ini sudah dibayar? Menjawabnya berarti memantau jaringan Bitcoin, dan memantaunya dengan benar berarti menjalankan node yang memvalidasi block-nya sendiri, bukan sekadar memercayai kata orang lain. Node itulah seluruh budget hardware proyek ini — BTCPay sendiri, indexer, dan database-nya digabung pun hanya galat pembulatan di sampingnya.

Ada tiga pengaturan yang masuk akal dan satu yang tidak. Node archival menyimpan setiap block yang pernah ditambang: sudah jauh melewati 700 GB pada 2026 dan bertambah sekitar 50 GB per tahun. Ini pilihan yang tepat kalau Anda juga berniat menjalankan block explorer atau melakukan analisis historis, dan ini berlebihan untuk sebuah toko. Node pruned mengunduh dan memvalidasi penuh setiap block dengan cara yang persis sama, lalu membuang yang lama sambil menjaga jendela yang terus bergulir. Model keamanannya identik — inilah bagian yang sering disalahpahami orang, karena "pruned" terdengar seperti "sebagian" padahal bukan — dan generator deployment menyediakan fragmen siap pakai untuk ini.

Node eksternal adalah pilihan ketiga: arahkan stack ke node Bitcoin yang sudah Anda operasikan sendiri, lewat jalur privat. Jika Anda sudah mengikuti panduan node Lightning, tidak ada alasan untuk menyimpan salinan kedua dari chain-nya, dan mesh VPN antara kedua mesin adalah cara yang bersih untuk menghubungkan keduanya. Pengaturan yang tidak masuk akal adalah mengarahkan toko ke node publik milik orang asing: node itu jadi tahu setiap alamat yang Anda pantau, yang tidak lain adalah pendapatan Anda, dan ia berada dalam posisi untuk berbohong soal apakah sebuah tagihan sudah dibayar.

Deployment Chain di disk Total volume yang dibutuhkan Apa yang Anda korbankan
Pruned, jendela terkecil~5–25 GB~40 GBRescan, dan segala margin untuk kesalahan. Pengaturan terkecil tidak disarankan.
Pruned, jendela ~50 GB~50 GB~80 GBTidak ada yang disadari toko. Batas bawah yang masuk akal.
Pruned, jendela ~100 GB~100 GB~140 GBTidak ada. Default yang nyaman, dengan ruang untuk Lightning.
Archival, riwayat penuh700 GB +~960 GBTidak ada — tapi Anda membayarnya setiap bulan, selamanya.
Node eksternal yang sudah Anda jalankanTidak ada di mesin ini~40 GBIndependensi — checkout ikut down kalau mesin satunya down.
Satu hal yang benar-benar dikorbankan oleh pruning

Node pruned tidak bisa me-rescan block yang sudah dibuangnya. Dalam praktiknya itu berarti ia tidak bisa merekonstruksi riwayat sebuah wallet yang transaksinya lebih tua dari deployment-nya — indexer hanya memindai maju sejak hari Anda menghubungkan kuncinya, jadi pembayaran lama ke akun itu sama sekali tidak akan muncul di toko. Ini bukan masalah kalau Anda mengikuti anjuran langkah 04 dan memberi toko sebuah akun yang baru dibuat; tapi ini akan jadi sore hari yang benar-benar membingungkan kalau Anda menghubungkan wallet yang sudah Anda pakai selama tiga tahun dan separuh riwayatnya hilang. Putuskan mana yang Anda lakukan sebelum instalasi, bukan sesudahnya.

Ada satu keputusan lagi yang lebih baik diambil di sini daripada nanti, karena ini mengubah apa yang dibangun oleh installer: apakah Anda menginginkan Lightning sama sekali di hari pertama. On-chain-only adalah konfigurasi yang lengkap dan titik awal yang sepenuhnya layak untuk diluncurkan. Menambahkan Lightning belakangan didukung dan tidak menyakitkan, tapi itu adalah daemon kedua dengan dananya sendiri dan aturan backup-nya sendiri, dan ada banyak alasan untuk lebih dulu membuktikan bahwa uang sungguhan benar-benar sampai lewat jalur yang sederhana, sebelum memperkenalkan jalur yang rumit.

Langkah 02 · Siapkan

Domainnya harus ada lebih dulu. Installer akan meminta sertifikat.

Pesan mesinnya. Di panel: Order → VPS → Garrison, image Debian 12, di bastion mana pun tempat Anda ingin data toko ini bermukim — Helsinki, Stockholm, Oslo, atau Reykjavík. Garrison adalah default yang tepat karena mampu menampung chain pruned 100 GB, sebuah node Lightning, dan database-nya tanpa Anda perlu memikirkan disk lagi selama bertahun-tahun. Sentinel bekerja dengan prune yang lebih ketat; Bulwark adalah tingkatan untuk node archival. Tidak perlu alamat email untuk membuka akun, dan tagihannya bisa dilunasi dengan Monero, Bitcoin, Lightning, atau aset lain yang didukung — bagian yang menyenangkan dari proyek khusus ini, karena Anda sedang membangun mesin untuk menerima pembayaran kripto, dan membayarnya pun dengan kripto juga.

Sebelum apa pun yang lain, jalankan checklist hardening jam pertama — SSH hanya dengan kunci di port yang sudah dipindah, unattended upgrades, dan firewall default-deny. Mesin ini pada akhirnya akan menyimpan catatan setiap pelanggan yang Anda miliki dan materi kunci dari node Lightning yang berisi dana sungguhan. Ini bukan mesin yang boleh dibiarkan memakai autentikasi kata sandi selama seminggu.

Sekarang giliran DNS record, dan lakukan sebelum Anda menjalankan installer, bukan sesudahnya. Pilih hostname tempat checkout akan bermukim — shop.example.com, pay.example.com, apa pun yang cocok — lalu arahkan A record ke alamat VPS-nya, ditambah AAAA kalau Anda ingin bisa dijangkau lewat IPv6. Biarkan propagasinya selesai. Reverse proxy yang disiapkan installer akan mencoba memperoleh sertifikat untuk nama itu persis selama boot pertamanya, menggunakan HTTP challenge yang mengharuskan nama itu sudah mengarah ke mesin ini. Record yang belum live adalah cara paling umum sebuah instalasi pertama berakhir dengan error yang membingungkan.

Hostname-nya tidak sepenuhnya permanen, tapi perlakukan seolah-olah permanen

Deployment ini menyediakan script untuk mengganti domain belakangan, jadi ini bisa dipulihkan, bukan fatal. Yang tidak bisa dipulihkan dalam satu perintah adalah semua yang mengalir dari sana: sertifikatnya diterbitkan ulang, setiap pay button dan URL webhook yang sudah Anda bagikan mengarah ke nama lama, sebuah alamat Lightning adalah sebuah nama di sebuah domain dan ikut berpindah bersamanya, dan plugin toko mana pun perlu dikonfigurasi ulang. Pilih nama yang Anda bersedia pertahankan di kop surat selama bertahun-tahun, dan lebih baik pakai subdomain dari domain yang sudah Anda publikasikan daripada domain baru yang mendeskripsikan fungsi mesinnya.

Setelah itu, tulis aturan firewall-nya selagi belum ada yang mendengarkan di port mana pun. Empat port, dan hanya empat. Checkout adalah endpoint HTTPS publik karena keharusan — browser pelanggan harus bisa menjangkaunya — dan port 80 tetap terbuka karena dipakai oleh perpanjangan sertifikat. Port peer-to-peer Lightning hanya dibutuhkan kalau Anda ingin node lain bisa membuka channel ke arah Anda, dan langkah 05 akan berargumen bahwa Anda memang menginginkannya. Port peer-to-peer Bitcoin sama sekali tidak perlu dibuka: node Anda sudah membuat koneksi keluar dengan baik-baik saja, dan membukanya untuk koneksi masuk hanya membuat node itu lebih mudah ditemukan.

ufw default deny incoming
ufw allow 47222/tcp                  # administrative SSH, moved off 22
ufw allow 80/tcp                     # ACME HTTP-01 challenge and the redirect
ufw allow 443/tcp                    # the checkout
ufw allow 9735/tcp                   # Lightning peer-to-peer, only if you want inbound channels
ufw enable
ufw status numbered

Dua catatan sumber daya sebelum Anda melanjutkan. Beri mesin swap kalau belum punya — pengunduhan block awal adalah jam yang paling rakus memori dalam proyek ini, dan 4 GB RAM dengan 2 GB swap berperilaku jauh lebih baik daripada 4 GB saja. Dan cocokkan hitungan disk dari langkah 01 dengan tingkatan yang benar-benar Anda pesan, karena node yang memenuhi volume-nya di tengah sinkronisasi tidak gagal dengan sopan; ia merusak indeksnya sendiri dan mulai lagi dari awal.

fallocate -l 2G /swapfile && chmod 600 /swapfile
mkswap /swapfile && swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
df -h /                              # confirm the volume matches step 01
Langkah 03 · Deploy

Sebuah generator, bukan file compose. Anda mendeskripsikannya; ia yang merakitnya.

Deployment resminya bukan sebuah docker-compose.yml yang Anda edit sendiri. Ini adalah sebuah generator: Anda mendeskripsikan deployment yang Anda inginkan lewat environment variable, dan sebuah script merakit file compose dari sebuah pustaka fragmen — satu untuk Bitcoin Core, satu untuk indexer, satu untuk PostgreSQL, satu untuk aplikasi BTCPay, satu untuk setiap implementasi Lightning, satu untuk reverse proxy, dan deretan panjang ekstra opsional lainnya. Ini adalah desain yang lebih baik daripada kelihatannya di awal, karena upgrade akan meregenerasi file itu, bukan meminta Anda menggabungkan perubahan milik orang lain ke dalam milik Anda sendiri. Ini juga berarti blok environment di bawah adalah konfigurasi sungguhan dari deployment Anda, dan pantas disimpan di tempat yang sama dengan catatan infrastruktur Anda yang lain.

Clone repositorinya dan ekspor environment-nya. Setiap baris di bawah ini berhubungan langsung dengan sebuah keputusan dari langkah 01: host name-nya adalah domain yang Anda arahkan di langkah 02, fragmen storage-nya adalah jendela prune yang Anda pilih, dan variabel Lightning-nya adalah salah satu implementasi, atau dihilangkan sama sekali untuk peluncuran on-chain-only.

mkdir BTCPayServer && cd BTCPayServer
git clone https://github.com/btcpayserver/btcpayserver-docker
cd btcpayserver-docker

export BTCPAY_HOST="pay.example.com"          # exactly the name you pointed in step 02
export NBITCOIN_NETWORK="mainnet"
export BTCPAYGEN_CRYPTO1="btc"
export BTCPAYGEN_REVERSEPROXY="nginx"
export BTCPAYGEN_LIGHTNING="clightning"       # or "lnd", or omit for on-chain only
export BTCPAYGEN_ADDITIONAL_FRAGMENTS="opt-save-storage-s"   # ~50 GB pruned window
export BTCPAY_ENABLE_SSH=true
export LETSENCRYPT_EMAIL="you@example.com"

. ./btcpay-setup.sh -i

Dua detail dalam blok itu masing-masing layak mendapat satu kalimat. Titik di depan pada . ./btcpay-setup.sh -i bukan salah ketik — script itu di-source, bukan dieksekusi, jadi environment yang diaturnya tetap berada di shell Anda dan perintah-perintah bantuan tetap berfungsi setelahnya. Dan nama fragmen storage-nya sensitif terhadap versi: generatornya sudah merilis varian yang memangkas hingga sekitar 100, 50, 25, dan 5 GB, dengan nama yang sudah disesuaikan antar rilis. Baca daftar fragmen di repository yang baru saja Anda clone, alih-alih memercayai nilai yang disalin dari sebuah tulisan blog, termasuk tulisan ini.

Installer akan berjalan beberapa menit, menarik banyak image, memperoleh sertifikat, dan menjalankan semuanya. Lalu penantian pun dimulai: node-nya harus mengunduh dan memvalidasi chain sebelum toko bisa mengonfirmasi sebuah pembayaran, dan itu memakan waktu berjam-jam, bukan menit, bahkan dalam mode pruned, karena pruning membuang block setelah memvalidasinya, bukan melewatkan pekerjaannya. Antarmuka web-nya langsung tersedia dan akan menampilkan banner sinkronisasi. Jangan terbitkan tagihan sungguhan sampai banner itu hilang.

./bitcoin-cli.sh getblockchaininfo | grep -E 'blocks|headers|verificationprogress|pruned'
docker ps --format '{{.Names}}\t{{.Status}}'
Klaim akun administrator dalam lima menit ke depan

Instance yang baru tidak memiliki user sama sekali, dan akun pertama yang mendaftar otomatis menjadi administrator. Sampai Anda mengklaimnya, siapa pun yang sampai ke URL-nya bisa melakukan hal yang sama — dan URL itu tidak rahasia: begitu sertifikatnya diterbitkan, hostname-nya langsung tercatat di log certificate-transparency publik, yang diindeks dan terus-menerus dipindai oleh orang-orang yang memang mencari hal seperti ini. Buka situsnya dan daftar sebelum apa pun yang lain, lalu periksa Server Settings dan pastikan pendaftaran tidak terbuka untuk orang asing. Ini adalah jendela lima menit yang sering dibiarkan terbuka selama berhari-hari karena tokonya dianggap "belum live".

Ada dua fragmen opsional yang layak diketahui selagi Anda masih berada dalam konfigurasi. Satu menambahkan Tor hidden service, sehingga checkout bisa dijangkau lewat alamat onion v3 selain alamat clearnet-nya — berguna untuk pelanggan yang lebih suka tidak me-resolve domain Anda, dan ide yang sama seperti pada panduan onion service. Yang satu lagi menambahkan cryptocurrency kedua. Keduanya diatur dengan cara yang sama, dengan menambahkannya ke variabel additional-fragments dan menjalankan ulang script setup; generatornya akan membangun ulang file compose dan me-restart hanya bagian yang berubah.

Langkah 04 · Hubungkan

Beri ia kunci publik. Jangan pernah beri ia seed.

Buat sebuah toko, lalu ambil satu keputusan di halaman ini yang benar-benar penting. BTCPay akan menawarkan dua cara untuk melampirkan wallet Bitcoin: menghubungkan wallet yang sudah ada, atau membiarkannya membuat wallet baru dan menyimpan seed-nya di server. Pilihan pertama bersifat watch-only, dan itulah yang Anda inginkan. Pilihan kedua mengubah sebuah mesin publik yang menghadap internet menjadi hot wallet yang menyimpan pendapatan Anda, dan hardening sebanyak apa pun tidak membuat itu jadi pertukaran yang baik untuk mesin yang seluruh tugasnya adalah bisa dijangkau oleh orang asing.

Mekanisme di balik anjuran ini cukup elegan untuk layak dipahami. Wallet modern bersifat hierarkis: satu seed menurunkan sebuah pohon kunci, dan ada sebuah extended public key — sebuah xpub, atau varian zpub-nya untuk native segwit — yang darinya setiap alamat penerima dalam sebuah akun bisa dihitung tanpa kemampuan untuk menandatangani apa pun. Berikan itu ke toko, dan toko bisa membuat alamat baru untuk setiap tagihan, memantau chain untuk mencari pembayaran ke masing-masing alamat, dan menampilkan saldonya kepada Anda. Ia tidak bisa memindahkan satu satoshi pun. Bagian privatnya tetap berada di wallet Anda, atau di perangkat hardware Anda, dan tidak pernah berpindah.

Jadi: buka Sparrow, Electrum, atau aplikasi desktop untuk hardware wallet Anda, buat akun baru yang khusus untuk toko ini, dan ekspor extended public key-nya. Di pengaturan wallet toko, pilih untuk menghubungkan wallet yang sudah ada, tempel kuncinya, lalu cocokkan beberapa alamat pertama yang diturunkan BTCPay dengan yang ditampilkan wallet Anda. Kalau cocok, jalur derivasinya benar dan koneksinya selesai. Kalau tidak cocok, Anda memilih jenis script yang salah — perbedaan antara xpub dan zpub adalah perbedaan antara dua kumpulan alamat yang sama sekali terpisah.

Extended public key bukan sekadar string yang tidak berbahaya

Ia tidak bisa membelanjakan dana, dan itulah maksudnya — tapi ia bisa mendaftar. Siapa pun yang mendapatkannya bisa menurunkan setiap alamat yang akan pernah dipakai akun itu, dan karenanya membaca setiap pembayaran yang pernah dan akan pernah diterimanya, selama Anda masih memakainya. Itu adalah pengungkapan permanen dan tidak bisa dicabut atas penghasilan toko Anda, dan itulah sebabnya akun yang Anda hubungkan sebaiknya khusus untuk toko, bukan akun yang menyimpan tabungan Anda. Perlakukan kuncinya sebagai rahasia, jauhkan dari screenshot dan tiket dukungan, dan kalau sampai bocor, pindahkan toko ke akun baru daripada sekadar berharap.

Sekarang pengaturan tagihan, tempat sebuah toko sebenarnya disetel. Masa berlaku defaultnya sekitar lima belas menit, dan ini adalah penguncian kurs, bukan batasan teknis: ini soal seberapa lama Anda bersedia mempertahankan harga berdenominasi fiat terhadap aset yang volatil. Persingkat untuk pasar yang volatil, perpanjang kalau pelanggan Anda lamban. Konfirmasi menentukan kapan sebuah tagihan dihitung lunas — nol konfirmasi bersifat instan dan cocok untuk secangkir kopi, satu konfirmasi adalah default yang wajar, dan enam konfirmasi untuk jumlah yang membuat menunggu satu jam lebih murah daripada alternatifnya. Toleransi kekurangan pembayaran memungkinkan Anda menerima tagihan yang datang sedikit lebih kecil dari seharusnya, yang selalu terjadi ketika wallet pelanggan memotong biayanya dari jumlah yang dikirim alih-alih menambahkannya; persentase kecil di sini menghilangkan satu kategori penuh email dukungan.

Lalu ujilah dengan uang sungguhan, bukan dengan testnet. Terbitkan sebuah payment request untuk jumlah yang remeh, bayar dari wallet ponsel, dan amati tagihannya berpindah dari baru, ke diproses, hingga lunas. Satu transaksi tunggal itu membuktikan node-nya sudah tersinkronisasi, jalur derivasinya benar, penyedia kursnya berfungsi, sertifikatnya valid di browser ponsel, dan uangnya benar-benar sampai ke wallet yang Anda kendalikan. Tidak ada cara lain yang membuktikan kelima hal itu sekaligus.

Langkah 05 · Lightning

Channel adalah bagian yang mudah. Menjadi bisa dibayar adalah bagian yang sulit.

Bitcoin on-chain melunasi tagihan $400 dengan mulus, dan tagihan $4 dengan buruk: pelanggan menunggu konfirmasi dan membayar biaya yang bisa jadi sebagian nyata dari nilai pembeliannya. Lightning membalik keduanya — settlement dalam waktu sekitar dua detik, biaya diukur dalam sepersekian sen — itulah sebabnya toko yang menjual barang kecil membutuhkannya, dan toko yang menjual barang besar mungkin tidak. Kalau Anda mengatur sebuah implementasi Lightning di langkah 03, daemon-nya sudah berjalan dan BTCPay sudah terhubung dengannya; pengaturan toko hanya perlu mengaktifkan Lightning sebagai metode pembayaran.

Implementasi mana yang Anda pilih punya konsekuensi yang layak disebutkan. Core Lightning adalah pilihan yang konservatif dan ringan, dengan arsitektur plugin yang bersih. LND adalah yang paling luas dipakai dan memiliki ekosistem tool manajemen terbesar di sekitarnya. Sekarang ada juga jenis pilihan ketiga — sebuah daemon ringan yang melimpahkan manajemen channel ke penyedia layanan sambil tetap menyimpan kunci di mesin Anda — yang menukar sebagian independensi dengan lenyapnya semua hal yang dibahas dalam tiga paragraf berikutnya. Itu pilihan yang sah untuk toko yang menginginkan Lightning tapi tidak ingin menjadi operator node; itu sekadar pertukaran yang berbeda, bukan pertukaran gratis.

Node yang baru dibuat tidak bisa menerima pembayaran, dan tidak ada yang memberitahu Anda soal itu

Sebuah channel Lightning menampung sejumlah uang yang tetap, terbagi di antara kedua ujungnya. Ketika Anda membuka sebuah channel dan mendanainya, seluruh uang itu berada di sisi Anda — yang berarti kapasitas untuk mengirim, dan kapasitas untuk menerima yang benar-benar nol. Toko justru membutuhkan yang sebaliknya. Jadi node yang baru saja didanai dengan tiga channel yang sehat pun masih bisa gagal pada setiap tagihan masuk, dan kegagalannya terlihat seperti error routing, bukan kesalahan konfigurasi. Inilah alasan paling umum sebuah checkout Lightning self-hosted tampak rusak pada hari pertama.

Ada tiga cara jujur untuk mendapatkan kapasitas masuk, dan ketiganya tidak saling eksklusif. Anda bisa membuka channel keluar lalu membelanjakannya — membeli sesuatu, membayar tagihan, memindahkan uang ke exchange — yang mendorong saldo Anda ke sisi seberang dan mengubah kapasitas mengirim menjadi kapasitas menerima. Anda bisa meminta node yang sudah terhubung luas untuk membuka channel ke arah Anda, yang merupakan permintaan biasa di komunitas Lightning dan gratis kecuali biaya on-chain milik peer-nya. Atau Anda bisa membeli likuiditas masuk dari salah satu dari beberapa layanan yang menjualnya, yang memakan biaya persentase kecil dan hanya perlu waktu beberapa menit, bukan minggu. Tidak ada rekomendasi afiliasi di halaman ini dan tidak akan pernah ada; pilih berdasarkan reputasi dan harga saat ini.

Begitu Anda bisa menerima pembayaran, dua fitur mengubah node menjadi etalase toko. Sebuah alamat Lightning — berbentuk sama seperti alamat email, di domain Anda sendiri — memungkinkan siapa pun mengirim uang kepada Anda dari wallet modern apa pun tanpa perlu ada tagihan lebih dulu, dan itu adalah mekanisme donasi dan tip paling ramah yang ada di mana pun. Dan kode QR di halaman checkout bisa menawarkan kedua jalur sekaligus, sehingga pelanggan dengan wallet Lightning membayar dalam hitungan detik, dan pelanggan yang tidak punya membayar secara on-chain, dari layar yang sama tanpa perlu keputusan apa pun dari Anda.

Sebelum pembayaran Lightning pertama masuk, lakukan langkah backup yang harus dikerjakan sekarang, bukan nanti. Setiap implementasi menyimpan sebuah file kecil yang menggambarkan state channel Anda saat ini — LND menyebutnya static channel backup — dan itulah artefak yang memungkinkan Anda memulihkan dana kalau mesinnya hilang. File ini berubah setiap kali sebuah channel dibuka atau ditutup, jadi salin file itu keluar dari mesin secara otomatis, bukan secara manual. Baca peringatan di langkah 06 sebelum Anda menganggap archive malam Anda sudah mencakup ini, karena khusus untuk Lightning, itu tidak benar.

Langkah 06 · Luncurkan

Sekarang tempatkan di depan pelanggan. Lalu jaga supaya tetap membosankan.

Pilih permukaan checkout paling sederhana yang sesuai dengan apa yang sudah Anda miliki. Sebuah payment request adalah tautan yang Anda kirim ke seseorang — tidak perlu situs web, dan ini cara tercepat untuk menagih klien. Aplikasi point of sale mengubah instance yang sama menjadi kasir dengan daftar produk, yang bisa dijalankan dari ponsel di sebuah lapak pasar. Sebuah pay button adalah cuplikan HTML untuk situs statis. Sebuah plugin toko menambahkan Bitcoin sebagai metode pembayaran ke toko sungguhan dan menuliskan kembali status pesanan secara otomatis. Dan REST API menerbitkan tagihan, melaporkan state-nya, dan memanggil webhook saat sebuah tagihan lunas — inilah integrasi yang paling awet karena tidak bergantung pada apa pun selain HTTP dan sebuah shared secret.

Apa pun yang Anda pilih, pasang webhook-nya lalu uji apakah ia benar-benar terpicu. Sebuah tagihan yang lunas tapi tidak pernah memberi tahu aplikasi Anda adalah modus kegagalan yang tidak akan tertangkap siapa pun, karena semuanya terlihat benar di kedua sisi bila dilihat sendiri-sendiri: uangnya sudah sampai, pelanggan melihat halaman konfirmasi, dan pesanannya tetap belum terpenuhi. Kirim diri Anda sendiri sebuah webhook settled-invoice dengan sengaja, pastikan endpoint Anda menerimanya, dan verifikasi signature-nya, bukan sekadar memercayai payload-nya — endpoint itu bersifat publik dan siapa pun bisa mengirim data ke sana.

Backup setiap malam bukan jalur pemulihan untuk Lightning

Ini adalah satu-satunya peringatan di halaman ini yang bisa membuat Anda kehilangan uang, bukan sekadar waktu, dan dokumentasi resmi proyeknya menyatakannya dengan kata-kata yang sama persis: state channel Lightning yang lama itu beracun. Memulihkan salinan database channel dari semalam dan membiarkan node-nya berjalan berarti menyiarkan sebuah state yang sudah digantikan oleh lawan transaksi Anda — yang oleh protokolnya dianggap sebagai percobaan curang dan dihukum dengan memberikan seluruh saldo channel kepada mereka. Jadi archive itu tepat untuk database toko, konfigurasi, dan riwayat tagihan, tapi bukan rencana pemulihan untuk channel. Salin static channel backup keluar dari mesin secara berkelanjutan, simpan yang terbaru, dan kalau Anda pernah memulihkan seluruh server dari sebuah archive, lakukan itu dengan mengetahui bahwa sisi Lightning membutuhkan prosedur pemulihan yang terdokumentasi, bukan sekadar restore langsung.

Dengan memahami itu, rutinitasnya jadi singkat. Deployment ini menyediakan script backup yang meng-archive volume-volumenya dan men-dump database-nya sambil melewatkan data blockchain-nya, dan ia menerima sebuah passphrase supaya archive-nya terenkripsi sebelum meninggalkan mesin. Jalankan itu dengan timer, lalu kirim hasilnya ke sebuah mesin di yurisdiksi yang berbeda seperti yang dijelaskan panduan backup — sebuah repository append-only sepadan dengan sepuluh menit ekstra di sini, karena payment server yang sudah dibobol seharusnya tidak bisa menghapus catatan tentang apa yang sudah diprosesnya.

cd ~/BTCPayServer/btcpayserver-docker
export BTCPAY_BACKUP_PASSPHRASE="a long passphrase you keep elsewhere"
./btcpay-backup.sh                   # archives volumes + database, skips the chain
# then ship the archive offsite, and keep the channel backup separately

Upgrade adalah langkah berikutnya, dan mesin pembayaran adalah satu-satunya mesin di mana "perbarui nanti, dengan sengaja" justru kebijakan yang benar. Deployment ini punya script update sendiri yang meregenerasi file compose dan menarik image baru; jalankan itu setelah Anda membaca catatan rilisnya, bukan ketika sebuah cron job merasa ingin melakukannya. Ambil archive-nya lebih dulu. Naikkan satu rilis dalam satu waktu. Dan catat versi sebelumnya, karena rollback yang bisa Anda lakukan dalam satu menit adalah yang membuat semua ini rendah risiko.

./btcpay-update.sh                   # deliberate, after reading the release notes
df -h /                              # the check that should be an alert, not a habit

Terakhir, pasang satu alert dan satu pengingat. Alert-nya untuk penggunaan disk — sebuah node blockchain adalah satu-satunya proses di mesin yang terus tumbuh dengan sendirinya, dan volume yang penuh akan membuat checkout mati dengan cara yang lambat untuk didiagnosis, karena tidak ada hal lain yang berubah. Pasang pemicunya di delapan puluh persen, bukan sembilan puluh lima. Pengingatnya bulanan, dan tugasnya adalah membuka toko dan memeriksa dua hal: apakah tagihan masih bisa lunas, dan apakah channel Lightning yang Anda buka masih hidup. Payment processor gagal secara senyap, dan cara Anda mengetahuinya adalah lewat pelanggan yang memberi tahu bahwa mereka tidak bisa membayar.

Bagian yang jujur · Apa yang tidak dilakukan ini

Anda menyingkirkan perantara. Anda tidak lantas jadi tak terlihat.

Self-hosting processor adalah perbaikan yang nyata dan spesifik, dan ini bukan sulap menghilang. Lima hal tetap benar setelah semua yang di atas dikerjakan, dan mengetahuinya adalah perbedaan antara sebuah pembelaan yang kuat dan sekadar cerita yang menenangkan.

Ledger Bitcoin bersifat publik dan permanen. Menyingkirkan gateway menyingkirkan database privat milik sebuah perusahaan; itu tidak mengenkripsi chain-nya. Setiap pembayaran yang diterima toko Anda tetap terlihat oleh siapa pun yang tahu sebuah alamat, selamanya, dan alamat-alamat itu mengelompok: sebuah wallet yang menggabungkan dua pembayaran menjadi satu pengeluaran baru saja memberi tahu seluruh dunia bahwa kedua pelanggan itu membayar toko yang sama. Ini adalah sifat dari asetnya, bukan dari perangkat lunaknya, dan itulah alasan bisnis dengan kebutuhan privasi yang sungguhan juga melirik Monero.

Hostname checkout dipublikasikan sesaat setelah ia ada. Log certificate-transparency bersifat publik dan terus-menerus diindeks, jadi nama yang Anda pilih di langkah 02 tetap bisa ditemukan meski Anda tidak pernah menautkannya ke mana pun. Itulah sebabnya akun administrator harus diklaim dalam menit-menit pertama, bukan minggu pertama, dan itulah sebabnya halaman login layak mendapat kata sandi yang kuat serta faktor kedua sejak hari pertama.

Titik keluar menuju fiat adalah tempat identitas kembali muncul. Tidak ada apa pun dalam stack ini yang mengharuskan Anda mengidentifikasi diri untuk menerima pembayaran. Mengonversi hasilnya menjadi uang bank nyaris selalu mengharuskannya, karena konversi itu terjadi di exchange atau broker yang teregulasi. Self-hosting memindahkan syarat identitas dari titik penjualan ke titik keluar — sebuah perbaikan nyata dalam hal eksposur, tapi bukan hal yang sama dengan tidak adanya eksposur itu sama sekali.

Kewajiban pelaporan Anda tidak ikut berpindah bersama server. Di mana sebuah bisnis terdaftar dan di mana pemiliknya tinggal, itulah yang menentukan apa yang harus dibayar dan apa yang harus dilaporkan. Yurisdiksi mesin yang menerbitkan tagihan-tagihan itu sama sekali tidak berpengaruh. Di sebagian besar tempat, menerima kripto untuk barang atau jasa adalah pendapatan biasa senilai harga pada hari itu, dan melepasnya nanti adalah peristiwa yang terpisah lagi. Sebuah instance self-hosted adalah catatan yang lebih baik daripada akun processor yang bisa saja hilang — ini bukan cara untuk tidak memiliki catatan sama sekali.

Tidak ada chargeback, dan itu berlaku dua arah. Pembayaran yang sudah terkonfirmasi bersifat final, dan justru sifat itulah yang membuat penipuan terhadap merchant nyaris mustahil, sekaligus alasan biayanya nol. Ini juga sebabnya pelanggan yang kecewa tidak punya mekanisme apa pun selain niat baik Anda. Terbitkan kebijakan refund, gunakan fitur payout untuk menepatinya, dan pahami bahwa Anda telah mengambil alih tugas resolusi sengketa yang dulu dibayar oleh persentase itu.

Apa yang sebenarnya Anda beli, secara tepat: uangnya sampai ke sebuah wallet yang hanya bisa dibelanjakan oleh Anda, tidak ada yang bisa menghentikan penjualannya, tidak ada yang mengambil potongan, dan daftar siapa membayar berapa kepada Anda hanya ada di sebuah mesin yang Anda sewa tanpa nama tertentu. Itu adalah klaim yang sempit, tapi nyata. Nilainya baru sepadan dengan biayanya kalau langkah 06 benar-benar dikerjakan — payment processor self-hosted tanpa restore yang teruji bukanlah peningkatan bisnis, melainkan sebuah single point of failure yang memegang seluruh pendapatan Anda.

Ukuran · Apa yang perlu dipesan

Aplikasinya kecil sekali. Chain-nya adalah keseluruhan tagihan.

Tingkatan Bulanan Sumber daya Apa yang bisa dijalankannya dengan nyaman
Sentinel$3.902 vCPU · 4 GB · 120 GB · 1 GbpsNode pruned 25–50 GB dengan Lightning. Tambahkan swap; pantau disknya.
Garrison$7.904 vCPU · 8 GB · 240 GB · 1 GbpsNode pruned 100 GB, Lightning, dan kelonggaran bertahun-tahun. Pilihan default.
Ravelin$16.908 vCPU · 16 GB · 480 GB · 2.5 GbpsSama, ditambah chain kedua atau toko sibuk dengan banyak plugin.
Bulwark$32.9016 vCPU · 32 GB · 960 GB · 5 GbpsNode archival dengan ruang untuk terus bertambah. Hanya jika Anda membutuhkan riwayatnya.

BTCPay, indexer, dan PostgreSQL bersama-sama hanya memakan beberapa gigabyte dan nyaris tidak ada CPU begitu node-nya tersinkronisasi; toko yang menerima seratus pembayaran sehari pun tidak akan membebani tingkatan terkecil dari sisi compute. Yang membedakan antar tingkatan adalah disk, dan disk sepenuhnya ditentukan oleh langkah 01. Sinkronisasi adalah satu-satunya jam yang benar-benar berat dalam proyek ini — sifatnya IO-bound, bukan CPU-bound, itulah sebabnya NVMe penting di sini dan jumlah core tidak. Bandwidth tidak dibatasi di semua tingkatan, jadi node Lightning yang bisa diakses publik tidak menambah biaya sama sekali untuk dijalankan.

Catatan lapangan · Enam jebakan

Enam cara ini bisa berjalan salah. Dua di antaranya menghabiskan uang.

Jebakan 01 · Fatal

Akun administrator yang tidak pernah diklaim siapa pun

Orang pertama yang mendaftar di sebuah instance baru menjadi administrator, dan hostname-nya sudah tercatat di log certificate-transparency sejak sertifikatnya diterbitkan. Daftarlah dalam hitungan menit setelah instalasi selesai, lalu pastikan di Server Settings bahwa pendaftaran tidak terbuka untuk orang asing.

Jebakan 02 · Fatal

Hot wallet di mesin publik

Membiarkan server membuat wallet-nya sendiri hanya perlu satu klik, tapi menaruh seed di sebuah mesin yang tugasnya menjawab orang asing. Hubungkan extended public key sebagai gantinya: toko akan memantau, menurunkan alamat, dan merekonsiliasi, tanpa bisa membelanjakan dana. Simpan bagian privatnya di sebuah wallet atau di perangkat hardware.

Jebakan 03 · Beracun

Memulihkan state Lightning semalam

Database channel dari kemarin menggambarkan state yang sudah digantikan oleh lawan transaksi Anda. Menghidupkannya kembali bisa membuat seluruh saldo channel jatuh ke tangan mereka sebagai penalti. Archive setiap malam mencakup toko; channel membutuhkan jalur pemulihan yang terdokumentasi dan channel backup yang disalin secara berkelanjutan.

Jebakan 04 · Senyap

Tagihan Lightning yang tidak bisa dibayar siapa pun

Mendanai sebuah channel memberi Anda kapasitas untuk mengirim, bukan untuk menerima. Node baru yang sudah terisi uang tetap akan gagal pada setiap pembayaran masuk, dan errornya terlihat seperti masalah routing. Dapatkan likuiditas masuk sebelum Anda mengiklankan opsi Lightning, bukan setelah keluhan pertama.

Jebakan 05 · Membingungkan

Node pruned dan wallet dengan masa lalu

Hubungkan akun berusia tiga tahun ke node pruned, dan transaksi lamanya tidak akan pernah muncul, karena block yang memuatnya sudah dibuang. Tidak ada yang rusak dan tidak ada yang memberitahukannya. Beri toko akun yang baru dibuat, atau jalankan archival.

Jebakan 06 · Terhindarkan

Volume yang penuh saat sinkronisasi

Node adalah satu-satunya proses di mesin yang terus tumbuh dengan sendirinya, dan disk yang penuh akan merusak indeksnya, bukan berhenti dengan sopan — yang berarti Anda harus mengunduh ulang dari awal. Cocokkan hitungan dari langkah 01 dengan tingkatan yang Anda pesan, dan pasang alert pada delapan puluh persen, bukan sembilan puluh lima.

FAQ · Pembayaran Bitcoin self-hosted

Pertanyaan, dijawab.

Sebelas pertanyaan yang muncul selagi membangun ini — dimulai dari dua pertanyaan yang menentukan apakah Anda sebaiknya membangunnya sama sekali.

Apakah BTCPay Server benar-benar gratis, atau ada jebakannya?

Ini benar-benar gratis, dan bentuk kegratisannya itu lebih penting daripada harganya. BTCPay Server adalah perangkat lunak open-source yang dirilis di bawah lisensi permisif dan dirawat oleh sebuah foundation, bukan perusahaan dengan target pendapatan; tidak ada biaya per transaksi, tidak ada persentase, tidak ada volume minimum, tidak ada akun yang harus dibuka, dan tidak ada kontrak yang harus ditandatangani, karena memang tidak ada pihak lawan sama sekali — Anda menjalankan sebuah program di server Anda sendiri, sama seperti Anda menjalankan web server. Yang Anda bayar sebagai gantinya nyata, tapi berbeda sifatnya: beberapa dolar sebulan untuk mesinnya, semalam untuk menyiapkannya, dan kewajiban tetap untuk terus mem-patch layanan penanganan pembayaran ini. Perbandingan yang seharusnya dibuat orang bukan "gratis lawan satu persen". Melainkan "tugas operasional yang Anda tanggung sendiri lawan ketergantungan yang tidak", dan jawaban jujurnya adalah toko yang menerima dua puluh pembayaran setahun mungkin lebih baik dilayani oleh sesuatu yang hosted, sementara toko yang menerima dua puluh pembayaran seminggu justru mendapatkan yang lebih murah sekaligus lebih bebas di sini.

Apakah ini custodial? Siapa yang sebenarnya memegang koinnya?

Anda yang memegangnya, dan mekanismenya lebih layak dipahami daripada sekadar dipercaya begitu saja. Setup yang direkomendasikan memberi BTCPay sebuah extended public key dari wallet yang sudah Anda kendalikan. Dari kunci itu, server bisa menurunkan alamat penerima baru untuk setiap tagihan dan memantau chain untuk mencari pembayaran ke sana — dan ia tidak bisa menyusun sebuah pengeluaran yang valid, karena bagian privatnya tidak pernah meninggalkan wallet Anda. Uang berpindah dari pelanggan langsung ke sebuah alamat yang hanya bisa disapu oleh Anda; tidak ada dana yang pernah ditahan di server, jadi tidak ada yang bisa ditahan, dibekukan, atau hilang dalam sebuah pembobolan. BTCPay juga akan menawarkan untuk membuatkan sebuah wallet untuk Anda dan menyimpan seed-nya di server, yang memang praktis dan merupakan satu-satunya konfigurasi yang ditentang panduan ini untuk apa pun yang menyimpan pendapatan sungguhan: itu mengubah sebuah mesin publik yang menghadap internet menjadi hot wallet. Lightning adalah pengecualian yang sungguhan — dana channel harus live supaya bisa melakukan routing — itulah sebabnya saldo Lightning sebaiknya diperlakukan sebagai kasir, bukan brankas.

Berapa banyak disk yang sebenarnya saya butuhkan?

Semuanya bergantung pada satu keputusan, dan rentangnya mencapai dua orde besaran. Sebuah node Bitcoin Core archival menyimpan setiap block yang pernah ditambang: sudah jauh melewati 700 GB pada 2026 dan bertambah sekitar 50 GB per tahun, jadi ia butuh tingkatan yang memang diukur untuknya, dan kebutuhannya akan terus bertambah. Node pruned memvalidasi setiap block dengan cara yang persis sama, lalu membuang yang lama sambil menjaga jendela yang terus bergulir — generator deployment menyediakan fragmen yang memangkas hingga sekitar 100, 50, 25, atau 5 GB, dan berapa pun dari 50 GB ke atas adalah pilihan produksi yang benar-benar layak untuk seorang merchant. Tambahkan sekitar 10 hingga 20 GB untuk indexer, database, node Lightning, dan sistem operasinya, maka hitungannya jadi jelas: tingkatan 120 GB menjalankan deployment pruned 25–50 GB, tingkatan 240 GB menjalankan yang 100 GB dengan kelonggaran bertahun-tahun, dan archival membutuhkan 960 GB. Pilih pruned kecuali Anda punya alasan khusus untuk tidak melakukannya; model keamanannya identik.

Bisakah saya menjalankan BTCPay tanpa node Bitcoin saya sendiri?

Sebagian, dan ada baiknya Anda tahu persis di mana batasnya. Stack ini bisa diarahkan ke node Bitcoin yang sudah Anda jalankan di tempat lain — sebuah mesin di tailnet yang sama, atau salah satu yang berada di balik tunnel — dan itu adalah pengaturan yang sepenuhnya didukung, yang menghemat Anda dari harus menyimpan salinan kedua chain-nya kalau Anda sudah mengerjakan panduan node Lightning. Yang tidak bisa Anda lakukan secara masuk akal adalah menjalankan payment processor terhadap node publik milik orang lain, dan alasannya bukan soal lisensi, melainkan privasi dan kepercayaan: siapa pun yang menjawab query Anda jadi tahu setiap alamat yang dipantau toko Anda, yang sama saja dengan mengetahui pendapatan Anda, dan bisa juga berbohong kepada Anda soal apakah sebuah tagihan sudah dibayar. Ada opsi ketiga yang sering diambil orang — menggunakan instance BTCPay hosted yang dijalankan pihak ketiga — dan itu adalah cara yang sepenuhnya masuk akal untuk memulai. Hanya saja perlu jelas bahwa itu memindahkan data toko Anda ke seorang operator yang bisa melihatnya, padahal itulah sebagian besar alasan self-hosting dilakukan.

Apakah saya harus melakukan bagian Lightning-nya?

Tidak, dan sangat masuk akal untuk melewatkannya di hari pertama. On-chain-only adalah konfigurasi yang lengkap dan berfungsi: tagihan terbayar, pelanggan menunggu konfirmasi, toko pun lunas. Yang dibeli oleh Lightning adalah selisih antara "kira-kira sepuluh menit dan biaya yang terasa menyakitkan untuk jumlah kecil" dengan "dua detik dan sepersekian sen", yang juga merupakan selisih antara checkout yang berfungsi untuk tagihan $400 dan yang juga berfungsi untuk tagihan $4. Harganya adalah Lightning menjadi daemon kedua dengan dananya sendiri, modus kegagalannya sendiri, dan disiplin backup-nya sendiri — termasuk masalah likuiditas masuk di langkah 05 dan peringatan soal state beracun di langkah 06. Urutan yang masuk akal adalah meluncurkan on-chain lebih dulu, memastikan seluruh alurnya berfungsi dengan uang sungguhan, lalu menambahkan Lightning sebagai proyek kedua yang disengaja, bukan menempelkannya begitu saja di malam yang sama.

Wallet mana yang sebaiknya saya hubungkan ke toko?

Wallet apa pun yang bisa mengekspor extended public key untuk satu akun — Sparrow, Electrum, BlueWallet, atau hardware wallet lewat salah satunya — dan bagian yang penting bukan mereknya, melainkan bahwa akun itu khusus untuk keperluan ini, bukan akun yang menyimpan tabungan Anda. Ada dua alasan. Yang pertama soal privasi, dan sifatnya permanen: sebuah extended public key adalah indeks utama dari setiap alamat yang akan pernah diturunkannya, sehingga siapa pun yang mendapatkannya bisa mendaftar setiap pembayaran yang pernah dan akan pernah diterima akun itu. Memberi toko akunnya sendiri berarti sebuah kebocoran hanya membuka penghasilan toko itu saja, tidak lebih. Yang kedua soal operasional: akun khusus membuat penghasilan toko mudah dibaca tanpa Anda harus melakukan forensik pada riwayat yang bercampur baur, dan itu membuat penyapuan dana ke cold storage jadi keputusan yang sederhana dan membosankan. Hardware wallet yang menyimpan kunci privat, dengan toko hanya mengamati kunci publiknya, adalah susunan yang sebaiknya Anda tuju.

Bisakah saya menerima Monero, atau koin lain, di instance yang sama?

Ya, dengan catatan bahwa setiap chain tambahan berarti satu node tambahan penuh dengan disknya sendiri, waktu sinkronisasinya sendiri, dan pemeliharaannya sendiri. Generatornya mendukung cryptocurrency kedua dan ketiga secara langsung, dan ada integrasi Monero yang tersedia sebagai fragmen tambahan — deployment yang sama kemudian menyajikan pelanggan pilihan jalur pembayaran saat checkout. Yang sering diremehkan orang adalah biaya sumber dayanya: setiap chain yang Anda aktifkan adalah daemon lain yang mengindeks ledger lain di volume yang sama, dan dua chain pada tingkatan yang diukur untuk satu chain adalah cara sebuah mesin pembayaran kehabisan disk di hari Minggu. Kalau Monero penting untuk toko Anda, baca dulu panduan node Monero dan pertimbangkan memberinya mesin sendiri; payment processor yang down karena daemon yang tidak berhubungan memenuhi disk lebih buruk daripada yang hanya menerima Bitcoin.

Bagaimana cara ini terhubung ke toko sungguhan?

Empat cara, disusun berdasarkan seberapa banyak perangkat lunak yang sudah Anda miliki. Kalau Anda belum punya apa-apa, BTCPay menyediakan halaman point of sale hosted dan payment request yang bisa Anda kirim sebagai tautan — itu sudah cukup untuk menagih klien atau menerima pembayaran di lapak pasar tanpa situs web sama sekali. Kalau Anda punya situs statis, pay button adalah cuplikan HTML. Kalau Anda punya toko sungguhan, tersedia plugin yang dirawat untuk platform e-commerce umum yang mengubah Bitcoin menjadi metode pembayaran lain saat checkout, dengan status pesanan yang otomatis terhubung kembali. Dan kalau Anda punya aplikasi sendiri, REST API bisa menerbitkan tagihan, melaporkan state-nya, dan memanggil webhook yang Anda tentukan begitu sebuah tagihan lunas — inilah integrasi yang paling awet, karena tidak bergantung pada apa pun selain HTTP. Mulai dengan payment request, buktikan uangnya benar-benar sampai, baru kemudian integrasikan.

Apa yang terjadi kalau VPS-nya mati — apakah saya kehilangan uang?

Untuk on-chain, tidak, dan inilah hadiah tersembunyi dari desain watch-only: koinnya memang tidak pernah berada di server. Alamat diturunkan dari sebuah kunci publik, jadi instalasi baru dengan extended public key yang sama akan menemukan kembali setiap pembayaran; yang hilang kalau terjadi kegagalan total hanyalah konfigurasi toko dan riwayat tagihannya, dan justru untuk itulah script backup ada. Lightning adalah jawaban yang sungguh-sungguh berbeda dan layak mendapat kalimatnya sendiri: dana channel bersifat live, state channel berubah pada setiap pembayaran, dan memulihkan salinan lama dari state itu bisa membuat Anda kehilangan seluruh saldo channel, karena mempublikasikan state yang sudah digantikan adalah persis yang dihukum oleh protokolnya. Jadi sikap yang benar bersifat asimetris. Backup database dan konfigurasinya secara terjadwal, enkripsi, kirim ke tempat yang bukan mesin ini — dan perlakukan static channel backup Lightning sebagai artefak terpisah yang disalin secara berkelanjutan, bukan sekadar satu baris dalam archive malam.

Apakah self-hosting processor berarti saya tidak punya kewajiban pelaporan?

Tidak, dan ini pantas dikatakan secara terus terang karena kebalikannya justru sering diam-diam dianggap benar. Menyingkirkan payment processor menyingkirkan sebuah perantara, sebuah biaya, dan sebuah pihak yang bisa membekukan dana Anda. Itu tidak mengubah apa yang Anda hutangi, kepada siapa, atau apakah sebuah penjualan kena pajak — semua itu ditentukan oleh di mana Anda dan bisnis Anda berada, bukan oleh di mana server itu berada atau perangkat lunak mana yang menerbitkan tagihannya. Di sebagian besar yurisdiksi, menerima cryptocurrency untuk barang atau jasa adalah pendapatan usaha biasa senilai harga pada hari diterimanya, dan melepasnya nanti adalah peristiwa kena pajak yang terpisah lagi; fakta bahwa catatannya sekarang tersimpan di database Anda sendiri, bukan milik sebuah processor, tidak membuat semua ini opsional, dan sebuah instance self-hosted dalam praktiknya justru merupakan audit trail yang lebih baik daripada sekadar screenshot dari akun yang sudah tidak Anda miliki lagi. Di titik mana keuntungan privasi yang jujur ini benar-benar berada memang lebih sempit, tapi nyata: tidak ada pihak ketiga yang menyimpan daftar berjalan pelanggan dan jumlah transaksi Anda. Tanyakan pada akuntan di yurisdiksi Anda sendiri untuk sisanya.

Apakah NordBastion mengizinkan payment processor di VPS?

Ya — sebuah instance BTCPay adalah aplikasi web biasa dengan database biasa dan daemon blockchain biasa, dan tidak ada satu pun dalam kebijakan penggunaan wajar yang memperlakukannya berbeda dari sebuah toko atau blog. Catatan praktisnya soal sumber daya, bukan soal kebijakan: node yang sedang bersinkronisasi berat di disk dan berat di IO pada hari pertamanya, lalu hampir idle sesudahnya; bandwidth tidak dibatasi di semua tingkatan, jadi node Lightning publik tidak dihitung terpisah; dan port masuk untuk koneksi peer sepenuhnya bebas Anda buka. Bagian yang selaras dengan sisa situs ini adalah simetrinya: akunnya tidak perlu nama hukum Anda, tagihannya bisa dilunasi dengan Monero, Bitcoin, atau Lightning, dan mesin yang sekarang tahu setiap pelanggan yang Anda miliki disewa dari sebuah perusahaan yang tidak tahu siapa Anda. Sebuah processor yang Anda self-host di akun yang teridentifikasi telah memindahkan ledger-nya, bukan eksposurnya.

Dapatkan mesinnya

Sebuah checkout milik Anda sendiri, di akun yang bukan atas nama Anda. Bebas KYC, berbayar kripto.

Garrison — 4 vCPU, 8 GB, dan 240 GB NVMe dengan $7.90 sebulan, di Helsinki, Stockholm, Oslo, atau Reykjavík. Cukup untuk node Bitcoin pruned, daemon Lightning, indexer, dan toko, dengan kelonggaran selama bertahun-tahun. Tanpa email saat mendaftar, tanpa dokumen identitas, dan tanpa perusahaan yang menyimpan daftar semua orang yang pernah membayar Anda.

Terakhir ditinjau · 2026-10-12 · Sumber · Dokumentasi BTCPay Server (deployment Docker, fragmen storage, backup dan restore, pengaturan toko), dokumentasi Bitcoin Core soal pruning, dokumentasi implementasi Lightning soal static channel backup · Kadence · tahunan

Hosting privat, dibangun di Utara.