Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Telegram

🛰️ Avaco Railway Relay

یک ریلی سبک و رایگان برای پروتکل XHTTP روی Railway

A lightweight free relay for the XHTTP protocol on Railway

Node.js Railway License Zero Dependencies Free Tier


🌐 زبان / Language

🇮🇷 فارسی  |  🇬🇧 English



🇮🇷 فارسی

[ معرفیمعماریدیپلویمتغیرهاباگ‌گیریمدیریتلایسنس ]


📖 معرفی

یک پروکسی معکوس سبک‌وزن بر پایه Node.js خالص (بدون هیچ dependency) که روی پلتفرم Railway (پلن رایگان) اجرا می‌شه و ترافیک XHTTP رو از یه آدرس عمومی به سرور پشتی شما منتقل می‌کنه.

✨ ویژگی‌ها

ویژگی توضیح
🪶 سبک‌وزن بدون هیچ dependency خارجی، فقط Node.js استاندارد
🔐 احراز هویت پشتیبانی از کلید امنیتی x-relay-key
🚦 کنترل ترافیک محدودیت درخواست‌های همزمان با MAX_INFLIGHT
⏱️ مدیریت تایم‌اوت قطع خودکار اتصالات کند با UPSTREAM_TIMEOUT_MS
🔍 دیباگ یکپارچه اندپوینت /__debug برای بررسی وضعیت لحظه‌ای
🌍 چند منطقه انتخاب لوکیشن سرور از ۴ منطقه جغرافیایی
💸 رایگان ~۵۰۰ ساعت فعالیت با $5 اعتبار ماهانه Railway

🏗️ معماری

┌─────────────────────────────────────────────────────────────┐
│                        کلاینت شما                           │
│                  (v2rayN / Hiddify / ...)                   │
└──────────────────────────┬──────────────────────────────────┘
                           │  HTTPS
                           │  HOST: xxx.up.railway.app
                           │  Path: /PUBLIC_RELAY_PATH
                           ▼
┌─────────────────────────────────────────────────────────────┐
│                   🚂 Railway (Edge)                         │
│                                                             │
│   ┌─────────────────────────────────────────────────────┐   │
│   │           Avaco Railway Relay (Node.js)             │   │
│   │                                                     │   │
│   │  ✓ بررسی مسیر (PUBLIC_RELAY_PATH)                  │   │
│   │  ✓ احراز هویت (x-relay-key)                        │   │
│   │  ✓ کنترل ترافیک (MAX_INFLIGHT)                     │   │
│   │  ✓ فوروارد هدرها (بدون لیک IP/Host)               │   │
│   │  ✓ استریم دوطرفه (pipeline)                        │   │
│   └──────────────────────────┬──────────────────────────┘   │
└──────────────────────────────┼──────────────────────────────┘
                               │  HTTP
                               │  Path: /RELAY_PATH
                               ▼
┌─────────────────────────────────────────────────────────────┐
│              🖥️ سرور شخصی شما (Xray-core)                  │
│              TARGET_DOMAIN:PORT                             │
│              پروتکل: VLESS + XHTTP                         │
└─────────────────────────────────────────────────────────────┘

جریان درخواست

کلاینت  ──►  Railway (PUBLIC_RELAY_PATH)  ──►  سرور (RELAY_PATH)  ──►  پاسخ
         ◄──                               ◄──                     ◄──

🚀 مراحل دیپلوی

پیش‌نیاز: نصب Railway CLI

# با npm
npm install -g @railway/cli

# یا با Homebrew (Mac)
brew install railway

مرحله ۱ — دریافت API Token

۱. برو به railway.com/account/tokens ۲. روی New Token کلیک کن ۳. نوع: Account Token انتخاب کن ۴. توکن رو کپی کن — یه بار نشون داده می‌شه!

⚠️ توکن رو جایی امن نگه دار. هر بار که لازم داری می‌تونی توکن جدید بسازی.


مرحله ۲ — کلون و ورود به پوشه

