Semua sistem berjalan normal Amsterdam · Paris · Reykjavík +5 Bayar dengan Kripto
Pembayaran & privasiMenengahBaca 20 menitDiperbarui 2026-09-01

Self-host BTCPay Server di VPS

Payment processor adalah perusahaan yang menahan uang Anda saat masih dalam perjalanan dan bertanya siapa Anda lebih dulu. BTCPay Server adalah pekerjaan yang sama, ditulis sebagai software yang Anda jalankan sendiri. Berikut ini biaya sesungguhnya untuk mengoperasikannya, dan ke mana key itu harus berada setelahnya.

Self-host BTCPay Server di VPS
Di halaman ini
  1. Apa yang sebenarnya berubah dari payment processor self-hosted
  2. Apa sebenarnya yang di-deploy, dan bagian mana yang mahal
  3. Sizing yang jujur, dan paket mana yang cocok
  4. Apa yang Anda butuhkan sebelum mulai
  5. Langkah demi langkah
  6. Di mana key itu berada, dan satu kesalahan yang benar-benar penting
  7. Backup, dan bagian-bagian yang benar-benar tidak tergantikan
  8. Mode kegagalan yang dilewatkan quickstart
  9. Yurisdiksi, domain, dan apa yang tidak disembunyikan oleh self-hosting
  10. Pertanyaan yang sering diajukan

Setiap payment processor kripto yang hosted menanyakan dua hal yang sama sebelum ia mau menggerakkan satu satoshi pun untuk Anda: siapa Anda, dan izin untuk menahan uangnya selama transit. Keduanya adalah keputusan yang dibuat orang lain soal bisnis Anda. BTCPay Server mengerjakan hal yang sama — invoice, kurs, halaman checkout, webhook, point of sale — sebagai software yang Anda jalankan sendiri, tanpa akun, tanpa persentase, dan tanpa siapa pun yang berdiri di antara wallet pelanggan dan wallet Anda.

Timbal baliknya, Anda menjadi operatornya. Panduan ini membahas berapa biaya sesungguhnya dari itu semua: bagian mana dari stack yang memakan resource (bukan BTCPay), paket apa yang benar-benar dibutuhkan, cara men-deploy-nya dalam kira-kira satu jam perhatian dan satu hari menunggu, dan — bagian yang menentukan apakah semua ini ide yang bagus atau bukan — ke mana key itu berada begitu semuanya berjalan. Bitcoin dan Lightning adalah default-nya; Monero adalah integrasi opsional dan, kebetulan, yang punya cerita key paling bersih di antara ketiganya. Mesin di baliknya bisa disewa dengan alamat email dan dibayar dengan koin yang sama yang baru akan mulai Anda terima.

Apa yang sebenarnya berubah dari payment processor self-hosted

Pitch-nya biasanya “tanpa fee”, dan itu justru bagian yang paling tidak menarik. Ada empat hal yang berubah, dan cuma satu di antaranya soal uang:

  • Tidak ada yang menahan dana Anda selama transit. Processor yang hosted menerima pembayaran pelanggan ke wallet miliknya sendiri lalu baru mengkreditkannya ke Anda belakangan. Celah itulah tempat hold, review, dan freeze terjadi. BTCPay tidak pernah menerima apa pun: pelanggan membayar ke alamat yang diturunkan dari key milik Anda, dan coin-nya jadi milik Anda sejak konfirmasi pertama.
  • Tidak ada yang bertanya siapa Anda. Onboarding ke sebuah processor adalah proses identitas yang berujung ke sebuah bank. Menginstal software bukan begitu. Itulah keseluruhan bedanya, dan itulah kenapa jawaban untuk “bagaimana cara menerima kripto tanpa KYC” selalu “jalankan sendiri processor-nya”.
  • Biayanya berhenti ikut membesar seiring Anda. Persentase dipungut selamanya dan membesar seiring kesuksesan Anda. VPS dan domain berbiaya sama di bulan yang bagus maupun yang buruk.
  • Anda mewarisi pekerjaan operasionalnya. Uptime, update, backup, dan menjadi orang yang menerima pesan ketika pelanggan bilang invoice-nya tidak pernah settle. Inilah harga sesungguhnya, dan dibayar dengan perhatian, bukan dengan uang.

Yang tidak Anda dapatkan adalah satu hal yang memang benar-benar dikuasai oleh processor: mengubah coin jadi uang rekening bank atas nama Anda. BTCPay cuma memegang apa yang dibayarkan kepadanya, dalam coin yang sama saat dibayarkan. Konversi, invoicing dalam fiat, ekspor akuntansi yang diakui otoritas pajak — semuanya masalah terpisah, dan kebanyakan cara menyelesaikannya justru menghadirkan kembali persis pihak lawan transaksi yang teridentifikasi yang baru saja Anda hilangkan. Tentukan dulu separuh mana dari trade itu yang sebenarnya Anda inginkan sebelum Anda membangun apa pun.

