{"id":50331838,"url":"https://github.com/movtigroup/ubuntu-debian","last_synced_at":"2026-05-29T10:02:14.765Z","repository":{"id":355196313,"uuid":"1227166777","full_name":"movtigroup/ubuntu-debian","owner":"movtigroup","description":"Smart Ubuntu \u0026 Debian Mirror Proxy","archived":false,"fork":false,"pushed_at":"2026-05-02T10:49:01.000Z","size":31,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-02T12:06:00.605Z","etag":null,"topics":["debian","fastapi","mirror","mirrored-repository","python","ubuntu"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/movtigroup.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"custom":["https://reymit.ir/movtigroup","https://daramet.com/tahatehran"]}},"created_at":"2026-05-02T09:54:05.000Z","updated_at":"2026-05-02T10:49:05.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/movtigroup/ubuntu-debian","commit_stats":null,"previous_names":["movtigroup/ubuntu-debian"],"tags_count":null,"template":false,"template_full_name":"movtigroup/movtigroup","purl":"pkg:github/movtigroup/ubuntu-debian","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/movtigroup%2Fubuntu-debian","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/movtigroup%2Fubuntu-debian/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/movtigroup%2Fubuntu-debian/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/movtigroup%2Fubuntu-debian/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/movtigroup","download_url":"https://codeload.github.com/movtigroup/ubuntu-debian/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/movtigroup%2Fubuntu-debian/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33646428,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["debian","fastapi","mirror","mirrored-repository","python","ubuntu"],"created_at":"2026-05-29T10:02:13.956Z","updated_at":"2026-05-29T10:02:14.760Z","avatar_url":"https://github.com/movtigroup.png","language":"Python","funding_links":["https://reymit.ir/movtigroup","https://daramet.com/tahatehran"],"categories":[],"sub_categories":[],"readme":"# 📦 Smart Ubuntu \u0026 Debian Mirror Proxy\n\n[![FastAPI](https://img.shields.io/badge/FastAPI-005571?style=for-the-badge\u0026logo=fastapi)](https://fastapi.tiangolo.com)\n[![Docker](https://img.shields.io/badge/Docker-2496ED?style=for-the-badge\u0026logo=docker\u0026logoColor=white)](https://docker.com)\n[![Mirrors](https://img.shields.io/badge/Mirrors-Iranian-blue?style=for-the-badge)]()\n\n\u003e **پروکسی هوشمند و سبک برای مخازن Ubuntu و Debian**\n\u003e با استفاده از آینه‌های داخلی (ایران)، سرعت دانلود بسته‌ها را چندین برابر کنید.\n\u003e بدون نیاز به تغییر عادات – فقط کافیست `sources.list` را تنظیم کنید.\n\nاین سرویس به صورت آماده روی آدرس `https://mirro.ththt.ir` در دسترس است.\nهمچنین می‌توانید کد را روی سرور خود اجرا کرده و لیست آینه‌ها را شخصی‌سازی کنید.\n\n---\n\n## ✨ ویژگی‌ها\n\n- **آینه‌های داخلی با کیفیت** – پشتیبانی از بیش از ۱۰ آینه معتبر ایرانی (IUT، آرون‌کلود، آبرا نت، چابوکان و ...)\n- **Health Check هوشمند** – هر ۲ دقیقه سلامت آینه‌ها بررسی شده و لیست سالم‌ها به‌روز می‌شود\n- **Fallback خودکار** – اگر آینه‌ای پاسخ ندهد، درخواست به آینه سالم بعدی هدایت می‌شود\n- **Load Balancing تصادفی** – توزیع بار بین آینه‌های سالم برای پایداری بیشتر\n- **ایستا و سریع** – بدون نگهداری state، پاسخ مستقیم از آینه‌ها\n- **پشتیبانی همزمان از Ubuntu و Debian** – دو endpoint جداگانه با استخر آینه مجزا\n- **وضعیت لحظه‌ای** – endpoint `/status` وضعیت همه آینه‌ها و تأخیر آن‌ها را نمایش می‌دهد\n- **بدون Cache** – این پروکسی فایلی را ذخیره نمی‌کند و فقط هدایت می‌کند\n\n---\n\n## 🚀 شروع سریع\n\n### با Docker (توصیه شده)\n\n```bash\ngit clone https://github.com/movtigroup/ubuntu-debian.git\ncd smart-mirror-proxy\ndocker-compose up -d\n```\n\nسرویس روی پورت `8000` در دسترس خواهد بود.\n\n### بدون Docker (نیازمند Python 3.11+)\n\n```bash\npip install -r requirements.txt\nuvicorn main:app --host 0.0.0.0 --port 8000\n```\n\n---\n\n## 📡 نحوه استفاده\n\n### 1️⃣ استفاده به عنوان Proxy APT\n\nفایل `/etc/apt/sources.list` خود را با آدرس پروکسی به‌روز کنید:\n\n**Ubuntu 22.04 (Jammy):**\n```bash\ndeb https://mirro.ththt.ir/ubuntu jammy main restricted universe multiverse\ndeb https://mirro.ththt.ir/ubuntu jammy-updates main restricted universe multiverse\ndeb https://mirro.ththt.ir/ubuntu jammy-security main restricted universe multiverse\n```\n\n**Debian 12 (Bookworm):**\n```bash\ndeb https://mirro.ththt.ir/debian bookworm main contrib non-free\ndeb https://mirro.ththt.ir/debian bookworm-updates main contrib non-free\ndeb https://mirro.ththt.ir/debian bookworm-security main contrib non-free\n```\n\n\u003e **توجه:** APT به صورت پیش‌فرض از متد `GET` استفاده می‌کند. اگر از نسخه میزبانی شده (`mirro.ththt.ir`) استفاده می‌کنید، آن سرویس به‌گونه‌ای پیکربندی شده که درخواست‌های `GET` را نیز بپذیرد.\n\u003e در صورت اجرای محلی، باید یک Reverse Proxy (مثل Nginx) در جلو قرار دهید که `GET` را به `POST` داخلی تبدیل کند، یا endpoint `GET` به کد اضافه کنید. (در حال حاضر فقط `POST` پشتیبانی می‌شود)\n\n### 2️⃣ درخواست مستقیم (API)\n\n#### دریافت فایل از مخازن Ubuntu\n```bash\ncurl -X POST https://mirro.ththt.ir/ubuntu \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"path\": \"/dists/jammy/Release\"}'\n```\n\n#### دریافت فایل از مخازن Debian\n```bash\ncurl -X POST https://mirro.ththt.ir/debian \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"path\": \"/dists/stable/Release\"}'\n```\n\n#### مشاهده وضعیت همه آینه‌ها\n```bash\ncurl https://mirro.ththt.ir/status\n```\n\n---\n\n## 📋 لیست آینه‌های پشتیبانی‌شده\n\n### Ubuntu\n\n| آینه | پروتکل |\n|------|--------|\n| `repo.iut.ac.ir/ubuntu` | HTTP |\n| `mirror.iranserver.com/ubuntu` | HTTPS |\n| `mirror.shatel.ir/ubuntu` | HTTPS |\n| `repo.hmirror.ir/ubuntu` | HTTPS |\n| `linux-mirror.liara.ir/repository/ubuntu` | HTTP |\n| `mirror.arvancloud.ir/ubuntu` | HTTP |\n| `repo.abrha.net/ubuntu` | HTTPS |\n| `mirror.mobinhost.com/ubuntu` | HTTPS |\n| `mirrors.pardisco.co/ubuntu` | HTTPS |\n| `mirror2.chabokan.net/ubuntu` | HTTPS |\n| `archive.ubuntu.com/ubuntu` | HTTP (پشتیبان جهانی) |\n\n### Debian\n\n| آینه | پروتکل |\n|------|--------|\n| `repo.iut.ac.ir/debian` | HTTP |\n| `mirror.iranserver.com/debian` | HTTPS |\n| `mirror.shatel.ir/debian` | HTTPS |\n| `repo.hmirror.ir/debian` | HTTPS |\n| `linux-mirror.liara.ir/repository/debian` | HTTP |\n| `mirror.arvancloud.ir/debian` | HTTP |\n| `repo.abrha.net/debian` | HTTPS |\n| `mirror.mobinhost.com/debian` | HTTPS |\n| `mirrors.pardisco.co/debian` | HTTPS |\n| `mirror2.chabokan.net/debian` | HTTPS |\n| `deb.debian.org/debian` | HTTP (پشتیبان جهانی) |\n| `ftp.debian.org/debian` | HTTP (پشتیبان جهانی) |\n\n\u003e تمام آینه‌های ذکر شده **داخلی (ایران)** هستند و کیفیت بالایی برای کاربران داخل کشور دارند. آینه‌های جهانی تنها به عنوان پشتیبان (fallback) استفاده می‌شوند.\n\n---\n\n## ⚙️ نحوه عملکرد Health Check و Load Balancing\n\n- **Health Check** هر ۱۲۰ ثانیه به صورت خودکار اجرا می‌شود.\n- برای بررسی سلامت، سه مسیر `/dists/stable/Release`، `/project/trace` و `/ls-lR.gz` تست می‌شوند.\n- آینه‌های سالم در یک استخر قرار می‌گیرند و درخواست‌ها به صورت تصادفی بین آن‌ها توزیع می‌شود.\n- اگر هیچ آینه‌ای سالم نباشد، از آخرین آینه موجود در لیست (آینه اصلی جهانی) به عنوان fallback استفاده می‌شود.\n\n\u003e **تغییر تنظیمات:** می‌توانید بازه health check و مسیرهای تست را در فایل `main.py` تغییر دهید.\n\n---\n\n## 🐳 Docker Compose\n\n```yaml\nversion: '3.8'\nservices:\n  mirror-proxy:\n    build: .\n    container_name: smart-mirror-proxy\n    restart: unless-stopped\n    ports:\n      - \"8000:8000\"\n    environment:\n      - TZ=Asia/Tehran\n    healthcheck:\n      test: [\"CMD\", \"curl\", \"-f\", \"http://localhost:8000/status\"]\n      interval: 30s\n      timeout: 10s\n      retries: 3\n      start_period: 40s\n```\n\n---\n\n## 🧰 وابستگی‌ها\n\n- **Python 3.11+**\n- **FastAPI** – فریمورک وب\n- **httpx** – درخواست‌های HTTP غیرهمزمان\n- **uvicorn** – سرور ASGI\n\n---\n\n## 📁 ساختار پروژه\n\n```\n.\n├── main.py              # کد اصلی سرویس\n├── requirements.txt     # وابستگی‌های پایتون\n├── Dockerfile           # ساخت ایمیج داکر\n├── docker-compose.yml   # اجرای سرویس با داکر\n└── README.md            # این فایل\n```\n\n---\n\n## 📝 نکات مهم\n\n1. **کیفیت آینه‌های داخلی:** آینه‌های لیست شده همگی با بالاترین کیفیت و پایداری از مراکز داده معتبر ایران انتخاب شده‌اند.\n2. **عدم ذخیره‌سازی:** این پروکسی **هیچ فایلی را کش نمی‌کند** و صرفاً درخواست را به آینه سالم هدایت می‌کند.\n3. **تحمل خطا:** اگر آینه‌ای دچار مشکل شود، درخواست بلافاصله به آینه بعدی هدایت می‌شود و کاربر متوجه قطعی نخواهد شد.\n4. **اندازه پاسخ:** برای دانلود فایل‌های حجیم (مثل ISOs) محدودیتی وجود ندارد.\n5. **امنیت:** درخواست‌ها با `verify=False` ارسال می‌شوند تا آینه‌هایی که گواهی SSL نامعتبر دارند هم کار کنند. اگر امنیت بالا نیاز دارید، این گزینه را غیرفعال کنید.\n6. **استفاده با APT محلی:** اگر سرویس را به صورت محلی اجرا می‌کنید و می‌خواهید APT مستقیماً از آن استفاده کند، باید یک Reverse Proxy (مانند Nginx) تنظیم کنید تا درخواست‌های `GET` را به `POST` داخلی تبدیل کند. یا endpoint `GET` به کد اضافه کنید.\n\n---\n\n## 🤝 مشارکت\n\nاگر آینه داخلی دیگری می‌شناسید که پایدار است، خوشحال می‌شویم آن را به لیست اضافه کنیم. Pull Request بزنید یا issue ثبت کنید.\n\n---\n\n## 📄 مجوز\n\nاین پروژه تحت مجوز MIT منتشر شده است. استفاده آزاد، تجاری و شخصی بلامانع است.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmovtigroup%2Fubuntu-debian","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmovtigroup%2Fubuntu-debian","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmovtigroup%2Fubuntu-debian/lists"}