فارسی
نصب
روی یک سرور تازه، با دسترسی root، این دستور را اجرا کنید:
bash
bash <(curl -Ls https://raw.githubusercontent.com/AbolfazlTafakori/w-ui/main/install.sh)پیشنیازها
| سیستمعامل | اوبونتو 22.04، 24.04 یا 26.04؛ دبیان 12 یا 13؛ AlmaLinux 9؛ Rocky 9؛ Fedora 41. نصب تمیز روی همهٔ اینها در CI هر ریلیز آزموده میشود. |
| معماری | x86-64 یا arm64 |
| کرنل | کرنلی که nft_quota دارد. کرنل استاندارد اوبونتو و دبیان و بیشتر VPSها آن را دارند؛ نصاب خودش بررسی میکند و نتیجه را میگوید. |
| پورتها | پورت پنل (TCP)، یک پورت UDP برای هر اینترفیس وایرگارد، TCP 443 اگر OpenVPN به کار میبرید، و پورت 80 در دسترس برای سرتیفیکیت Let's Encrypt |
نصاب هر چه پروتکلها لازم دارند نصب میکند: nftables و wireguard-tools، AmneziaWG، OpenVPN همراه با easy-rsa، strongSwan و xl2tpd برای L2TP/IPsec و IKEv2، pppd برای PPTP، ocserv برای OpenConnect، xray و sing-box برای خروجیهای پراکسی، و qrencode. هر پروتکل تا وقتی تونلی از آن ساخته نشود خاموش میماند. نصاب همچنین فورواردینگ IPv4 و IPv6 را روشن میکند، کاربر بدون دسترسی wui را میسازد و یک unit سختگیرانهٔ systemd ثبت میکند.
سؤالهای نصاب
اولین سؤال این است که نصب چطور انجام شود:
1) Manual — you choose the port, the URL path, the administrator, the database,
the certificate and what is installed
2) Automatic — three questions (database, domain, certificate); everything else is
chosen and set up for you, and shown at the end ← defaultپرچم --auto بدون پرسیدن نصب خودکار را انتخاب میکند و --manual نصب دستی را.
نصب خودکار
سه سؤال میپرسد و بعد همهچیز را خودش نصب میکند:
- دیتابیس: SQLite یا PostgreSQL؛ همان انتخابی که در نصب دستی هم هست.
- دامنه، اگر دامنهای دارید که رکورد DNS آن به همین سرور اشاره میکند. برای آن سرتیفیکیت Let's Encrypt گرفته میشود. نصاب همان لحظه رکورد را بررسی میکند و اگر هنوز به این سرور اشاره نکند، میگوید. اگر دامنه ندارید، خالی بگذارید.
- بدون دامنه، سرتیفیکیت برای آدرس IP همین سرور گرفته شود؟ پیشفرض بله است: Let's Encrypt با اعتبار شش روز که خودکار تمدید میشود.
بقیه همانطور انتخاب میشود که اگر در نصب دستی روی همهٔ سؤالها Enter میزدید: پورت آزاد تصادفی، مسیر آدرس تصادفی، نام کاربری و رمز ساختهشده برای مدیر، پورت آزاد برای سرویس سابسکریپشن، و همهٔ پروتکلها. در پایان، نصاب آدرس پنل، نام کاربری، رمز، پورتها و مسیر را چاپ میکند.
بعد از این سه سؤال چیز دیگری پرسیده نمیشود. اگر گرفتن سرتیفیکیت ممکن نباشد، نصاب بهجای پرسیدن از آن میگذرد؛ مثلاً اگر پروژهٔ دیگری روی سرور پورت 80 را گرفته باشد، به آن دست نمیزند. در این حالت پنل با HTTP ساده بالا میآید تا از منو سرتیفیکیت بگیرید (w-ui ← 20).
نصب دستی
همهٔ انتخابها را به همین ترتیب میپرسد و بعد بدون دخالت شما کار میکند:
پورت پنل. یک پورت آزاد تصادفی، مگر اینکه خودتان پورتی بدهید. پورتی که برنامهٔ دیگری روی آن گوش میدهد پذیرفته نمیشود.
پورت سابسکریپشن. همانطور پرسیده میشود: یک پورت آزاد تصادفی، مگر اینکه خودتان پورتی بدهید؛ پورت خود پنل یا پورتی که برنامهٔ دیگری گرفته پذیرفته نمیشود. لینکهای مشتریها همین پورت را دارند.
مسیر آدرس. یک پیشوند تصادفی ۱۸ حرفی. هر آدرسی بیرون از آن، حتی صفحهٔ ورود، خطای 404 برمیگرداند.
مدیر پنل. نام کاربری و رمز هر دو ساخته میشوند، مگر اینکه خودتان تعیین کنید.
دیتابیس:
1) SQLite — one file, nothing to install; fine up to a few thousand customers ← default 2) PostgreSQL — for a large number of customers; installed and configured hereبکاپ هر کدام در دیگری هم بازگردانی میشود، پس این انتخاب همیشگی نیست. بکاپ و بازگردانی را ببینید.
راه رسیدن به پنل:
1) Let's Encrypt for Domain (90-day validity, auto-renews) 2) Let's Encrypt for IP Address (6-day validity, auto-renews) ← default 3) Custom SSL Certificate (path to existing files) 4) Skip SSL (advanced — behind reverse proxy / SSH tunnel only)هر کدام را انتخاب کنید، پنل روی یک پورت جواب میدهد؛ هم با آدرس IP و هم با دامنه. سرتیفیکیتها را ببینید.
پروتکلها. یک سؤال: همهٔ پروتکلها نصب شوند؟ که پیشفرضش بله است. اگر نه بگویید، هر کدام جدا پرسیده میشود: OpenVPN، AmneziaWG، L2TP/IPsec، IKEv2، PPTP، OpenConnect، و xray با sing-box. پروتکلی که نصب نشود از دست نمیرود: پنل آن را هنگام ساختن اولین تونل از آن نوع نصب میکند.
پورت سابسکریپشن هرچه باشد، نصاب سرویس سابسکریپشن را روشن میکند و سرتیفیکیت پنل را به آن میدهد تا لینک مشتری از دقیقهٔ اول کار کند. با --port N و --sub-port N هر دو پورت را بدون سؤال تعیین میکنید. اگر بگویید پورت را خودتان میدهید و بعد فقط Enter بزنید، باز هم پورت تصادفی میگیرید، نه یک پیشفرض ثابت مثل 2096.
اگر روی همهٔ سؤالها Enter بزنید، هیچ بخشی از نتیجه قابل حدس نیست: پورت تصادفی، مسیر تصادفی، مدیر تصادفی، رمز ساختهشده، و سرتیفیکیت برای خودِ آدرس سرور.
نصب بدون سؤال
هر جواب یک پرچم هم دارد و --yes سؤالها را کنار میگذارد:
| پرچم | اثر |
|---|---|
--port N | گوش دادن روی پورت N |
--sub-port N | پورت سرویس سابسکریپشن (پیشفرض: تصادفی) |
--db sqlite|postgres | محل نگهداری دادهها (پیشفرض: sqlite) |
--path SEG / --no-path | پیشوند آدرس، یا بدون پیشوند |
--username NAME / --password PASS | مدیر پنل |
--domain NAME | سرتیفیکیت Let's Encrypt برای این دامنه |
--ip-cert [ADDR] | سرتیفیکیت ششروزهٔ Let's Encrypt برای آدرس سرور؛ اگر آدرس ندهید خودش پیدا میکند |
--tls-cert PATH / --tls-key PATH | سرتیفیکیتی که از قبل دارید |
--no-tls | HTTP ساده؛ فقط پشت پروکسی یا تونل SSH |
--local-only | گوش دادن فقط روی 127.0.0.1 |
--no-amnezia / --no-openvpn / --no-l2tp / --no-ikev2 / --no-pptp / --no-openconnect / --no-proxy-cores | پکیجهای آن پروتکل نصب نمیشود؛ پنل آنها را با اولین تونل از آن نوع نصب میکند |
--local PATH | نصب باینریای که خودتان ساختهاید |
--from-source | ساختن آخرین کامیت از سورس؛ اگر Go نباشد نصبش میکند |
--auto / --manual | نصب خودکار (سه سؤال) یا دستی (همهٔ سؤالها)، بدون پرسیدن |
-y, --yes | هیچ سؤالی پرسیده نشود |
متغیرهای محیطی هم کار میکنند: WUI_DOMAIN، WUI_SERVER_IP، WUI_SSL_MODE=ip|domain|none، WUI_ADMIN_USER، WUI_ADMIN_PASSWORD، WUI_SUB_PORT، WUI_DB_DRIVER=sqlite|postgres، WUI_ENABLE_FAIL2BAN=false.
bash
# cloud-init style
WUI_SSL_MODE=ip bash <(curl -Ls https://raw.githubusercontent.com/AbolfazlTafakori/w-ui/main/install.sh) --port 2053 -yپشت nginx یا پروکسی دیگر
در نصب دستی، در سؤال سرتیفیکیت گزینهٔ ۴ را انتخاب کنید و به گوش دادن روی 127.0.0.1 بله بگویید. بعد پروکسی را به http://127.0.0.1:PORT/ وصل کنید و TLS را همانجا تمام کنید. آدرس پروکسی را هم در تنظیمات ← پیکربندی ← CIDRهای پراکسی مورد اعتماد وارد کنید تا پنل آدرس مشتریها را از X-Forwarded-For بخواند.
اجرای دوبارهٔ نصاب
اجرای دوبارهٔ نصاب روی سروری که پنل دارد، ارتقا است: پورت، مسیر، مدیر و سرتیفیکیت سر جایشان میمانند، باینری عوض میشود و سرویس ریاستارت میشود. مشتریهای وایرگارد قطع نمیشوند، چون تونلها در کرنلاند، نه در پروسهٔ پنل.