Apa sebenarnya yang di-deploy, dan bagian mana yang mahal

Namanya menyesatkan dengan cara yang berguna. “BTCPay Server” bukan satu program; deployment standarnya adalah sekumpulan kecil container yang naik bersamaan, dan mengetahui mana yang mana adalah beda antara melakukan sizing ini dengan benar dan cuma menerka-nerka:

  • Bitcoin Core. Full node sungguhan, memvalidasi sejak genesis. Inilah komponen yang memakan disk Anda, sebagian besar hari pertama, dan hampir seluruh memory-nya. Semua yang lain relatif gratis.
  • NBXplorer. Indexer di antara Core dan BTCPay. Anda memberinya extended public key; ia melacak alamat-alamat turunannya dan memberi tahu BTCPay saat uang mendarat. Ini juga komponen yang peduli soal pruning, dengan alasan yang dibahas lagi di bagian mode kegagalan.
  • BTCPay Server itu sendiri. Aplikasinya: toko, invoice, halaman checkout, point of sale, webhook, Greenfield API. Relatif kecil — cuma beberapa ratus megabyte memory.
  • PostgreSQL. Invoice, toko, pengaturan, pengguna, API key. Kecil, dan inilah sebenarnya yang backup Anda lindungi.
  • nginx dengan sertifikat otomatis. Sebuah reverse proxy plus pendamping yang menerbitkan dan memperbarui sertifikat untuk hostname Anda. Inilah kenapa port 80 dan 443 harus benar-benar bisa dijangkau dari internet.
  • Opsional, sebuah node Lightning (Core Lightning atau LND) dan sebuah daemon Monero lengkap dengan wallet RPC di sampingnya — masing-masing membawa chain-nya sendiri dan kebutuhan disk-nya sendiri.

Jadi pertanyaan sizing-nya bukan pernah “seberapa besar BTCPay harus dibuat”. Melainkan “berapa banyak chain yang saya simpan, dan berapa banyak chain-nya”. Jawab itu dan paketnya akan memilih dirinya sendiri.

Sizing yang jujur, dan paket mana yang cocok

Proyeknya mendokumentasikan 2 GB RAM dengan swap sebagai minimum dan 4 GB sebagai rekomendasi, dan jarak antara kedua angka itu adalah jarak antara instalasi yang secara teknis selesai dan instalasi yang berani Anda arahkan ke pelanggan. Application runtime, PostgreSQL, dan bitcoind yang sedang sync, berbagi 2 GB, akan tetap selesai — pelan-pelan, dengan swap file mengerjakan sesuatu yang seharusnya tidak perlu ia kerjakan.

Disk ditentukan oleh seberapa keras Anda melakukan pruning, dan deployment-nya mengekspos itu sebagai sebuah fragment yang Anda berikan ke installer. Keluarganya berjalan kira-kira opt-save-storage di sekitar 100 GB block file, -s di sekitar 50 GB, -xs di sekitar 25 GB dan -xxs di sekitar 5 GB. Yang terakhir itu jebakan untuk apa pun yang mau bertahan lama: riwayatnya disimpan terlalu sedikit sehingga maintenance biasa saja mulai gagal. Untuk sebuah toko, -s atau -xs adalah rentang yang masuk akal.

Angka konkret dari grid kami, karena “tergantung” bukan jawaban:

  • Hanya Bitcoin, pruned, satu tokoScout, 2 vCPU / 4 GB / 70 GB NVMe, $9.00/mo. Batas bawah yang jujur, dan jawaban yang tepat untuk kebanyakan pembaca.
  • Bitcoin dan LightningRunner, 3 vCPU / 6 GB / 100 GB, $14.00/mo. Daemon Lightning ringan soal disk tapi keras kepala soal harus tetap online; headroom-nya untuk node di baliknya.
  • Bitcoin, Lightning dan MoneroAlpha, 6 vCPU / 12 GB / 200 GB, $28.00/mo. Chain Monero yang pruned sendirian saja sekitar 85 GB, jadi dua chain dan dua indexer adalah titik di mana 8 GB mulai terasa tipis. Hunter (4 vCPU / 8 GB / 140 GB, $19.00/mo) cuma cukup kalau Bitcoin-nya tetap di-pruned keras dan dijaga tetap begitu.
  • Node unpruned di belakang toko — proyek yang berbeda dengan tagihan yang berbeda. Panduan full-node punya angka-angkanya, dan itu mulai dari Fenrir.