git clone https://github.com/avacocloud/avaco-railway.git
cd avaco-railway

مرحله ۳ — ساخت پروژه و آپلود کد

# ساخت پروژه جدید
RAILWAY_API_TOKEN=your_token railway init --name avaco-railway

# آپلود و دیپلوی
RAILWAY_API_TOKEN=your_token railway up --detach

💡 --detach یعنی منتظر نمی‌مونی — Railway در بکگراند build و deploy می‌کنه.


مرحله ۴ — تنظیم متغیرهای محیطی

RAILWAY_API_TOKEN=your_token railway variables \
  --set "TARGET_DOMAIN=https://YOUR-SERVER-IP-OR-DOMAIN:PORT" \
  --set "PUBLIC_RELAY_PATH=/api" \
  --set "RELAY_PATH=/api" \
  --set "RELAY_KEY=your-secret-key-min-16-chars" \
  --set "UPSTREAM_TIMEOUT_MS=0" \
  --set "MAX_INFLIGHT=512"

⚡ بعد از ست کردن متغیرها، Railway خودکار ری‌دیپلوی می‌کنه.


مرحله ۵ — دریافت دامنه عمومی

RAILWAY_API_TOKEN=your_token railway domain

خروجی:

✔ Created domain: YOUR-APP.up.railway.app

این آدرس همونیه که توی کانفیگ کلاینتت می‌زاری.


مرحله ۶ — تست و تأیید

curl https://YOUR-APP.up.railway.app/__debug

خروجی موفق:

{
  "TARGET_BASE": "https://your-server:port",
  "PUBLIC_RELAY_PATH": "/api",
  "RELAY_PATH": "/api",
  "RELAY_KEY_SET": true,
  "UPSTREAM_TIMEOUT_MS": 0,
  "MAX_INFLIGHT": 512,
  "inFlight": 0
}

🪟 دیپلوی روی ویندوز

📋 مراحل دیپلوی در PowerShell (کلیک کن)

۱. نصب Railway CLI

PowerShell رو باز کن:

npm install -g @railway/cli
railway --version

خروجی موفق:

railway 4.x.x

۲. لاگین

railway login

💡 روی ویندوز لاگین مرورگری بهتر از توکن کار می‌کنه — مرورگر باز می‌شه، تأیید کن.

تأیید لاگین:

railway whoami

۳. کلون پروژه

git clone https://github.com/avacocloud/avaco-railway.git
cd avaco-railway

۴. ساخت پروژه Railway

railway init --name avaco-railway

خروجی موفق:

Created project avaco-railway

۵. دیپلوی

railway up --detach

۶. ست کردن متغیرها

⚠️ روی ویندوز هر متغیر رو جداگانه ست کن (بدون \):

railway variables --set "TARGET_DOMAIN=https://YOUR-SERVER:PORT"
railway variables --set "PUBLIC_RELAY_PATH=/api"
railway variables --set "RELAY_PATH=/api"
railway variables --set "RELAY_KEY=your-secret-key"

۷. دریافت دامنه

railway domain

خروجی:

https://YOUR-APP.up.railway.app

۸. ری‌دیپلوی بعد از تغییر متغیرها

railway up --detach

⚠️ بعد از هر تغییر متغیر حتماً ری‌دیپلوی کن و منتظر اتمام build بمون.


۹. تست

curl https://YOUR-APP.up.railway.app/__debug

خروجی موفق:

{
  "TARGET_BASE": "https://your-server:port",
  "PUBLIC_RELAY_PATH": "/api",
  "RELAY_PATH": "/api",
  "RELAY_KEY_SET": true,
  "UPSTREAM_TIMEOUT_MS": 0,
  "MAX_INFLIGHT": 512,
  "inFlight": 0
}

دستورات مفید

railway variables   # مشاهده متغیرها
railway logs        # مشاهده لاگ‌ها
railway status      # وضعیت پروژه
railway domain      # مشاهده دامنه
railway up --detach # ری‌دیپلوی
railway whoami      # تأیید لاگین

