هر پردازشگر پرداخت رمزارزیِ میزبانیشده، پیش از آنکه حتی یک ساتوشی برایتان جابهجا کند، همان دو چیز را میپرسد: شما کی هستید، و اجازهٔ نگهداشتن پول حین عبور. هر دو تصمیمهایی هستند که یک نفر دیگر دربارهٔ کسبوکار شما گرفته. BTCPay Server همان کار را — فاکتور، نرخ تبدیل ارز، صفحهٔ پرداخت، وبهوک، پایانهٔ فروش — بهشکل نرمافزاری انجام میدهد که خودتان اجرا میکنید، بدون حساب کاربری، بدون درصد، و بدون اینکه کسی میان کیف پول مشتری و کیف پول شما بایستد.
معامله این است که خودتان اپراتور میشوید. این راهنما دربارهٔ این است که این کار واقعاً چه هزینهای دارد: کدام بخش از استک منابع را میبلعد (خودِ BTCPay نیست)، این سیستم واقعاً به چه پلنی نیاز دارد، چطور در حدود یک ساعت توجه و یک روز انتظار دیپلویش کنید، و — همان بخشی که تعیین میکند آیا اصلاً این ایدهٔ خوبی بوده یا نه — کلیدها وقتی در حال اجراست کجا زندگی میکنند. بیتکوین و Lightning پیشفرضاند؛ Monero یک یکپارچهسازیِ اختیاری است و، همینطور که پیش میآید، همان یکی با تمیزترین داستان کلید از میان این سه. ماشینِ زیرِ همهٔ اینها را میشود با یک آدرس ایمیل اجاره کرد و با همان سکههایی پرداختش کرد که تازه دارید قبولکردنشان را شروع میکنید.
یک پردازشگر خودمیزبانیشده واقعاً چه چیزی را تغییر میدهد
معمولاً ادعای تبلیغاتی «بدون کارمزد» است، که کماهمیتترین بخش ماجراست. چهار چیز تغییر میکند، و فقط یکیشان دربارهٔ پول است:
- هیچکس وجوه شما را حین انتقال نگه نمیدارد. یک پردازشگر میزبانیشده پرداخت مشتری را در کیف پول خودش دریافت میکند و بعداً به حساب شما اعتبار میدهد. همان شکاف است که هولد، بازبینی و فریز در آن اتفاق میافتد. BTCPay هرگز چیزی دریافت نمیکند: مشتری به آدرسی میپردازد که از کلید شما مشتق شده، و سکهها از همان اولین تأیید مال خودتان هستند.
- هیچکس نمیپرسد شما کی هستید. ثبتنام در یک پردازشگر یک فرایند تأیید هویت است که در انتهایش یک بانک ایستاده. نصب یک نرمافزار اینطور نیست. کل تفاوت همین است، و به همین دلیل جواب «چطور بدون KYC رمزارز بگیرم» همیشه همین است: «پردازشگر را خودتان اجرا کنید».
- هزینه دیگر با شما رشد نمیکند. یک درصد برای همیشه گرفته میشود و با موفقیت شما بزرگتر میشود. یک VPS و یک دامنه در یک ماه خوب و یک ماه بد، هزینهٔ یکسانی دارند.
- شما وارث کار عملیاتی میشوید. آپتایم، بهروزرسانیها، پشتیبانگیری، و اینکه خودتان کسی باشید که وقتی مشتری میگوید فاکتورش هرگز تسویه نشد، پیام را دریافت میکند. این هزینهٔ واقعی است، و با توجه پرداخت میشود، نه با پول.
چیزی که بهدست نمیآورید همان یک چیزی است که پردازشگرها واقعاً در آن خوباند: تبدیل سکه به پول حساب بانکی از طرف شما. BTCPay همان چیزی را که با آن پرداخت شده نگه میدارد، در همان سکهای که با آن پرداخت شده. تبدیل ارز، صدور فاکتور به پول فیات، خروجی حسابداریای که یک مرجع مالیاتی قبولش کند — همه مسئلههای جداگانهاند، و بیشتر راههای حلشان دقیقاً همان طرفمقابلِ شناساییشدهای را برمیگردانند که تازه حذفش کرده بودید. پیش از ساختن هر چیزی، مشخص کنید واقعاً کدام نیمهٔ آن معامله را میخواستید.
چه چیزی واقعاً دیپلوی میشود، و کدام بخش گران است
این اسم به شکلی مفید گمراهکننده است. «BTCPay Server» یک برنامه نیست؛ دیپلوی استاندارد آن یک ناوگان کوچک از کانتینرهاست که با هم بالا میآیند، و دانستن اینکه کدامیک کدام است، تفاوت میان اندازهگیری درست این سیستم و حدسزدن دربارهٔ آن است:
- Bitcoin Core. یک نود کامل واقعی که از جنسیس اعتبارسنجی میکند. این همان مؤلفهای است که بیشترین دیسک، بیشتر روز اول، و تقریباً تمام حافظه را از شما میگیرد. هر چیز دیگری در مقایسه تقریباً رایگان است.
- NBXplorer. ایندکسر میان Core و BTCPay. شما کلیدهای عمومی توسعهیافته را در اختیارش میگذارید؛ او آدرسهای مشتقشده را دنبال میکند و وقتی پولی برسد به BTCPay خبر میدهد. همچنین همان قطعهای است که به هرسکردن حساس است، به دلایلی که بخش حالتهای شکست دوباره به آن برمیگردد.
- خودِ BTCPay Server. اپلیکیشن: فروشگاهها، فاکتورها، صفحهٔ پرداخت، پایانهٔ فروش، وبهوکها، Greenfield API. در مقایسه بسیار سبک — چند صد مگابایت حافظه.
- PostgreSQL. فاکتورها، فروشگاهها، تنظیمات، کاربران، کلیدهای API. کوچک، و همان چیزی که پشتیبانگیریهای شما واقعاً برایش هستند.
- nginx بههمراه گواهیهای خودکار. یک پروکسی معکوس بهعلاوهٔ همراهی که برای نام میزبان شما یک گواهی صادر و تمدید میکند. به همین دلیل است که پورتهای 80 و 443 باید واقعاً از اینترنت در دسترس باشند.
- بهصورت اختیاری یک نود Lightning (Core Lightning یا LND) و یک دیمن Monero بههمراه یک RPC کیف پول کنارش — هرکدام زنجیرهٔ خودشان و اشتهای خودشان برای دیسک را میآورند.
پس پرسش اندازهگیری هیچوقت این نیست که «BTCPay باید چقدر بزرگ باشد». پرسش این است که «چقدر از زنجیره را نگه میدارم، و چند زنجیره را». به این پاسخ بدهید و پلن خودش را انتخاب میکند.
اندازهگیری صادقانه، و اینکه کدام پلن مناسب است
این پروژه 2 GB رم بههمراه swap را بهعنوان حداقل، و 4 GB را بهعنوان توصیه مستند کرده، و شکاف میان این دو عدد همان شکاف میان نصبی است که از نظر فنی تمام میشود و نصبی که حاضرید مشتریها را به آن ارجاع دهید. یک رانتایم اپلیکیشن، PostgreSQL و یک bitcoind در حال همگامسازی که 2 GB را با هم شریک شوند، کارشان تمام میشود — اما بهکندی، درحالیکه فایل swap کاری را انجام میدهد که نباید مجبور به انجامش باشد.
دیسک را میزان سختگیری شما در هرسکردن تعیین میکند، و دیپلوی این را بهشکل یک قطعه که به نصبکننده میدهید بیرون میگذارد. این خانواده تقریباً اینطور اجرا میشود: opt-save-storage حدود 100 GB فایل بلاک، -s حدود 50 GB، -xs حدود 25 GB و -xxs حدود 5 GB. آن آخری برای هر چیزی که قرار است دوام بیاورد یک تله است: آنقدر تاریخچهٔ کمی نگه میدارد که نگهداری معمولی شروع به شکستخوردن میکند. برای یک فروشگاه، -s یا -xs بازهٔ معقولی است.
اعداد مشخص از جدول قیمت، چون «بستگی دارد» جوابی نیست:
- فقط بیتکوین، هرسشده، یک فروشگاه — Scout، 2 vCPU / 4 GB / 70 GB NVMe، $9.00/mo. کفِ صادقانه، و جواب درست برای بیشتر خوانندگان.
- بیتکوین و Lightning — Runner، 3 vCPU / 6 GB / 100 GB، $14.00/mo. یک دیمن Lightning روی دیسک سبک است اما اصرار دارد آنلاین بماند؛ فضای اضافه برای نودِ زیرِ آن است.
- بیتکوین، Lightning و Monero — Alpha، 6 vCPU / 12 GB / 200 GB، $28.00/mo. یک زنجیرهٔ هرسشدهٔ Monero بهتنهایی حدود 85 GB است، پس جایی که دو زنجیره و دو ایندکسر دارید 8 GB کم میآورد. Hunter (4 vCPU / 8 GB / 140 GB، $19.00/mo) فقط زمانی جواب میدهد که بیتکوین سختگیرانه هرسشده بماند و همینطور هم بماند.
- یک نود هرسنشده پشتِ فروشگاه — پروژهای دیگر با صورتحسابی دیگر. راهنمای نود کامل آن اعداد را دارد، و از Fenrir شروع میشوند.
CPU فقط یکبار اهمیت دارد. اعتبارسنجی امضا در طول دانلود اولیهٔ بلاکها موازیسازی میشود، پس 2 تا 4 vCPU همگامسازی اول را از چند روز به حدود یک روز میرساند، و بعد دوباره بیکار میماند. پهنای باند هزینهای یکباره برای کل زنجیره است، روی یک پورت 1 Gbps با ترافیک نامحدود و بدون صورتحساب اضافهمصرف در پایان ماه. تأخیر برای یک پردازشگر پرداخت بیاهمیت است، پس مکان را برای حوزهٔ قضایی انتخاب کنید نه برای میلیثانیه — آمستردام، پاریس، بخارست و صوفیه همگی در قیمت پایه قرار دارند.
پیش از شروع به چه چیزی نیاز دارید
یک فهرست کوتاه، که یکی از موردهایش فنی نیست.
- یک دامنه، با یک رکورد A که از قبل به سرور اشاره میکند. گواهی روی HTTP و در برابر همان نام میزبان صادر میشود، پس DNS باید پیش از اجرای نصبکننده حل شود، نه حین آن. یک زیردامنه مثل
pay.example.comشکل معمول این کار است. - پورتهای 80 و 443 باز بهسوی دنیا. پورت 80 اختیاری نیست، حتی با اینکه بعداً هیچ چیز مفیدی رویش سرویس نمیدهد؛ چالش صدور گواهی به آن نیاز دارد.
- Debian 13 از کتابخانهٔ قالبها، روی ماشینی که از قبل همان گذرِ دهدقیقهایِ سختسازی را پشت سر گذاشته. اول این کار را انجام دهید — وقتی یک استک در حال اجراست، انجام مؤدبانهٔ آن خیلی سختتر است.
- کیف پولی که از قبل در اختیار دارید، و کلید عمومی توسعهیافتهٔ آن. Sparrow، Electrum یا یک کیف پول سختافزاری. پیش از نصب آن را دم دست داشته باشید، تا هیچوقت وسوسه نشوید بگذارید سرور یکی برایتان بسازد.
- یک آدرس ایمیل برای مرجع صدور گواهی. فقط هشدارهای انقضا را دریافت میکند و نه چیز دیگری.
- یک تصمیم دربارهٔ هرسکردن، همین حالا گرفتهشده. بعداً تغییر نظر دادن یعنی همگامسازی دوبارهٔ زنجیره از صفر، که روزی است که دوست ندارید دوبار صرفش کنید.
گام به گام
- سرور را دیپلوی کنید، دامنه را به آن اشاره دهید، و اول سختسازیاش کنید
همان پلنی را که بخش اندازهگیری نشانش داد سفارش دهید، Debian 13 را انتخاب کنید، و مکان را بر اساس حوزهٔ قضایی انتخاب کنید نه تأخیر. رکورد DNS را همین حالا بسازید، چون باید تا زمانی که نصبکننده از یک مرجع صدور گواهی میخواهد ثابت کنید مالک این نام هستید، منتشر شده باشد:
pay.example.com. 300 IN A 198.51.100.10بعد همان گذر از راهنمای سختسازی Debian: یک کاربر غیرِ root با یک کلید، احراز هویت با رمز عبور خاموش، بهروزرسانیهای امنیتی خودکار روشن، و یک فایروال پیشفرض-رد. هر چه در ادامه میآید فرض میکند این اتفاق افتاده و اینکه فقط 22، 80 و 443 باز هستند.
apt update && apt full-upgrade -y apt install -y git curlDocker را دستی نصب نکنید. اسکریپت راهاندازی همان نسخهای را که انتظار دارد نصب و پیکربندی میکند، و یک نصبِ دستی رایجترین دلیلی است که یک اجرای اول شکست میخورد.
- مخزن دیپلوی را کلون کنید و قطعههای خودتان را انتخاب کنید
کل دیپلوی یک مخزن از اسکریپتهای شل و قطعههای compose است. آن را بهعنوان root، جایی که یادتان میماند، کلون کنید:
git clone https://github.com/btcpayserver/btcpayserver-docker cd btcpayserver-dockerپیکربندی همان متغیرهای محیطی است که یکبار توسط نصبکننده خوانده و بعد ذخیره میشوند، پس exportهای زیر تمام فایل پیکربندیای است که تا آخر عمر مینویسید:
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مقدارclightning،lnd,phoenixdیا اصلاً هیچچیزی را میگیرد — اگر آماده نگهداشتن وجوه گرم نیستید خالیاش بگذارید، چون بعداً اضافهکردنش فقط یک اجرای دیگر از همان اسکریپت است. نام قطعهها همان بخشی از این ماجراست که میان نسخهها تغییر میکند، پس پیش از پیستکردن، صفحهٔ دیپلوی فعلیِ پروژه را بخوانید. - نصبکننده را اجرا کنید، بعد بگذارید زنجیره همگام شود
یک دستور فایل compose را میسازد، ایمیجها را میکشد و همهچیز را بالا میآورد:
. ./btcpay-setup.sh -iظرف چند دقیقه تمام میشود و یک رابط وب کارآمد از خودش بهجا میگذارد. اما یک فروشگاه کارآمد بهجا نمیگذارد، چون Bitcoin Core همین حالا در حال دانلود و اعتبارسنجی زنجیره است و تا وقتی این کار تمام نشود هیچ پرداختی ممکن نیست. بهجای حدسزدن، تماشایش کنید:
bitcoin-cli.sh -getinfo btcpay-down.sh # stop everything btcpay-up.sh # start everythingعددی که باید بهش اعتماد کنید
verificationprogressاست، و اوایل کار گمراهکننده است: نود درصد اول سریع است و دهدرصد آخر بیشتر زمان را میگیرد، چون بلاکهای تازهتر پر هستند. روی NVMe با دو تا چهار vCPU، تقریباً یک روز انتظار داشته باشید. حین کار کردنش دست به آن نزنید — ریاستارتکردن وسط همگامسازی فقط کش را از دستتان میدهد. - حساب مدیر را بسازید و در را پشت سرتان ببندید
https://pay.example.comرا باز کنید و ثبتنام کنید. اولین حسابی که ساخته شود مدیر میشود، که یعنی فاصلهٔ میان تمامشدن نصبکننده و ثبتنام خودتان تنها لحظهٔ واقعاً خطرناک در کل این فرایند است. همین حالا این کار را انجام دهید، از همان تب مرورگری که از قبل باز دارید.بعد، در تنظیمات سرور، ثبتنام باز را خاموش کنید تا بازدیدکنندهٔ دوم نتواند حساب بسازد، و برای خودتان احراز هویت دوعاملی را فعال کنید. هردو دو کلیک هستند، و با هم تفاوت میان یک پردازشگر پرداختِ خودتان و یک پردازشگر پرداختِ کس دیگری را میسازند. هر مدیر بعدی را صریحاً دعوت کنید.
- کیف پولی را وصل کنید که سرور نتواند از آن خرج کند
یک فروشگاه بسازید، بعد یک کیف پول بیتکوین وصل کنید. BTCPay پیشنهاد میدهد یکی تازه برایتان بسازد؛ آن مسیر دیگر را بروید — وصلکردن یک کیف پول موجود — و کلید عمومیِ توسعهیافتهٔ سطححساب را که از کیف پول خودتان صادر کردهاید پیست کنید:
zpub6r... # account-level extended PUBLIC key (xpub / ypub / zpub), never a prv # Sparrow: wallet settings. Electrum: Wallet -> Information -> Master Public Keyآن رشته از طراحی عمومی است. به BTCPay اجازه میدهد تعداد نامحدودی آدرس دریافت مشتق کند و پرداختهای واردشده به آنها را تشخیص دهد؛ اما به BTCPay، یا هرکسی که آن را آلوده کند، اجازه نمیدهد حتی یک ساتوشی را جابهجا کند. کلید خصوصی همانجایی میماند که بود، ایدهآل روی یک کیف پول سختافزاری که هرگز این ماشین را ندیده.
دو پیامد که ارزش دارد در ذهن بماند. برای فروشگاه از یک حساب تازه یا یک مسیر اشتقاق اختصاصی استفاده کنید، نه از کلید کیف پولی که سالهاست استفاده میکنید — بخش حالتهای شکست توضیح میدهد چرا تاریخچه و هرسکردن با هم جور نیستند. و بهخاطر داشته باشید هرکس آن کلید توسعهیافته را داشته باشد میتواند هر پرداختی را که تا به حال دریافت کردهاید ببیند: نه یک کلید کامل، اما هیچ هم نیست. با آن مثل یک دفتر حساب که روی میز باز مانده رفتار کنید.
- Lightning را اضافه کنید، و تصمیم بگیرید چقدر از پولتان آنجا زندگی کند
اگر
BTCPAYGEN_LIGHTNINGرا زمان نصب تنظیم کرده باشید، نود از قبل در حال اجرا و داخلی وصل است، و تنظیمات فروشگاه فقط لازم است روشنش کنند. اگر خالی گذاشته بودید، متغیر را export کنید و اسکریپت راهاندازی را دوباره اجرا کنید؛ این اسکریپت ایدمپوتنت است و زنجیره را دوباره همگامسازی نمیکند.export BTCPAYGEN_LIGHTNING="clightning" . ./btcpay-setup.sh -iحالا بخشی که یک تصمیم است نه یک پیکربندی. موجودیِ کانالها در کیف پولی نگه داشته میشود که سرور میتواند از آن خرج کند، چون یک کانال پرداخت دقیقاً همین است؛ هیچ Lightning فقطمشاهدهای وجود ندارد. آلودهشدن این سرور دقیقاً همان موجودی کانال را برایتان هزینه میکند و نه چیز دیگری، و به همین دلیل مبلغ درست برای نگهداشتن آنجا همان مبلغی است که از دستدادنش ناراحتتان میکند، نه نابودتان. طبق برنامهای که واقعاً به آن پایبند میمانید، به ذخیرهسازی سرد منتقلش کنید.
انتظار داشته باشید ماه اول بیشتر دربارهٔ نقدینگی باشد تا دربارهٔ پرداختها. یک نود فروشنده به ظرفیت ورودی نیاز دارد، که دقیقاً برعکس چیزی است که باز کردن یک کانال به شما میدهد — باز کردن یک کانال فقط سمت خودتان را تأمین مالی میکند. خرید نقدینگی ورودی از یک سرویس، اجرای یک سواپ زیردریایی (submarine swap) برای هلدادن وجوهتان به سمت دیگر، یا صبر برای اینکه همتاها وقتی حجمی دارید به سمت شما کانال باز کنند، سه گزینهٔ صادقانهاند. Core Lightning و LND هردو کار میکنند؛ Core Lightning کنار یک نود هرسشده راحتتر قابلاستدلال است، به دلایلی که راهنمای نود کامل پوشش میدهد.
- Monero را با یک کیف پول فقطمشاهده اضافه کنید
Monero هم به همان شکل وصل میشود، بهعنوان یک اسلات دومِ رمزارز، که یک دیمن Monero و یک RPC کیف پول را کنار بقیهٔ چیزها بالا میآورد:
export BTCPAYGEN_CRYPTO2="xmr" . ./btcpay-setup.sh -iبرای یک زنجیرهٔ دوم بودجه بگذارید: حدود 85 GB در حالت هرسشده، و یک همگامسازی اول که روی NVMe یکی دو روز طول میکشد. راهنمای نود Monero جزئیات هر دو را دارد.
مدیریت کلید در اینجا بهترین بخش کل این راهاندازی است. Monero توانایی دیدن پرداختهای واردشده را از توانایی خرجکردن آنها جدا میکند، پس شما از آدرس اصلی و کلید مشاهدهٔ خصوصیتان یک کیف پول فقطمشاهده میسازید، و این تنها چیزی است که سرور تا ابد نگه میدارد:
monero-wallet-cli --generate-from-view-key store-viewاین دستور آدرس استاندارد، کلید مشاهدهٔ خصوصی و یک رمز عبور میخواهد. فایلهای کیف پولِ حاصل را در پوشهٔ کیف پول Monero که دیپلوی در معرض میگذارد کپی کنید، فروشگاه را به آن اشاره دهید، و BTCPay برای هر فاکتور یک زیرآدرس میسازد و مراقب پرداختهای واردشده به آن است. کلید خرج هرگز از ماشینی که رویش ساختهاید خارج نمیشود.
یک نکته برای طراحیکردن پرداخت دور آن: خروجیهای دریافتی برای ده بلاک قفلاند، تقریباً بیست دقیقه، پس BTCPay خیلی پیش از آنکه قابلخرج شود میبیند پرداختی رسیده. برای کالای دیجیتال این یک انتخاب سیاستی است. برای هرچیزی که حضوری تحویل داده میشود، یک صف است.
- مثل یک مشتری تستش کنید، بعد مثل یک اپراتور
«صفحه بالا میآید» یک تست نیست. برای یک مبلغ ناچیز یک فاکتور بسازید، آن را از یک کیف پول واقعی پرداخت کنید، بعد تنظیماتی را که مشخص میکنند وقتی پرداخت کامل نیست چه اتفاقی میافتد، یکییکی مرور کنید:
- سیاست تأیید. چند بلاک پیش از آنکه یک فاکتور تسویهشده حساب شود. صفر تأیید برای یک قهوه معقول است و برای یک لپتاپ اشتباه؛ این یک تنظیم بهازای هر فروشگاه است و پراهمیتترین عدد در کل رابط کاربری.
- انقضای فاکتور. مشتری چقدر وقت دارد پیش از آنکه نرخ نقلشده دیگر اعمال نشود. پانزده دقیقه پیشفرض است و برای هرکسی که از یک برداشت صرافی پرداخت میکند کوتاه است.
- میزان تحمل پرداخت. درصدی از کمپرداختی که میپذیرید بهجای اینکه مشتری را با یک فاکتور نیمهپرداختشده و یک تیکت پشتیبانی رها کنید. کم و غیرصفر، تنظیم عملی است.
- کمپرداخت و بیشپرداخت. یکبار، عمداً یک فاکتور را کمتر پرداخت کنید و ببینید فروشگاهتان با آن چه میکند. خیلی بهتر است این را با پول خودتان یاد بگیرید.
بعد نیمهٔ اپراتور: یک وبهوک را فعال کنید و مطمئن شوید فروشگاهتان واقعاً دریافتش میکند، اگر قرار است چیزی بهصورت برنامهنویسیشده فاکتور بسازد یک کلید Greenfield API بسازید، و پیش از رفتن به حالت زنده یک پشتیبان کامل بگیرید — تا اولین باری که بازیابی انجام میدهید یک تمرین باشد، نه یک وضعیت اضطراری.
کلیدها کجا زندگی میکنند، و تنها اشتباهی که اهمیت دارد
تقریباً هر نتیجهٔ بدی که با یک پردازشگر خودمیزبانیشده رخ میدهد، به یک تصمیم میرسد که زود و بیدقت گرفته شده: اجازهدادن به سرور برای نگهداشتن چیزی که بتواند خرج کند. ارزش دارد این سه حالت را صریح بیان کنیم، چون واقعاً با هم فرق دارند.
- بیتکوینِ آنچین: همیشه فقطمشاهده. BTCPay فقط یک کلید عمومی توسعهیافته نگه میدارد و نه چیز دیگری. اگر سرور آلوده شود، مهاجم میفهمد چه پرداختی به شما شده و میتواند مقصد فاکتورهای آینده را عوض کند — یک حملهٔ واقعی، و دلیلی برای بازبینی کیف پول فروشگاهتان بعد از هر حادثه — اما نمیتواند به سکهای که از قبل دریافت شده دست بزند.
- Lightning: طبق تعریف گرم. کانالها با سکههایی تأمین مالی میشوند که سرور میتواند خرجشان کند، چون یک کانال دقیقاً همین است. این همان استثنای عامدانه است، و بخش بالاتر اندازهاش را مشخص کرد.
- Monero: از نظر ساختاری، فقطمشاهده. کلید مشاهدهٔ خصوصی هر پرداخت واردشده را نشان میدهد و هیچکدامشان را مجاز به خرجشدن نمیکند. در سمت بیتکوین معادلی برای این وجود ندارد.
تنها قابلیتی که این مدل را عمداً میشکند Payjoin است. این قابلیت به سرور شما اجازه میدهد یک ورودی به تراکنش مشتری اضافه کند، که تا حد قابلتوجهی همان اکتشافیِ «ورودی مشترک» را که تحلیل زنجیره به آن تکیه دارد ضعیف میکند و برای هر دو طرف یک دستاورد واقعی در حریم خصوصی است — اما گیرنده باید بتواند امضا کند، پس به یک کیف پول گرم داخل BTCPay نیاز دارد. این یک معاملهٔ واقعی است، نه یک قابلیت مجانی. آگاهانه آن را انتخاب کنید، و همانطور که کیف پول Lightning را تأمین مالی میکنید تأمینش کنید: با یک مبلغ مشخص، نه با همهچیز.
و اگر گذاشتید ویزارد راهاندازی کیف پول فروشگاه را بسازد چون سریعترین راه بود: سیدی را که نشانتان داد یادداشت کنید، در یک کیف پول آفلاین تأییدش کنید، بعد برای مهاجرت به یک برپایی فقطمشاهده برنامه بریزید. سیدی که حتی یکبار روی سروری رو به اینترنت بوده، سیدی است که رویش شمارش معکوس در حال اجراست.
پشتیبانگیری، و بخشهایی که واقعاً غیرقابلجایگزیناند
وضعیت را بر اساس اینکه بازسازیاش چقدر هزینه دارد دستهبندی کنید، چون جوابها خیلی با هم فرق دارند:
- زنجیره. مسئلهٔ پشتیبانگیری نیست. دادهای عمومی است و دوباره همگام میشود، بهآرامی و رایگان. هرگز از آن پشتیبان نگیرید.
- پایگاه داده. فاکتورها، فروشگاهها، تنظیمات، کاربران، کلیدهای API. این همان پشتیبان واقعی است، کوچک است، و از دستدادنش هزینهاش سند حسابداریِ هر فروش است — نه پول، بلکه کاغذبازیاش.
- کیف پول آنچین شما. از قبل امن است، چون کلید هرگز اینجا نبوده. این همان دستاورد مرحلهٔ پنج است.
- وضعیت کانال Lightning. همان چیزی که نیش میزند. یک پشتیبان ایستای کانال به شما اجازه میدهد بعد از یک نابودی کامل، وجوه داخل کانالهایتان را با بستنِ اجباری آنها پس بگیرید؛ کانالها را بازیابی نمیکند، و اگر کهنه باشد بیارزش است. هر بار که کانالی باز یا بسته میشود تغییر میکند، پس جایش در یک کپیِ خودکار در جایی خارج از سایت است، نه پوشهای که هر سه ماه یکبار یادتان میافتد.
- کیف پول فقطمشاهدهٔ Monero. از روی آدرس و کلید مشاهدهای که هنوز آفلاین نگه داشتهاید، دوباره قابلساخت است. از آنها پشتیبان بگیرید و با فایلهای کیف پول مثل یک کش رفتار کنید.
دیپلوی ابزارهای کمکیای عرضه میکند که این کار را درست انجام میدهند:
btcpay-backup.sh # stops the stack, dumps Postgres, tars the config, restarts
btcpay-restore.sh # puts one of those archives backهمان مکث دقیقاً همان نکته است — یک کپیِ گرم از یک پایگاه دادهٔ در حال اجرا میتواند به چیزی جالب بازیابی شود. هرچه از ماشین خارج میشود را رمزگذاری کنید، و بهخاطر داشته باشید که اسنپشات هفتگیِ همراه هر پلن یک امکانِ رفاهی است نه یک پشتیبان: یک اسنپشات کنار همان چیزی زندگی میکند که از آن محافظت میکند.
حالتهای شکستی که آموزشهای سریع از قلم میاندازند
تقریباً به همان ترتیبی که بیشتر باعث از دسترفتن یک غروب کسی میشوند:
- گواهی هرگز صادر نمیشود. نه از ده بار، رکورد A بعد از اجرای نصبکننده ساخته شده، یا پورت 80 فیلتر است. DNS را درست کنید، تأیید کنید که نام از جایی غیر از لپتاپ خودتان حل میشود، بعد اسکریپت راهاندازی را دوباره اجرا کنید. تلاش کورکورانه در برابر مرجع صدور گواهی یک محدودیت نرخ و یک هفته انتظار نصیبتان میکند، پس میان تلاشها چیزی را عوض کنید.
- یک کلید توسعهیافتهٔ واردشده با تاریخچه، هیچ موجودیای نشان نمیدهد. این همان تلهٔ هرسکردن است. ایندکسر با دیدن بلاکهای تازه پرداختهای جدید را پیدا میکند، اما بازسازی گذشتهٔ یک کیف پول موجود یعنی خواندن بلاکهایی که یک نود هرسشده حذفشان کرده. از یک حساب تازه برای فروشگاه استفاده کنید تا این مشکل اصلاً وجود نداشته باشد؛ اگر مجبورید تاریخچه را وارد کنید، به یک نود هرسنشده و یک اسکن مجدد نیاز دارید.
- «مشتری پرداخت کرده و فاکتور هنوز باز است.» معمولاً کمپرداختی بهخاطر کارمزد کیف پول فرستنده، فاکتوری که تا زمانی که پرداخت بدون تأیید مانده منقضی شده، یا سیاست تأییدی سختگیرانهتر از چیزی که یادتان است انتخاب کرده بودید. هر سهتا تنظیمات هستند، و هر سه دلیل ایناند که چرا اول با پول خودتان تست میکنید.
- نود بیسروصدا عقب میافتد. یک bitcoind گیرکرده بدون هیچ شکایتی آدرس تحویل میدهد و پرداختها را از دست میدهد. ارتفاع بلاک خودتان را طبق یک زمانبندی با هر منبع عمومی مقایسه کنید و روی شکاف هشدار بگذارید؛ این چیزی نیست که باید از یک مشتری یاد بگیرید.
- یک بهروزرسانی در لحظهٔ اشتباه.
btcpay-update.shخوشرفتار است، اما همهچیز را ریاستارت میکند. آن را عامدانه اجرا کنید، هرگز خودکار نه، و هرگز حین یک فروش. - آدرس یک اعتبار پیدا میکند. یک صفحهٔ پرداخت روی یک IPv4 که در فهرست مسدودی نشسته، صفحهای است که برخی شبکههای سازمانی و فیلترهای ایمیل بیسروصدا ردش میکنند. هر پلن اینجا یک آدرس اختصاصی بدون سابقه عرضه میکند، و پیش از اینکه دامنه را روی هر چیزی چاپ کنید ارزش دارد آن را بررسی کنید.
حوزهٔ قضایی، دامنه، و چیزی که خودمیزبانی پنهانش نمیکند
این نرمافزار یک طرف مقابل را حذف میکند. بقیهٔ سطح را حذف نمیکند، و صادقبودن دربارهٔ این موضوع از یک فهرست ویژگیِ دیگر مفیدتر است.
دامنه نقطهٔ ضعف است. جایی ثبت شده، بهصورت عمومی حل میشود، و اولین چیزی است که هرکسی نگاهش میکند. پردازشگری که آن را روی نام میزبانیِ ثبتشده به نام خودتان، نزد یک ریجیسترار در کشور خودتان، خودمیزبانی کرده باشید، پول را از دست یک شخص ثالث بیرون آورده اما هویت را دقیقاً همانجا که بود رها کرده است. اگر این برای چیزی که میفروشید اهمیت دارد، ریجیسترار دستکم به همان اندازهٔ میزبان ارزش فکرکردن دارد.
حوزهٔ قضایی یک متغیر واقعی است. اینکه ماشین کجا قرار دارد تعیین میکند حکم کدام دادگاه به آن میرسد و چقدر فرایند سر راه است. این اصطکاک و فاصله است، نه مصونیت — نکتهای که مدخل میزبانی آفشور با تفصیل بیانش میکند، و ارزش خواندن دارد پیش از اینکه پرچمی را به یک شبکه ترجیح دهید.
حساب کاربری آخرین حلقهٔ زنجیر است. اجارهٔ سرور با یک آدرس ایمیل و پرداخت با Monero یعنی هیچ صورتحساب کارتی صفحهٔ پرداخت را به یک بانک وصل نمیکند — چیز عجیبی که باید نادیده گرفت وقتی کل هدف سیستمی که میسازید نداشتن دقیقاً همین است. هر پلن اینجا بهطور پیشفرض no-KYC است، و هر مکان یک IPv4 تمیز اختصاصی بههمراه rDNS سفارشی عرضه میکند.
و مرز، بیانشده است نه ضمنی. نودها، پردازشگرها و فروشگاهها زیرساخت معمولیاند و اینجا خوشآمد گفته میشوند؛ سیاست استفادهٔ مجاز کوتاه و عمومی است و یک کف زیرش دارد. اینکه آیا شما برای گرفتن پرداخت به مجوز نیاز دارید، پرسشی است دربارهٔ چیزی که میفروشید و کجا هستید، نه دربارهٔ نرمافزار — و این پرسشی است برای یک فرد صلاحیتدار، نه برای یک راهنمای میزبانی.
پرسشهای متداول
برای BTCPay Server به کدام پلن VPS نیاز دارم؟
Scout (2 vCPU / 4 GB / 70 GB NVMe، $9.00/mo) در حال اجرای یک نود بیتکوینِ هرسشده، کفِ صادقانه برای یک فروشگاه کارآمد است، و همان چیزی است که بیشتر خوانندهها باید بخرند. Lightning را اضافه کنید و Runner (3 vCPU / 6 GB / 100 GB، $14.00/mo) راحتتر میشود؛ Monero را هم بهعنوان زنجیرهٔ دوم اضافه کنید و Alpha (6 vCPU / 12 GB / 200 GB، $28.00/mo) همان اندازهای است که دیگر لازم نیست نگرانش باشید. این پروژه 2 GB را بهعنوان حداقل خودش مستند کرده، که درست است اما دلپذیر نیست.
آیا میتوانم BTCPay Server را بدون یک نود کامل بیتکوین اجرا کنم؟
بله، اما دارید انتخاب میکنید کدام اعتماد را نگه دارید. BTCPay میتواند به یک نود بیرونی که از قبل اجرا میکنید اشاره کند — نسخهٔ معقول این کار، و دلیلی خوب برای اینکه اول راهنمای نود کامل را دنبال کرده باشید — یا به نود شخص دیگری، که دوباره یک شخص ثالث را وارد میکند که هر آدرسی را که فروشگاهتان میسازد میبیند. نودِ همراه وجود دارد چون تنها پیکربندیای است که در آن هیچکس تماشا نمیکند. یک نود هرسشده همچنان یک نود کامل است: هرسش کنید و بیشتر ایراد منابع از بین میرود.
آیا BTCPay Server از Monero پشتیبانی میکند؟
بله، بهعنوان یک یکپارچهسازیِ اختیاری که زمان دیپلوی فعالش میکنید. یک دیمن Monero و یک RPC کیف پول را بالا میآورد، و آن را با یک کیف پول فقطمشاهده ساختهشده از آدرس اصلی و کلید مشاهدهٔ خصوصیتان وصل میکنید — پس سرور میتواند پرداختها را ببیند و نمیتواند خرجشان کند، که ترتیبی بهتر از هرچیزی است که در سمت بیتکوین موجود است. هزینهها یک زنجیرهٔ دوم برای همگامسازی و ذخیره، و قفل دهبلاکی روی خروجیهای دریافتی است، تقریباً بیست دقیقه پیش از آنکه وجوه قابلخرج شوند.
آیا اجرای پردازشگر پرداخت شخصی خودم قانونی است؟
اجرای این نرمافزار یک عملیات نرمافزاری معمولی است. فعالیتِ تحت نظارت در بیشتر جاها نگهداشتن یا جابهجاکردن پول از طرف دیگران است، و یک پردازشگر غیرنگهبانی که برای کالای خودتان پرداخت میگیرد دقیقاً این کار را نمیکند، چون هیچوقت چیزی از طرف کسی نگه داشته نمیشود. اینکه چه میفروشید و کجا زندگی میکنید همچنان تعهدات شما را تعیین میکند، از جمله مالیات، و خودمیزبانی هیچکدامشان را عوض نمیکند. این یک راهنمای میزبانی است، نه مشاورهٔ حقوقی: اگر قصد دارید برای اشخاص ثالث پردازش کنید، فرض کنید در دستهای دیگر هستید و از یک فرد صلاحیتدار بپرسید.
اگر سرور از کار بیفتد، پولم را از دست میدهم؟
پول آنچین را نه، به شرطی که مرحلهٔ پنج را دنبال کرده باشید — آن سکهها در کیف پولی نشستهاند که کلیدش هرگز روی سرور نبوده، و یک نصب تازه که همان کلید عمومی توسعهیافته را به آن بدهید دوباره میبیندشان. چیزی که از دست میدهید سابقه است: فاکتورها، تنظیمات فروشگاه، کلیدهای API، مگر اینکه پشتیبان پایگاه داده را نگه داشته باشید. Lightning استثناست، چون وجوه کانال روی سرور هستند؛ بازیابیشان بعد از یک نابودی کامل به یک پشتیبان ایستای کانالِ بهروز نیاز دارد، و آن پشتیبان کانالهایتان را بهزور میبندد نه اینکه بازیابیشان کند.
آیا برای BTCPay Server به یک نام دامنه نیاز دارم؟
در عمل بله. دیپلوی برای یک نام میزبان گواهی صادر میکند، مرورگرها و کیف پولها روی یک صفحهٔ پرداخت انتظار HTTPS دارند، و از مشتریها خواسته میشود پول را به هر چیزی که در نوار آدرس است بفرستند. یک زیردامنه از چیزی که از قبل مالکش هستید کافی است. اگر خودِ داشتن یک دامنهٔ عمومی مشکل است، بهجایش میشود BTCPay را از طریق یک سرویس onion به آن رسید — یک پیکربندی مشروع که تعداد مشتریهایی که میتوانند به صفحه برسند را هم تغییر میدهد.
خودمیزبانی واقعاً هر ماه چقدر هزینه دارد؟
این نرمافزار رایگان و دارای مجوز AGPL است، پس صورتحساب همان VPS، دامنه و زمان خودتان است. با $9.00 در ماه برای Scout و چند دلار در سال برای یک نام، محاسبه در برابر هر پردازشگر درصدمحور، در حجمهای خیلی کوچک هم دیگر نزدیک نمیماند — و برخلاف یک درصد، وقتی موفق میشوید بزرگتر نمیشود. هزینهٔ صادقانه همان مورد سوم است: حالا شما همان کسی هستید که متوجه میشود نود کِی از همگامسازی میایستد.