CPU cuma penting tepat satu kali. Verifikasi signature selama initial block download bisa diparalelkan, jadi 2 sampai 4 vCPU mengubah sync pertama dari hitungan hari menjadi kira-kira satu hari saja, lalu kembali idle setelahnya. Bandwidth adalah biaya satu kali untuk seluruh chain, lewat port 1 Gbps dengan traffic unlimited dan tanpa tagihan kelebihan pemakaian di akhir bulan. Latency tidak relevan untuk payment processor, jadi pilih lokasi berdasarkan yurisdiksi, bukan berdasarkan milidetik — Amsterdam, Paris, Bucharest dan Sofia semuanya ada di harga dasar.

Apa yang Anda butuhkan sebelum mulai

Daftar singkat, dan satu itemnya bukan soal teknis.

  • Sebuah domain, dengan A record yang sudah mengarah ke server. Sertifikatnya diterbitkan lewat HTTP terhadap hostname itu, jadi DNS-nya harus sudah bisa di-resolve sebelum installer-nya berjalan, bukan pada saat itu juga. Subdomain seperti pay.example.com adalah bentuk yang normal.
  • Port 80 dan 443 terbuka ke dunia luar. Port 80 bukan opsional meskipun tidak ada yang benar-benar melayani di situ setelahnya; certificate challenge-nya membutuhkannya.
  • Debian 13 dari template library, di mesin yang sudah menjalani hardening sepuluh menit. Lakukan itu lebih dulu — jauh lebih sulit dilakukan dengan rapi begitu sebuah stack sudah berjalan.
  • Wallet yang sudah Anda kuasai, beserta extended public key-nya. Sparrow, Electrum, atau hardware wallet. Siapkan itu di tangan sebelum Anda instal, supaya Anda tidak pernah tergoda membiarkan server membuatkannya untuk Anda.
  • Alamat email untuk certificate authority-nya. Alamat ini cuma menerima peringatan masa berlaku dan tidak ada lagi.
  • Keputusan soal pruning, dibuat sekarang. Berubah pikiran belakangan berarti resync chain dari nol, dan itu satu hari yang tidak akan Anda nikmati untuk dihabiskan dua kali.