⚙️ متغیرهای محیطی

متغیر اجباری پیش‌فرض توضیح
TARGET_DOMAIN آدرس کامل سرور شما. مثال: https://1.2.3.4:443
PUBLIC_RELAY_PATH /api مسیری که کلاینت می‌زنه. مثال: /xhttp
RELAY_PATH /api مسیری که روی سرور Xray تنظیم کردی
RELAY_KEY کلید امنیتی (حداقل ۱۶ کاراکتر) — توصیه می‌شه
UPSTREAM_TIMEOUT_MS 0 تایم‌اوت اتصال به سرور (میلی‌ثانیه). 0 = بدون تایم‌اوت
MAX_INFLIGHT 512 حداکثر درخواست همزمان

نکات مهم متغیرها

  • TARGET_DOMAIN نباید / داشته باشه — مثال: https://1.2.3.4:443 ✅ نه https://1.2.3.4:443/
  • PUBLIC_RELAY_PATH و RELAY_PATH نمی‌تونن / باشن
  • اگه RELAY_KEY بزاری، کلاینت باید هدر x-relay-key رو بفرسته
  • PUBLIC_RELAY_PATH و RELAY_PATH می‌تونن متفاوت باشن (برای پنهان‌سازی مسیر واقعی)
  • RELAY_PATH هر مقداری می‌تونه باشه ولی حتماً باید با مسیری که توی کانفیگ Xray روی سرورت تنظیم کردی یکی باشه

🌍 انتخاب لوکیشن

منطقه مکان کد
🇺🇸 US West کالیفرنیا us-west2
🇺🇸 US East ویرجینیا us-east4
🇳🇱 EU West آمستردام europe-west4
🇸🇬 Southeast Asia سنگاپور asia-southeast1

برای تغییر لوکیشن، در railway.json اضافه کن:

{
  "deploy": {
    "region": "europe-west4"
  }
}

بعد دوباره دیپلوی کن:

RAILWAY_API_TOKEN=your_token railway up --detach

🔍 باگ‌گیری و عیب‌یابی

ابزار دیباگ اصلی

curl https://YOUR-APP.up.railway.app/__debug

این اندپوینت وضعیت کامل ریلی رو نشون می‌ده — اولین جایی که باید چک کنی.


مشاهده لاگ‌های زنده

RAILWAY_API_TOKEN=your_token railway logs

خطاهای رایج و راه‌حل

خطای 500 — Misconfigured: TARGET_DOMAIN is not set

علت: متغیر TARGET_DOMAIN ست نشده.

RAILWAY_API_TOKEN=your_token railway variables --set "TARGET_DOMAIN=https://YOUR-SERVER:PORT"
خطای 500 — Misconfigured: RELAY_PATH cannot be '/'

علت: مسیر رو / گذاشتی که مجاز نیست.

RAILWAY_API_TOKEN=your_token railway variables --set "RELAY_PATH=/api"
خطای 500 — Misconfigured: RELAY_KEY is too short

علت: کلید امنیتی کمتر از ۱۶ کاراکتر داره.

# یه کلید تصادفی بساز:
openssl rand -hex 16

# بعد ست کن:
RAILWAY_API_TOKEN=your_token railway variables --set "RELAY_KEY=your-generated-key"
خطای 403 — Forbidden

علت: هدر x-relay-key در درخواست وجود نداره یا اشتباهه.

در کانفیگ کلاینتت (مثلاً v2rayN)، باید هدر زیر رو اضافه کنی:

x-relay-key: your-secret-key
خطای 404 — Not Found

علت: مسیر درخواست با PUBLIC_RELAY_PATH مطابقت نداره.

# ببین الان چی ست شده:
RAILWAY_API_TOKEN=your_token railway variables

# مثال: اگه PUBLIC_RELAY_PATH=/xhttp باشه، کلاینت باید /xhttp بزنه
خطای 503 — Server Busy: Too Many Inflight Requests

