Skip to content

نصب ​

روی یک سرور تازه، با دسترسی 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 نصب دستی را.

نصب خودکار ​

سه سؤال می‌پرسد و بعد همه‌چیز را خودش نصب می‌کند:

  1. دیتابیس: SQLite یا PostgreSQL؛ همان انتخابی که در نصب دستی هم هست.
  2. دامنه، اگر دامنه‌ای دارید که رکورد DNS آن به همین سرور اشاره می‌کند. برای آن سرتیفیکیت Let's Encrypt گرفته می‌شود. نصاب همان لحظه رکورد را بررسی می‌کند و اگر هنوز به این سرور اشاره نکند، می‌گوید. اگر دامنه ندارید، خالی بگذارید.
  3. بدون دامنه، سرتیفیکیت برای آدرس IP همین سرور گرفته شود؟ پیش‌فرض بله است: Let's Encrypt با اعتبار شش روز که خودکار تمدید می‌شود.

بقیه همان‌طور انتخاب می‌شود که اگر در نصب دستی روی همهٔ سؤال‌ها Enter می‌زدید: پورت آزاد تصادفی، مسیر آدرس تصادفی، نام کاربری و رمز ساخته‌شده برای مدیر، پورت آزاد برای سرویس سابسکریپشن، و همهٔ پروتکل‌ها. در پایان، نصاب آدرس پنل، نام کاربری، رمز، پورت‌ها و مسیر را چاپ می‌کند.

بعد از این سه سؤال چیز دیگری پرسیده نمی‌شود. اگر گرفتن سرتیفیکیت ممکن نباشد، نصاب به‌جای پرسیدن از آن می‌گذرد؛ مثلاً اگر پروژهٔ دیگری روی سرور پورت 80 را گرفته باشد، به آن دست نمی‌زند. در این حالت پنل با HTTP ساده بالا می‌آید تا از منو سرتیفیکیت بگیرید (w-ui ← 20).

نصب دستی ​

همهٔ انتخاب‌ها را به همین ترتیب می‌پرسد و بعد بدون دخالت شما کار می‌کند:

  1. پورت پنل. یک پورت آزاد تصادفی، مگر اینکه خودتان پورتی بدهید. پورتی که برنامهٔ دیگری روی آن گوش می‌دهد پذیرفته نمی‌شود.

  2. پورت سابسکریپشن. همان‌طور پرسیده می‌شود: یک پورت آزاد تصادفی، مگر اینکه خودتان پورتی بدهید؛ پورت خود پنل یا پورتی که برنامهٔ دیگری گرفته پذیرفته نمی‌شود. لینک‌های مشتری‌ها همین پورت را دارند.

  3. مسیر آدرس. یک پیشوند تصادفی ۱۸ حرفی. هر آدرسی بیرون از آن، حتی صفحهٔ ورود، خطای 404 برمی‌گرداند.

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

  5. دیتابیس:

    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

    بکاپ هر کدام در دیگری هم بازگردانی می‌شود، پس این انتخاب همیشگی نیست. بکاپ و بازگردانی را ببینید.

  6. راه رسیدن به پنل:

    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 و هم با دامنه. سرتیفیکیت‌ها را ببینید.

  7. پروتکل‌ها. یک سؤال: همهٔ پروتکل‌ها نصب شوند؟ که پیش‌فرضش بله است. اگر نه بگویید، هر کدام جدا پرسیده می‌شود: 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-tlsHTTP ساده؛ فقط پشت پروکسی یا تونل 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 بخواند.

اجرای دوبارهٔ نصاب ​

اجرای دوبارهٔ نصاب روی سروری که پنل دارد، ارتقا است: پورت، مسیر، مدیر و سرتیفیکیت سر جایشان می‌مانند، باینری عوض می‌شود و سرویس ری‌استارت می‌شود. مشتری‌های وایرگارد قطع نمی‌شوند، چون تونل‌ها در کرنل‌اند، نه در پروسهٔ پنل.

Released under the AGPL-3.0 License.