Langkah demi langkah

  1. Deploy server, arahkan domain ke situ, dan harden lebih dulu

    Pesan paket yang ditunjuk bagian sizing tadi, pilih Debian 13, dan pilih lokasi berdasarkan yurisdiksi, bukan latency. Buat DNS record-nya segera, karena itu harus sudah ter-propagasi pada saat installer-nya meminta certificate authority membuktikan Anda pemilik nama itu:

    pay.example.com.   300   IN   A   198.51.100.10

    Lalu lakukan pass dari panduan hardening Debian: user non-root dengan key, password authentication dimatikan, unattended security upgrades dinyalakan, dan firewall default-deny. Semua di bawah ini mengasumsikan itu sudah dilakukan dan hanya 22, 80 dan 443 yang terbuka.

    apt update && apt full-upgrade -y
    apt install -y git curl

    Jangan instal Docker secara manual. Setup script-nya menginstal dan mengonfigurasi versi yang ia harapkan, dan instalasi manual adalah alasan paling umum kenapa run pertama gagal.

  2. Clone repository deployment-nya dan pilih fragment Anda

    Seluruh deployment-nya adalah satu repository berisi shell script dan compose fragment. Clone sebagai root, di tempat yang akan Anda ingat:

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

    Konfigurasinya berupa environment variable, dibaca sekali oleh installer-nya lalu disimpan permanen, jadi export di bawah ini adalah seluruh file konfigurasi yang akan pernah Anda tulis:

    export BTCPAY_HOST="pay.example.com"
    export NBITCOIN_NETWORK="mainnet"
    export BTCPAYGEN_CRYPTO1="btc"
    export BTCPAYGEN_REVERSEPROXY="nginx"
    export BTCPAYGEN_LIGHTNING="clightning"
    export BTCPAYGEN_ADDITIONAL_FRAGMENTS="opt-save-storage-s"
    export LETSENCRYPT_EMAIL="you@example.com"

    BTCPAYGEN_LIGHTNING menerima clightning, lnd, phoenixd, atau kosong sama sekali — biarkan kosong kalau Anda belum siap memegang dana hot, karena menambahkannya belakangan cuma perlu satu kali run lagi dari script yang sama. Nama fragment adalah bagian yang berubah-ubah antar rilis, jadi baca halaman deployment terbaru dari proyeknya sebelum Anda paste.

  3. Jalankan installer-nya, lalu biarkan chain-nya sync

    Satu command membangun compose file-nya, menarik image-nya, dan menyalakan semuanya:

    . ./btcpay-setup.sh -i

    Ini selesai dalam beberapa menit dan meninggalkan web interface yang sudah berfungsi. Ini tidak meninggalkan toko yang sudah berfungsi, karena Bitcoin Core sedang mengunduh dan memvalidasi chain-nya dan tidak ada yang bisa dibayar sampai itu selesai. Pantau, jangan cuma menerka-nerka:

    bitcoin-cli.sh -getinfo
    btcpay-down.sh     # stop everything
    btcpay-up.sh       # start everything

    Angka yang bisa dipercaya adalah verificationprogress, dan itu menipu di awal: sembilan puluh persen pertama cepat dan sepuluh persen terakhir memakan sebagian besar waktunya, karena block yang baru-baru ini ukurannya penuh. Di NVMe dengan 2 sampai 4 vCPU, perkirakan kira-kira satu hari. Biarkan saja selagi bekerja — me-restart di tengah sync cuma akan menghabiskan cache-nya.

  4. Buat akun admin dan tutup pintunya di belakang Anda

    Buka https://pay.example.com dan register. Akun pertama yang dibuat akan menjadi administrator, yang menjadikan jeda antara installer-nya selesai dan Anda mendaftar sebagai satu-satunya momen yang benar-benar berbahaya dalam proses ini. Lakukan segera, dari tab browser yang sudah Anda buka.

    Lalu, di pengaturan server, matikan pendaftaran terbuka supaya pengunjung kedua tidak bisa membuat akun, dan aktifkan autentikasi dua faktor untuk akun Anda sendiri. Keduanya cuma dua klik, dan bersama-sama itulah beda antara payment processor milik Anda dan payment processor milik orang lain. Undang administrator tambahan mana pun secara eksplisit.

  5. Hubungkan wallet yang tidak bisa di-spend oleh server

    Buat sebuah toko, lalu pasang sebuah wallet Bitcoin. BTCPay menawarkan untuk membuatkan yang baru untuk Anda; ambil jalur satunya — hubungkan wallet yang sudah ada — dan paste extended public key di level account, yang Anda ekspor dari wallet Anda sendiri:

    zpub6r...
        # account-level extended PUBLIC key (xpub / ypub / zpub), never a prv
        # Sparrow: wallet settings.  Electrum: Wallet -> Information -> Master Public Key

    String itu memang publik sejak dirancang. Itu memungkinkan BTCPay menurunkan pasokan alamat penerima tanpa batas dan mengenali pembayaran ke alamat-alamat itu; itu tidak memungkinkan BTCPay, atau siapa pun yang membobolnya, memindahkan satu satoshi pun. Private key-nya tetap di tempatnya semula, idealnya di hardware wallet yang tidak pernah bersentuhan dengan mesin ini.

    Dua konsekuensi yang layak diresapi. Pakai account baru atau derivation path khusus untuk toko ini, bukan key dari wallet yang sudah Anda pakai bertahun-tahun — bagian mode kegagalan menjelaskan kenapa riwayat dan pruning tidak akur. Dan ingat bahwa siapa pun yang memegang extended key itu bisa melihat setiap pembayaran yang pernah Anda terima: bukan sebuah key, tapi juga bukan berarti tidak ada apa-apanya. Perlakukan itu seperti buku besar yang dibiarkan terbuka di atas meja.

  6. Tambahkan Lightning, dan putuskan berapa banyak uang Anda yang berada di sana

    Kalau Anda mengatur BTCPAYGEN_LIGHTNING saat instalasi, node-nya sudah berjalan dan terhubung secara internal, dan pengaturan toko cuma perlu menyalakannya. Kalau Anda membiarkannya kosong, export variabelnya dan jalankan lagi setup script-nya; ini idempotent dan tidak akan resync chain-nya.

    export BTCPAYGEN_LIGHTNING="clightning"
    . ./btcpay-setup.sh -i

    Sekarang bagian yang lebih merupakan keputusan daripada konfigurasi. Saldo channel disimpan di sebuah wallet yang bisa di-spend oleh server, karena memang begitulah cara kerja payment channel; tidak ada Lightning yang watch-only. Kalau box ini dibobol, Anda cuma kehilangan persis saldo channel-nya dan tidak ada lagi, itulah kenapa jumlah yang tepat untuk disimpan di situ adalah jumlah yang bikin Anda kesal kalau hilang, bukan yang bikin Anda hancur. Sapu ke cold storage dengan jadwal yang benar-benar akan Anda patuhi.

    Perkirakan bulan pertama akan lebih soal likuiditas daripada soal pembayaran. Node merchant butuh kapasitas inbound, yang justru kebalikan dari yang Anda dapat dengan membuka sebuah channel — membuka satu channel mendanai sisi Anda sendiri. Membeli likuiditas inbound dari sebuah layanan, menjalankan submarine swap untuk mendorong dana Anda ke sisi seberang, atau menunggu peer membuka channel ke arah Anda begitu Anda sudah punya volume adalah tiga opsi yang jujur. Core Lightning dan LND sama-sama berfungsi; Core Lightning lebih mudah dinalar di samping node pruned, dengan alasan yang dibahas di panduan full-node.

  7. Tambahkan Monero dengan wallet view-only

    Monero dipasang dengan cara yang sama, sebagai slot crypto kedua, yang menyalakan sebuah daemon Monero dan sebuah wallet RPC di samping semua yang lain:

    export BTCPAYGEN_CRYPTO2="xmr"
    . ./btcpay-setup.sh -i

    Anggarkan untuk chain kedua: sekitar 85 GB dalam mode pruned, dan sync pertama yang makan waktu sehari atau dua hari di NVMe. Panduan node Monero punya detailnya untuk keduanya.

    Penanganan key di sini adalah bagian terbaik dari seluruh setup ini. Monero memisahkan kemampuan untuk melihat pembayaran masuk dari kemampuan untuk meng-spend-nya, jadi Anda membuat sebuah wallet view-only dari alamat utama dan private view key Anda, dan itulah satu-satunya yang pernah dipegang oleh server:

    monero-wallet-cli --generate-from-view-key store-view

    Ini meminta alamat standar, private view key, dan sebuah password. Salin file wallet hasilnya ke direktori wallet Monero yang diekspos oleh deployment-nya, arahkan toko ke situ, dan BTCPay membuatkan sebuah subaddress untuk tiap invoice dan mengawasi pembayaran ke situ. Spend key-nya tidak pernah meninggalkan mesin tempat Anda membuatnya.

    Satu hal untuk dirancang di sekitar checkout-nya: output yang diterima terkunci selama sepuluh block, kira-kira dua puluh menit, jadi BTCPay melihat sebuah pembayaran datang jauh sebelum itu bisa di-spend. Untuk barang digital itu soal kebijakan. Untuk apa pun yang diserahkan langsung secara tatap muka, itu soal antrean.

  8. Uji seperti pelanggan, lalu seperti operator

    “Halamannya kebuka” bukan sebuah pengujian. Buat sebuah invoice dengan jumlah remeh, bayar dari wallet sungguhan, lalu pelajari satu per satu pengaturan yang menentukan apa yang terjadi kalau pembayarannya tidak sempurna:

    • Kebijakan konfirmasi. Berapa banyak block sebelum sebuah invoice dianggap settled. Nol konfirmasi masuk akal untuk secangkir kopi dan salah untuk sebuah laptop; ini pengaturan per-toko dan angka paling konsekuensial di antarmukanya.
    • Masa kedaluwarsa invoice. Berapa lama waktu yang dimiliki pelanggan sebelum kursnya berhenti berlaku. Lima belas menit adalah default-nya dan itu singkat untuk siapa pun yang membayar dari hasil penarikan bursa.
    • Toleransi pembayaran. Persentase kekurangan bayar yang akan Anda terima daripada meninggalkan pelanggan dengan invoice yang cuma terbayar separuh dan tiket support. Kecil dan tidak nol adalah pengaturan yang pragmatis.
    • Kurang bayar dan lebih bayar. Sengaja bayar sebuah invoice kurang dari seharusnya, sekali saja, dan lihat apa yang dilakukan toko Anda soal itu. Jauh lebih baik mempelajarinya dengan uang Anda sendiri.

    Lalu separuh bagian operatornya: aktifkan sebuah webhook dan pastikan toko Anda benar-benar menerimanya, buat sebuah Greenfield API key kalau ada yang akan membuat invoice secara otomatis lewat program, dan ambil satu backup penuh sebelum Anda go live — supaya restore pertama yang pernah Anda lakukan adalah sebuah gladi bersih, bukan keadaan darurat.