علت: تعداد درخواست‌های همزمان از MAX_INFLIGHT بیشتره.

RAILWAY_API_TOKEN=your_token railway variables --set "MAX_INFLIGHT=1024"
خطای 502 — Bad Gateway

علت: ریلی نمی‌تونه به TARGET_DOMAIN وصل بشه.

چک‌لیست:

  • آیا TARGET_DOMAIN درسته؟ (IP و پورت)
  • آیا فایروال سرور پورت رو باز کرده؟
  • آیا Xray روی سرور در حال اجراست؟
  • تست دسترسی مستقیم: curl http://YOUR-SERVER:PORT
خطای 504 — Gateway Timeout

علت: سرور در زمان تنظیم‌شده پاسخ نداد.

RAILWAY_API_TOKEN=your_token railway variables --set "UPSTREAM_TIMEOUT_MS=0"
دیپلوی ساخته می‌شه ولی اپ استارت نمی‌شه
# بررسی لاگ‌های build و runtime:
RAILWAY_API_TOKEN=your_token railway logs

# چک کن که نسخه Node.js درست باشه (باید ≥20 باشه)
متغیرها ست شدن ولی تغییری نمی‌کنه

Railway بعد از تغییر متغیر باید ری‌دیپلوی بشه. اگه خودکار نشد:

RAILWAY_API_TOKEN=your_token railway up --detach

تست سلامت ریلی

# تست کامل:
curl -v https://YOUR-APP.up.railway.app/__debug

# تست با RELAY_KEY:
curl -H "x-relay-key: your-secret-key" https://YOUR-APP.up.railway.app/api

# تست پینگ ساده:
curl -o /dev/null -s -w "%{http_code}\n" https://YOUR-APP.up.railway.app/__debug
# باید 200 برگردونه

🛠️ مدیریت

# مشاهده همه متغیرها
RAILWAY_API_TOKEN=your_token railway variables

# آپدیت متغیر
RAILWAY_API_TOKEN=your_token railway variables --set "TARGET_DOMAIN=https://NEW-SERVER:PORT"

# دیپلوی مجدد (بعد از تغییر کد)
RAILWAY_API_TOKEN=your_token railway up --detach

# مشاهده وضعیت سرویس
RAILWAY_API_TOKEN=your_token railway status

# مشاهده لاگ‌های زنده
RAILWAY_API_TOKEN=your_token railway logs --tail

# دامنه فعلی
RAILWAY_API_TOKEN=your_token railway domain

💰 محدودیت‌های پلن رایگان

متریک مقدار
💵 اعتبار ماهانه $5
⏱️ تخمین آپتایم ~۵۰۰ ساعت/ماه
📡 درخواست نامحدود
😴 Sleep ندارد (برعکس Render)
🧠 RAM 512 MB
⚡ CPU Shared
🌐 پهنای باند 100 GB/ماه

💡 اگه نیاز به آپتایم بیشتر داری، یه پروژه دوم با حساب دیگه بساز.


📁 ساختار فایل‌ها

railway/
├── src/
│   └── index.js          ← کد اصلی ریلی (Node.js خالص)
├── package.json          ← تعریف پروژه + engine: node ≥20
├── railway.json          ← تنظیمات Railway (builder, restart policy, region)
└── README.md             ← این فایل

💖 حمایت مالی

اگه این پروژه بهت کمک کرد و دوست داری حمایت کنی، می‌تونی با ارز دیجیتال دونیت کنی:

Donate with crypto


🔗 لینک‌های مرتبط


📜 لایسنس

این پروژه تحت لایسنس GNU GPL-3.0 منتشر شده.

هر گونه استفاده مجدد، فورک، یا تغییر در کد مشروط به حفظ موارد زیر است:

⚠️ حذف یا جایگزین کردن اطلاعات سازنده نقض این لایسنس است و منجر به DMCA Takedown می‌شود.

ساخته شده با ❤️ توسط @avaco_cloud

About

No description, website, or topics provided.

Resources

Stars

48 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages