mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-07-08 21:56:08 +00:00
9b91f0f42e
Fold the standalone 3x-ui-docs project (Next.js 16 + Fumadocs, deployed to docs.sanaei.dev) into docs/ so the panel and its documentation share a single source of truth, the way sing-box keeps its docs in-tree. The old repo becomes redundant and can be retired. - Import the full site under docs/ (app, components, content, lib, public, scripts, config). The self-contained pnpm project sits alongside the existing engineering notes with no filename collisions. - Re-point "Edit on GitHub" links from MHSanaei/3x-ui-docs to this repo's docs/content/docs path (docs/lib/shared.ts, docs/app/.../page.tsx). - Add docs-ci.yml and docs-deploy.yml under .github/workflows/, scoped to docs/** and run with working-directory: docs, since GitHub only runs workflows from the repo-root .github/. deploy-static.yml's GitHub Pages publish (CNAME docs.sanaei.dev) carries over unchanged. Follow-up (outside this commit): attach the docs.sanaei.dev custom domain to this repository's Pages (or set the Vercel project's root directory to docs), confirm the site is live from the monorepo, then delete MHSanaei/3x-ui-docs.
180 lines
10 KiB
Plaintext
180 lines
10 KiB
Plaintext
---
|
|
title: گواهیهای SSL
|
|
description: دریافت و تمدید گواهیهای TLS برای پنل و ورودیهای 3x-ui — با منوی ACME در x-ui (دامنه یا IP خام)، گواهی wildcard از طریق Cloudflare DNS-01، یا Certbot دستی.
|
|
icon: ShieldCheck
|
|
---
|
|
|
|
یک گواهی TLS به شما امکان میدهد **پنل** را روی HTTPS سرویسدهی کنید (تا ترافیک ورود و
|
|
API شما رمزگذاری شود) و TLS را روی **ورودیها** خاتمه دهید (VLESS-TLS، Trojan،
|
|
Shadowsocks-TLS و موارد مشابه). سه راه برای بهدستآوردن گواهی وجود دارد:
|
|
|
|
- **منوی `x-ui`** — کلاینت داخلی [ACME](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment).
|
|
آسانترین گزینه برای یک دامنهی واحد یا یک IP خام.
|
|
- **Cloudflare DNS-01** — این هم از همان منو؛ برای گواهیهای **wildcard** یا
|
|
زمانی که پورت 80 مسدود است / سرور پشت پراکسی Cloudflare قرار دارد لازم است.
|
|
- **Certbot دستی** — اگر ترجیح میدهید `acme.sh`/Certbot را خودتان مدیریت کنید.
|
|
|
|
<Callout type="info">
|
|
اگر پنل را پشت Nginx یا Caddy قرار میدهید، بگذارید پراکسی بهجای شما گواهی را
|
|
مدیریت کند — به [پراکسی معکوس](/docs/operations/reverse-proxy) مراجعه کنید.
|
|
ورودیهای [REALITY](/docs/config/reality) **هیچ** گواهیای نیاز ندارند؛ آنها
|
|
TLS یک سایت واقعی را قرض میگیرند. این صفحه برای پنل و برای ورودیهای کلاسیک TLS است.
|
|
</Callout>
|
|
|
|
## منوی SSL در `x-ui` (Let's Encrypt)
|
|
|
|
`x-ui` را اجرا کنید و **`20` — SSL Certificate Management** را انتخاب کنید. این گزینه
|
|
[acme.sh](https://github.com/acmesh-official/acme.sh) را به کار میگیرد و موارد زیر را ارائه میدهد:
|
|
|
|
| گزینه | کاری که انجام میدهد |
|
|
| ------------------------------ | ------------------------------------------------------------------- |
|
|
| Get SSL (Domain) | صدور گواهی برای یک دامنه از طریق اعتبارسنجی HTTP. |
|
|
| Get SSL for IP Address | صدور یک گواهی کوتاهمدت (۶ روزه، با تمدید خودکار) برای یک **IP خام**. |
|
|
| Revoke | باطلکردن یک گواهی موجود. |
|
|
| Force Renew | تمدید همین حالا، پیش از انقضا. |
|
|
| Show Existing Domains | فهرستکردن گواهیهایی که از پیش روی سرور هستند. |
|
|
| Set Cert paths for the panel | اشارهدادن TLS پنل به یک گواهی صادرشده (فیلدها را برای شما تنظیم میکند). |
|
|
|
|
### صدور گواهی برای یک دامنه
|
|
|
|
<Steps>
|
|
|
|
<Step>
|
|
### دامنه را به سرور اشاره دهید
|
|
|
|
یک رکورد `A` (و/یا `AAAA`) برای دامنهی خود بسازید که به IP عمومی این سرور
|
|
اشاره کند. تا زمانی که DNS منتشر (propagate) نشده باشد، اعتبارسنجی ناموفق خواهد بود.
|
|
</Step>
|
|
|
|
<Step>
|
|
### پورت 80 را آزاد کنید
|
|
|
|
اعتبارسنجی HTTP نیاز دارد که **پورت 80** از اینترنت در دسترس باشد و از پیش در حال
|
|
استفاده نباشد. هر چیزی را که به آن متصل است برای این مدت متوقف کنید و آن را از
|
|
[فایروال](/docs/reference/ports-firewall) عبور دهید.
|
|
</Step>
|
|
|
|
<Step>
|
|
### صادرکننده را اجرا کنید
|
|
|
|
`x-ui` ← `20` ← **Get SSL (Domain)**، سپس دامنه را وارد کنید. acme.sh گواهی را
|
|
درخواست میکند و آن را زیر `/root/cert/<domain>/` بهصورت `fullchain.pem`
|
|
(زنجیرهی گواهی) و `privkey.pem` (کلید خصوصی) ذخیره میکند.
|
|
</Step>
|
|
|
|
<Step>
|
|
### آن را به پنل متصل کنید
|
|
|
|
گزینهی **Set Cert paths for the panel** را انتخاب کنید تا `webCertFile` و
|
|
`webKeyFile` پر شوند و پنل راهاندازی مجدد شود، یا آنها را خودتان در
|
|
[تنظیمات پنل](/docs/config/panel#tls) تنظیم کنید. بهمحض تنظیمشدن هر دو، پنل HTTPS را
|
|
سرویسدهی میکند.
|
|
</Step>
|
|
|
|
</Steps>
|
|
|
|
### صدور گواهی برای یک IP خام
|
|
|
|
دامنهای ندارید؟ گزینهی **Get SSL for IP Address** را انتخاب کنید تا یک گواهی
|
|
کوتاهمدت (با اعتبار حدود ۶ روز، که بهصورت خودکار تمدید میشود) متصل به IP سرور
|
|
بهدست آورید. برای دسترسی به پنل روی HTTPS پیش از آنکه دامنهای راهاندازی کنید مفید است.
|
|
|
|
## Cloudflare (گواهی wildcard با DNS-01)
|
|
|
|
اعتبارسنجی DNS بهجای پاسخدادن روی پورت 80، با ساختن یک رکورد TXT ثابت میکند که شما
|
|
دامنه را در اختیار دارید — بنابراین **پشت پراکسی Cloudflare**، روی سرورهایی که
|
|
پورت 80 در آنها مسدود است، و برای گواهیهای **wildcard** (`*.example.com`) کار میکند.
|
|
|
|
DNS دامنهی شما باید توسط Cloudflare مدیریت شود و به یکی از این موارد نیاز دارید:
|
|
|
|
- یک **توکن API محدودشده** با مجوز `Zone:DNS:Edit` (توصیهشده)، یا
|
|
- **ایمیل حساب + Global API Key**.
|
|
|
|
<Steps>
|
|
|
|
<Step>
|
|
### یک توکن API محدودشده بسازید
|
|
|
|
در داشبورد Cloudflare به **My Profile → API Tokens →
|
|
[Create Token](https://dash.cloudflare.com/profile/api-tokens)** بروید، قالب
|
|
**Edit zone DNS** را انتخاب کنید، آن را به zoneای که برایش گواهی صادر میکنید محدود
|
|
کنید و آن را بسازید. توکن را کپی کنید — فقط یکبار نمایش داده میشود.
|
|
</Step>
|
|
|
|
<Step>
|
|
### صادرکنندهی Cloudflare را اجرا کنید
|
|
|
|
`x-ui` ← **`21` — Cloudflare SSL Certificate**. هنگام پرسش، **`t`** را برای یک
|
|
توکن API (پیشفرض) یا **`g`** را برای Global API Key انتخاب کنید، سپس دامنهی خود را
|
|
وارد کنید (و برای Global API Key، ایمیل حساب و کلید خود را). acme.sh رکورد TXT را
|
|
میسازد، اعتبارسنجی میکند و آن را پاکسازی میکند.
|
|
</Step>
|
|
|
|
<Step>
|
|
### پنل را به آن اشاره دهید
|
|
|
|
مانند جریان دامنه، از **Set Cert paths for the panel** (منوی `20`) استفاده کنید یا
|
|
`webCertFile` / `webKeyFile` را در [تنظیمات پنل](/docs/config/panel#tls) تنظیم کنید.
|
|
</Step>
|
|
|
|
</Steps>
|
|
|
|
<Callout type="info">
|
|
یک توکن محدودشده را به Global API Key ترجیح دهید — آن فقط اجازهی ویرایش DNS را روی
|
|
zoneای که انتخاب میکنید میدهد، بنابراین نشت آن نمیتواند به بقیهی حساب Cloudflare شما دست بزند.
|
|
</Callout>
|
|
|
|
## دستی (Certbot)
|
|
|
|
اگر ترجیح میدهید از منو استفاده نکنید، یک گواهی را با افزونهی standalone مربوط به
|
|
Certbot صادر کنید (این هم نیاز دارد که پورت 80 آزاد باشد و دامنه به سرور اشاره کند):
|
|
|
|
```bash
|
|
apt-get install certbot -y
|
|
certbot certonly --standalone --agree-tos --register-unsafely-without-email -d yourdomain.com
|
|
certbot renew --dry-run
|
|
```
|
|
|
|
Certbot گواهی را در `/etc/letsencrypt/live/yourdomain.com/` مینویسد
|
|
(`fullchain.pem` و `privkey.pem`). پنل را در [تنظیمات پنل](/docs/config/panel#tls) به آن
|
|
دو فایل اشاره دهید و تمدید را راهاندازی کنید — `certbot renew` بهصورت پیشفرض روی یک
|
|
تایمر systemd اجرا میشود.
|
|
|
|
## استفاده از گواهی
|
|
|
|
- **پنل** — `webCertFile` (زنجیرهی کامل) و `webKeyFile` (کلید خصوصی) را در
|
|
[تنظیمات پنل](/docs/config/panel#tls) تنظیم کنید. برای آنکه پنل به HTTPS سوئیچ کند،
|
|
هر دو باید تنظیم شوند. گزینهی منوی **`11` — View Current Settings** مسیرهای
|
|
درحالاستفادهی فعلی را چاپ میکند.
|
|
- **ورودیها** — وقتی TLS را روی یک ورودی فعال میکنید، در تنظیمات TLS همان ورودی به
|
|
همان فایلهای گواهی و کلید ارجاع دهید (یا محتوای آنها را جایگذاری کنید). به
|
|
[ورودیها](/docs/config/inbounds) و [ترابریها](/docs/config/transports) مراجعه کنید.
|
|
|
|
<Callout type="warn">
|
|
گواهیها منقضی میشوند (Let's Encrypt: ۹۰ روز؛ گواهیهای IP: حدود ۶ روز). هم منو و هم
|
|
Certbot بهصورت خودکار تمدید میکنند، اما پنل همچنان **فایلها** را در مسیرهای ثابتشان
|
|
میخواند — بنابراین **در همان محل** تمدید کنید نه با جابهجاکردن فایلها، و پنل در
|
|
راهاندازی مجدد بعدیاش گواهی جدید را برمیدارد. **Force Renew** (منوی `20`) یک تمدید
|
|
را بهصورت درخواستی فعال میکند.
|
|
</Callout>
|
|
|
|
## گامهای بعدی
|
|
|
|
<Cards>
|
|
<Card
|
|
title="تنظیمات پنل"
|
|
href="/docs/config/panel#tls"
|
|
description="webCertFile / webKeyFile و بقیهی تنظیمات وبسرور."
|
|
/>
|
|
<Card
|
|
title="پراکسی معکوس"
|
|
href="/docs/operations/reverse-proxy"
|
|
description="بهجای آن، بگذارید Nginx یا Caddy کار خاتمهدادن TLS را برایتان انجام دهد."
|
|
/>
|
|
<Card
|
|
title="REALITY"
|
|
href="/docs/config/reality"
|
|
description="TLS مخفیانه برای ورودیها — بدون نیاز به گواهی."
|
|
/>
|
|
</Cards>
|