Di mana key itu berada, dan satu kesalahan yang benar-benar penting

Hampir semua akibat buruk dengan processor self-hosted bisa dilacak balik ke satu keputusan yang dibuat lebih awal dan asal-asalan: membiarkan server memegang sesuatu yang bisa di-spend. Ini layak dijelaskan secara eksplisit untuk tiga kasusnya, karena ketiganya benar-benar berbeda.

  • Bitcoin on-chain: watch-only, selalu. BTCPay cuma memegang extended public key dan tidak ada lagi. Kalau box-nya dibobol, penyerang jadi tahu berapa yang Anda terima dan bisa mengubah ke mana invoice berikutnya mengarah — serangan yang nyata, dan alasan untuk mengecek ulang wallet toko Anda setelah ada insiden apa pun — tapi tidak bisa menyentuh coin yang sudah diterima.
  • Lightning: hot menurut definisinya. Channel didanai dengan coin yang bisa di-spend oleh server, karena memang begitulah cara kerja sebuah channel. Ini pengecualian yang disengaja, dan bagian di atas sudah membahas sizing-nya.
  • Monero: view-only, secara struktural. Private view key-nya membuka setiap pembayaran masuk tapi tidak mengotorisasi satu pun darinya. Tidak ada yang setara di sisi Bitcoin.

