Skip to content

بکاپ و بازگردانی ​

بکاپ تنها چیزی را نگه می‌دارد که دوباره ساخته نمی‌شود: کلیدهای خصوصی اینترفیس‌ها و اطلاعات ورود همه‌ی مشتری‌ها. اگر این‌ها از دست بروند، باید برای همه‌ی مشتری‌ها فایل تازه صادر کنید. باینری، پکیج‌ها و گواهی همه جایگزین‌شدنی‌اند؛ این یکی نه. با آرشیو بکاپ مثل یک فایل رمز رفتار کنید.

داخلش چیست ​

یک فایل .tar.gz که این‌ها را دارد:

  • wui.db: یک نسخه‌ی سازگار از دیتابیس SQLite که با VACUUM INTO گرفته می‌شود، نه کپی خامی که ممکن است وسط نوشتن گرفته شود. فقط در بکاپ پنل‌هایی هست که SQLite دارند. اگر این نسخه گرفته نشود، فایل زنده‌ی دیتابیس به جایش در آرشیو گذاشته نمی‌شود، چون ممکن است تغییراتی را که هنوز در write-ahead log هستند نداشته باشد؛ در این حالت دامپ زیر دیتابیس را با خود می‌برد. بکاپی که هیچ‌کدام از این دو را نداشته باشد نوشته نمی‌شود و خطایش گزارش می‌شود.
  • wui-export.json: همه‌ی جدول‌ها به شکل JSON، که از روی اسکیما نوشته می‌شوند. این فایل در هر بکاپی هست، با هر موتوری. همین نسخه است که بین موتورها و نسخه‌ها جابه‌جا می‌شود: ستونی که پنل جدیدتر اضافه کرده روی مقدار پیش‌فرضش می‌ماند و ستونی که حذف کرده نادیده گرفته می‌شود.
  • بقیه‌ی محتوای /var/lib/wui، مثل PKI و فایل‌های سرور OpenVPN و پروفایل‌های ساخته‌شده. خود بکاپ‌ها، فایل‌های جانبی WAL در SQLite، بازگردانی‌ای که منتظر اعمال است، به‌روزرسانی‌ای که منتظر ابزار به‌روزرسانی است، و keys/ در آرشیو نمی‌آیند.

هیچ چیزی در بکاپ، پنلی را که از آن گرفته شده باز نمی‌کند. کلیدی که نشست‌ها با آن امضا می‌شوند و رمز بکاپ در /var/lib/wui/keys/ هستند، که نه در بکاپ می‌رود و نه با بازگردانی عوض می‌شود. پیش از 3.0 کلید نشست در دیتابیس بود، پس با یک بکاپ می‌شد به‌عنوان مالک وارد پنلش شد. نسخه‌ی 3.0 این کلید را از دیتابیس بیرون می‌برد و کلید تازه‌ای می‌سازد؛ پس هر بکاپی که قبلاً گرفته شده کلیدی دارد که چیزی را باز نمی‌کند. بعد از به‌روزرسانی، همه یک بار دوباره وارد می‌شوند.

رمزنگاری ​

در تنظیمات ← پشتیبان‌گیری یک رمز بکاپ بگذارید تا هر آرشیوی که از آن به بعد گرفته شود با آن رمزنگاری شود. چنین آرشیوی نام ….tar.gz.enc می‌گیرد، بدون رمز خوانده نمی‌شود، و اگر ناقص یا دست‌کاری شده باشد کامل رد می‌شود. رمز در /var/lib/wui/keys/backup.password نگه داشته می‌شود؛ نه در دیتابیس و نه در هیچ بکاپی. آرشیوهایی که پیش‌تر گرفته شده‌اند همان‌طور که بودند می‌مانند.

  • رمز را جای دیگری هم یادداشت کنید. آرشیو رمزنگاری‌شده فقط جایی بازگردانی می‌شود که همان رمز تنظیم شده باشد. روی سرور تازه، اول رمز را بگذارید و بعد آرشیو را آپلود کنید.
  • بدون رمز، آرشیوها .tar.gz ساده‌اند. اگر ربات تلگرام آنها را بفرستد، تا وقتی رمزی گذاشته نشده، هشدارهای امنیتی پنل و توضیح هر آرشیو در چت این را یادآوری می‌کنند.
  • قالب رمزنگاری AES-256-GCM است، در تکه‌های ۶۴ کیلوبایتی که هر کدام به جایگاهش و به آخرین بودن یا نبودنش گره خورده. کلید با scrypt (N=2¹⁵، r=8، p=1) از رمز و یک salt تصادفی برای هر آرشیو ساخته می‌شود.

دو بکاپی که در یک ثانیه گرفته شوند، مثلاً یک بکاپ دستی کنار یک بکاپ زمان‌بندی‌شده، یا کپی ایمنی بازگردانی کنار هر کدام، نام‌های جدا می‌گیرند (…-2.tar.gz) و روی هم نوشته نمی‌شوند.

گرفتن بکاپ ​