Satu fitur yang sengaja mendobrak model ini adalah Payjoin. Fitur ini membiarkan server Anda menyumbangkan sebuah input ke transaksi pelanggan, yang secara signifikan melemahkan heuristik common-input yang jadi andalan analisis chain, dan merupakan keuntungan privasi sungguhan untuk kedua pihak — tapi penerimanya harus bisa menandatangani, jadi butuh hot wallet di dalam BTCPay. Itu trade sungguhan, bukan fitur gratis. Ambil dengan sadar, dan danai seperti Anda mendanai Lightning wallet: dengan satu jumlah tertentu, bukan dengan semuanya.

Dan kalau Anda membiarkan setup wizard membuatkan wallet toko karena itu jalan tercepat: catat seed yang ditampilkannya, verifikasi di sebuah offline wallet, lalu rencanakan migrasi ke setup watch-only. Seed yang pernah berada di server yang menghadap internet adalah seed dengan hitungan mundur yang sudah berjalan.

Backup, dan bagian-bagian yang benar-benar tidak tergantikan

Urutkan state-nya berdasarkan seberapa sulit untuk membuatnya ulang, karena jawabannya sangat berbeda-beda:

  • Chain-nya. Bukan masalah backup. Ini data publik dan bisa resync, pelan-pelan dan gratis. Jangan pernah backup ini.
  • Database-nya. Invoice, toko, pengaturan, pengguna, API key. Inilah backup yang sesungguhnya, ukurannya kecil, dan kalau hilang Anda kehilangan catatan akuntansi dari setiap penjualan — bukan uangnya, tapi berkasnya.
  • Wallet on-chain Anda. Sudah aman, karena key-nya memang tidak pernah ada di sini. Itulah hasil dari langkah lima.
  • State channel Lightning. Inilah yang bisa menggigit. Static channel backup memungkinkan Anda memulihkan dana di channel Anda setelah kehilangan total dengan cara memaksanya ditutup; ini tidak memulihkan channel-nya, dan tidak berguna kalau sudah basi. Ini berubah setiap kali sebuah channel dibuka atau ditutup, jadi tempatnya di salinan off-site otomatis, bukan di folder yang Anda ingat-ingat tiap tiga bulan.
  • Wallet view-only Monero-nya. Bisa dibangun ulang dari alamat dan view key yang masih Anda pegang secara offline. Backup itu keduanya dan perlakukan file wallet-nya sebagai cache.

Deployment-nya sudah menyertakan helper yang melakukan ini dengan benar:

btcpay-backup.sh    # stops the stack, dumps Postgres, tars the config, restarts
btcpay-restore.sh   # puts one of those archives back

Jeda itu justru intinya — salinan hot dari database yang sedang berjalan bisa restore jadi sesuatu yang menarik. Enkripsi apa pun yang keluar dari mesin ini, dan ingat bahwa snapshot mingguan yang disertakan di setiap paket itu cuma kenyamanan, bukan backup: sebuah snapshot berada di tempat yang sama dengan yang sedang ia lindungi.

Mode kegagalan yang dilewatkan quickstart

Kurang lebih diurutkan dari yang paling sering menghabiskan waktu semalaman seseorang:

  • Sertifikatnya tidak pernah terbit. Sembilan dari sepuluh kali, A record-nya dibuat setelah installer-nya jalan, atau port 80-nya difilter. Perbaiki DNS-nya, pastikan namanya bisa di-resolve dari tempat yang bukan laptop Anda sendiri, lalu jalankan ulang setup script-nya. Mencoba berulang kali secara membabi buta ke certificate authority-nya akan kena rate limit dan menunggu seminggu, jadi ubah sesuatu di antara tiap percobaan.
  • Extended key yang diimpor dengan riwayat menunjukkan saldo nol. Ini jebakan pruning. Indexer-nya menemukan pembayaran baru dengan mengawasi block baru, tapi merekonstruksi riwayat sebuah wallet yang sudah ada berarti membaca block yang sudah dihapus oleh node pruned. Pakai account baru untuk toko dan masalah ini tidak akan ada; kalau Anda memang harus mengimpor riwayat, Anda butuh node unpruned dan sebuah rescan.
  • “Pelanggan sudah bayar dan invoice-nya masih terbuka.” Biasanya karena kurang bayar akibat fee dari wallet pengirim, invoice yang keburu kedaluwarsa saat pembayarannya masih belum terkonfirmasi, atau kebijakan konfirmasi yang lebih ketat daripada yang Anda ingat Anda pilih. Ketiganya adalah pengaturan, dan ketiganya alasan kenapa Anda menguji dulu dengan uang Anda sendiri.
  • Node-nya diam-diam tertinggal. bitcoind yang macet tetap membagikan alamat dan kehilangan pembayaran tanpa mengeluh. Bandingkan block height Anda dengan sumber publik mana pun secara berkala dan beri alert kalau ada gap; ini bukan sesuatu yang sebaiknya Anda pelajari dari pelanggan.
  • Update di saat yang salah. btcpay-update.sh berperilaku baik, tapi ia me-restart semuanya. Jalankan dengan sengaja, jangan pernah otomatis, dan jangan pernah pas lagi ramai penjualan.
  • Alamatnya mendapat reputasi. Halaman checkout di IPv4 yang di-blocklist adalah halaman checkout yang diam-diam ditolak oleh sebagian jaringan korporat dan filter mail. Setiap paket di sini menyertakan alamat dedicated tanpa riwayat, dan itu layak dicek sebelum Anda mencetak domainnya di mana pun.

Yurisdiksi, domain, dan apa yang tidak disembunyikan oleh self-hosting

Software-nya menghilangkan satu pihak lawan transaksi. Ia tidak menghilangkan sisa permukaannya, dan bersikap jujur soal itu jauh lebih berguna daripada daftar fitur lainnya.

Domain adalah titik lemahnya. Ia terdaftar di suatu tempat, ia bisa di-resolve secara publik, dan itulah hal pertama yang dilihat siapa pun. Sebuah processor yang self-hosted di hostname yang didaftarkan atas nama Anda sendiri di registrar di negara Anda sendiri sudah memindahkan uangnya keluar dari tangan pihak ketiga tapi meninggalkan identitasnya persis di tempat semula. Kalau itu penting untuk apa yang Anda jual, registrar-nya layak mendapat perhatian setidaknya sebesar host-nya.

Yurisdiksi adalah variabel yang nyata. Di mana mesinnya berada menentukan perintah pengadilan siapa yang bisa menjangkaunya dan berapa banyak proses yang menghalangi. Itu soal friksi dan jarak, bukan kekebalan — poin yang dijabarkan panjang lebar oleh entri offshore hosting, dan layak dibaca sebelum memilih bendera dibanding jaringan.

Akun adalah mata rantai terakhirnya. Menyewa server dengan alamat email dan membayar dengan Monero berarti tidak ada laporan kartu yang mengaitkan halaman checkout ke sebuah bank — hal aneh untuk terlewatkan padahal seluruh maksud sistem ini adalah supaya tidak butuh itu. Setiap paket di sini no-KYC secara default, dan setiap lokasi menyertakan IPv4 bersih dedicated dengan reverse DNS custom.

Dan batasnya dinyatakan, bukan diisyaratkan. Node, processor, dan toko adalah infrastruktur biasa dan disambut baik di sini; acceptable-use policy-nya singkat, publik, dan punya batas dasar. Apakah Anda butuh lisensi untuk menerima pembayaran adalah pertanyaan soal apa yang Anda jual dan di mana Anda berada, bukan soal software-nya — dan itu pertanyaan untuk orang yang kompeten, bukan untuk panduan hosting.

Pertanyaan yang sering diajukan

Paket VPS mana yang saya butuhkan untuk BTCPay Server?

Scout (2 vCPU / 4 GB / 70 GB NVMe, $9.00/mo) yang menjalankan node Bitcoin pruned adalah batas bawah yang jujur untuk sebuah toko yang berfungsi, dan itulah yang sebaiknya dibeli kebanyakan pembaca. Tambahkan Lightning dan Runner (3 vCPU / 6 GB / 100 GB, $14.00/mo) jadi lebih nyaman; tambahkan Monero sebagai chain kedua dan Alpha (6 vCPU / 12 GB / 200 GB, $28.00/mo) adalah ukuran yang membuat Anda berhenti memikirkannya. Proyeknya mendokumentasikan 2 GB sebagai minimumnya, yang memang benar dan tidak menyenangkan.