کجاچطور
پنلنمای کلی ← بکاپ و بازگردانی ← دانلود بکاپ؛ یا تنظیمات ← پشتیبان‌گیری ← همین حالا پشتیبان بگیر، یا دانلود هر کدام از آرشیوهای فهرست.
زمان‌بندیتنظیمات ← پشتیبان‌گیری: هر چند وقت پشتیبان گرفته شود و نگه‌داری. در /var/backups/wui نوشته می‌شود.
ترمینالمنوی w-ui backup و گزینه‌ی 1، یا wui backup create با محیط پنل، که منو خودش فراهم می‌کند.
تلگرامخودکار، در زمانی که در تنظیمات ← ربات تلگرام ← بکاپ تعیین شده (ربات تلگرام)؛ یا همان لحظه، با دکمه‌ی بکاپ ربات.
حذف نصبپیش از حذف هر چیزی، یک کپی آخر در /root/wui-last-copy-<date>.tar.gz نوشته می‌شود.

بازگردانی ​

بازگردانی هیچ‌وقت روی داده‌های زنده باز نمی‌شود. آرشیو سر تا ته بررسی می‌شود، اول از وضعیت فعلی یک کپی گرفته می‌شود، و فایل‌ها کنار پوشه‌ی داده آماده می‌شوند. راه‌اندازی بعدی پنل آنها را اعمال می‌کند، چون تنها لحظه‌ای است که هیچ چیز دیتابیس را باز ندارد.

  • از پنل: نمای کلی ← بکاپ و بازگردانی ← انتخاب فایل؛ یا تنظیمات ← پشتیبان‌گیری ← بازگردانی روی یکی از آرشیوهای فهرست، یا آپلود آرشیو برای آرشیوی از سرور دیگر. پنل خودش ری‌استارت می‌شود و صفحه وقتی پنل برگشت دوباره بار می‌شود، نه بعد از چند ثانیه‌ی حدسی.
  • از ترمینال: منوی w-ui backup و گزینه‌ی 2، و مسیر فایل را بدهید. یا wui backup restore FILE را اجرا کنید و بعد systemctl restart wui.

راه رسیدن به همین پنل هیچ‌وقت عوض نمی‌شود. پورت، مسیر آدرس، دامنه، فایل‌های گواهی، پراکسی‌های مورد اعتماد و شنونده‌ی جداگانه‌ی سرویس سابسکریپشن از همین سرور نگه داشته می‌شوند، هر چه آرشیو بگوید. قبلاً این‌ها همراه آرشیو برمی‌گشتند. در آن حالت آرشیوی از سرور دیگر، یا از همین سرور پیش از عوض شدن پورت یا مسیر، پنل را روی پورتی می‌برد که فایروال هرگز باز نکرده بود، زیر مسیری که کسی نداشت؛ یا با مسیر گواهی‌ای که روی این سرور وجود ندارد، اصلاً نمی‌گذاشت پنل بالا بیاید.

مشتری‌ها، کلیدها و حساب‌ها از آرشیو می‌آیند: بعد از بازگردانی با مدیر داخل آرشیو وارد می‌شوید.

به‌طور پیش‌فرض، آدرس‌های خود این سرور، یعنی آدرسی که تونل‌ها به مشتری‌ها می‌گویند به آن وصل شوند، به جای آدرس‌های آرشیو نگه داشته می‌شوند. دلیل معمول بازگردانی روی سرور دیگر این است که سرور اول از دست رفته، و آدرسش هم با آن. برای کلون کردن یک سرور روی سرور دیگر با آدرس‌های آرشیو، در خط فرمان از --move-addresses استفاده کنید، یا در پنل آدرس‌های همین سرور حفظ شود را خاموش کنید.

بین موتورها و نسخه‌ها ​

بکاپ ازبازگردانی درچه می‌شود
SQLiteSQLiteفایل دیتابیس سر جایش برمی‌گردد: یک کپی دقیق.
SQLitePostgreSQLدامپ JSON در PostgreSQL بار می‌شود؛ شناسه‌ها حفظ می‌شوند و sequenceها از آنها جلوتر برده می‌شوند.
PostgreSQLPostgreSQLدامپ JSON بار می‌شود.
PostgreSQLSQLiteدامپ JSON در یک فایل SQLite تازه بار می‌شود.
W-UI قدیمی‌ترW-UI جدیدتراول اسکیما به‌روز می‌شود و بعد داده‌ها در آن قرار می‌گیرند.
W-UI جدیدترW-UI قدیمی‌تروقتی قالب دامپ از چیزی که پنل می‌فهمد جدیدتر باشد، با پیامی روشن رد می‌شود. اول پنل را به‌روز کنید.

پس انتخاب دیتابیس موقع نصب نهایی نیست. با SQLite نصب کنید، و وقتی تعداد مشتری‌ها زیاد شد، بکاپ بگیرید، نصب‌کننده را با --db postgres دوباره اجرا کنید و بکاپ را بازگردانی کنید.

جای فایل‌ها ​

مسیرچیست
/var/backups/wui/بکاپ‌های زمان‌بندی‌شده و بکاپ‌های خود پنل، با سقف نگه‌داری. بیرون از پوشه‌ی داده است تا بازگردانی رویشان ننویسد و حذف نصب آنها را نگه دارد.
/var/lib/wui/.restore-pending/بازگردانی آماده‌شده، که در راه‌اندازی بعدی اعمال و حذف می‌شود.
/var/lib/wui/.restore-import.jsonدامپی که منتظر بار شدن است، برای بازگردانی بین موتورها. بعد از بار شدن حذف می‌شود و اگر بار نشود، با پسوند .failed نگه داشته می‌شود.
/root/wui-last-copy-*.tar.gzکپی‌ای که حذف نصب باقی می‌گذارد.

Released under the AGPL-3.0 License.