Bisakah saya menjalankan BTCPay Server tanpa full node Bitcoin?

Bisa, tapi Anda sedang memilih kepercayaan mana yang mau Anda pertahankan. BTCPay bisa diarahkan ke node eksternal yang sudah Anda jalankan sendiri — versi yang masuk akal dari opsi ini, dan alasan bagus untuk sudah mengikuti panduan full-node lebih dulu — atau ke node milik orang lain, yang menghadirkan kembali pihak ketiga yang bisa melihat setiap alamat yang dibuat toko Anda. Node yang dibundel ada karena itu satu-satunya konfigurasi di mana tidak ada yang mengawasi. Node pruned tetap sebuah full node: pruning saja dan sebagian besar keberatan soal resource-nya hilang.

Apakah BTCPay Server mendukung Monero?

Ya, sebagai integrasi opsional yang Anda nyalakan saat deploy. Ini menyalakan sebuah daemon Monero dan sebuah wallet RPC, dan Anda menghubungkannya dengan wallet view-only yang dibuat dari alamat utama dan private view key Anda — jadi server bisa melihat pembayaran tapi tidak bisa meng-spend-nya, yang merupakan susunan lebih baik daripada apa pun yang tersedia di sisi Bitcoin. Biayanya adalah sebuah chain kedua untuk di-sync dan disimpan, dan kuncian sepuluh block pada output yang diterima, kira-kira dua puluh menit sebelum dananya bisa di-spend.

Apakah legal menjalankan payment processor sendiri?

Menjalankan software-nya adalah operasi software biasa. Aktivitas yang diregulasi di kebanyakan tempat adalah menahan atau memindahkan uang atas nama orang lain, dan sebuah processor non-kustodial yang menerima pembayaran untuk barang Anda sendiri secara spesifik tidak melakukan itu, karena tidak ada apa pun yang pernah ditahan atas nama siapa pun. Apa yang Anda jual dan di mana Anda tinggal tetap menentukan kewajiban Anda, termasuk pajak, dan self-hosting tidak mengubah satu pun dari itu. Ini panduan hosting, bukan nasihat hukum: kalau Anda berniat memproses pembayaran untuk pihak ketiga, anggap saja Anda masuk kategori yang berbeda dan tanyakan ke orang yang kompeten.

Kalau servernya mati, apakah saya kehilangan uangnya?

Bukan uang on-chain-nya, asalkan Anda mengikuti langkah lima — coin-coin itu duduk di sebuah wallet yang key-nya tidak pernah ada di server, dan instalasi baru yang diberi extended public key yang sama akan melihatnya lagi. Yang Anda hilangkan adalah catatannya: invoice, pengaturan toko, API key, kecuali Anda menyimpan backup database-nya. Lightning adalah pengecualian, karena dana channel-nya ada di server; memulihkannya setelah kehilangan total butuh static channel backup yang masih terbaru, dan itu memaksa channel-channel Anda tertutup, bukan memulihkannya.

Apakah saya butuh nama domain untuk BTCPay Server?

Dalam praktiknya, ya. Deployment-nya menerbitkan sertifikat untuk sebuah hostname, browser dan wallet mengharapkan HTTPS di halaman checkout, dan pelanggan sedang diminta mengirim uang ke apa pun yang tertulis di address bar. Subdomain dari sesuatu yang sudah Anda miliki sudah lebih dari cukup. Kalau domain publik itu sendiri masalahnya, BTCPay bisa dijangkau lewat onion service sebagai gantinya — konfigurasi yang sah tapi juga mengubah berapa banyak pelanggan yang bisa menjangkau halamannya.

Berapa biaya sesungguhnya self-hosting per bulan?

Software-nya gratis dan berlisensi AGPL, jadi tagihannya adalah VPS, domain, dan waktu Anda. Dengan $9.00 per bulan untuk Scout dan beberapa dolar per tahun untuk sebuah nama domain, hitung-hitungannya dibanding processor berbasis persentase mana pun sudah berhenti mendekati bahkan di volume yang sangat kecil — dan tidak seperti persentase, ini tidak membesar seiring kesuksesan Anda. Biaya yang jujur adalah item ketiga: sekarang Anda adalah orang yang menyadari kalau node-nya berhenti sync.

Deploy VPS offshore dalam waktu sekitar satu menit

Tanpa KYC, dibayar kripto, semua NVMe. Pilih paket, bayar dengan Monero atau koin besar lainnya, dapatkan root dalam sekitar 60 detik.

Fenrir berjaga