Initial commit
This commit is contained in:
@@ -0,0 +1,192 @@
|
||||
# Mirror Manager
|
||||
|
||||
پنل وب فارسی برای مدیریت DNS، میرور APT، Docker Registry، GitHub و pip/npm روی Ubuntu (فوکوس 24.04).
|
||||
|
||||
## قابلیتها
|
||||
|
||||
- CRUD میرورها و پروفایلها
|
||||
- اعمال سراسری تنظیمات روی host (systemd-resolved، apt، docker، git)
|
||||
- تست latency و دسترسی میرورها
|
||||
- Backup خودکار (اولیه + قبل از هر apply)
|
||||
- Rollback با پنجره زمانی (پیشفرض ۱۵ دقیقه)
|
||||
- Auto-switch اختیاری per-category
|
||||
- راهنمای فارسی برای هر بخش
|
||||
- CLI برای SSH: restore، enable، disable
|
||||
- **بدون تغییر SSH یا فایروال**
|
||||
|
||||
---
|
||||
|
||||
## پیشنیاز
|
||||
|
||||
- Ubuntu 18.04 / 22.04 / 24.04 (فوکوس noble)
|
||||
- Docker + Dokploy + Traefik
|
||||
- دسترسی root/privileged برای container
|
||||
|
||||
---
|
||||
|
||||
## نصب روی Dokploy
|
||||
|
||||
### ۱. Clone پروژه روی سرور
|
||||
|
||||
```bash
|
||||
git clone <repo-url> /opt/mirror-manager
|
||||
cd /opt/mirror-manager
|
||||
```
|
||||
|
||||
### ۲. تنظیم `.env` (فقط برای deploy دستی؛ در Dokploy از Environment UI استفاده کنید)
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
nano .env
|
||||
```
|
||||
|
||||
| متغیر | مقدار |
|
||||
|-------|-------|
|
||||
| `MIRROR_DOMAIN` | `mirror.itistan.ir` |
|
||||
| `SECRET_KEY` | رشته تصادفی ۳۲+ کاراکتر |
|
||||
| `ADMIN_PASSWORD` | رمز قوی |
|
||||
|
||||
### ۳. Repo Gitea
|
||||
|
||||
```
|
||||
https://git.itistan.ir/mohammadian7/mirror
|
||||
```
|
||||
|
||||
راهنمای کامل Dokploy: [deploy/DOKPLOY.md](deploy/DOKPLOY.md)
|
||||
|
||||
---
|
||||
|
||||
## نصب روی Dokploy (خلاصه)
|
||||
|
||||
1. Push به Gitea → Deploy از Dokploy
|
||||
2. Environment variables را در Dokploy تنظیم کنید
|
||||
3. رکورد A: `mirror.itistan.ir` → IP سرور
|
||||
4. **https://mirror.itistan.ir**
|
||||
|
||||
---
|
||||
|
||||
## نصب دستی (بدون Dokploy)
|
||||
|
||||
```bash
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
Volumeها:
|
||||
- `/etc` → `/host/etc` (برای apply)
|
||||
- `/var/lib/mirror-manager/data` → دیتابیس و backup
|
||||
|
||||
### ۴. Traefik / Dokploy
|
||||
|
||||
در Dokploy یک Application از نوع Docker Compose بسازید یا labelهای Traefik را در `docker-compose.yml` تنظیم کنید:
|
||||
|
||||
```yaml
|
||||
traefik.http.routers.mirror-itistan.rule=Host(`mirror.itistan.ir`)
|
||||
```
|
||||
|
||||
### ۵. نصب CLI روی host
|
||||
|
||||
```bash
|
||||
chmod +x mirror-manager deploy/install-cli.sh
|
||||
sudo cp mirror-manager /usr/local/bin/mirror-manager
|
||||
# PYTHONPATH را در /usr/local/bin/mirror-manager-wrapper یا:
|
||||
echo 'export PYTHONPATH=/opt/mirror-manager' | sudo tee /etc/profile.d/mirror-manager.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## استفاده
|
||||
|
||||
1. به **https://mirror.itistan.ir** بروید
|
||||
2. با `ADMIN_USERNAME` / `ADMIN_PASSWORD` وارد شوید
|
||||
3. در **اولین ورود** backup اولیه خودکار گرفته میشود
|
||||
4. یک **پروفایل** انتخاب و **اعمال** کنید
|
||||
5. در پنجره rollback تست کنید → **تأیید** یا **rollback**
|
||||
|
||||
---
|
||||
|
||||
## CLI (از SSH)
|
||||
|
||||
```bash
|
||||
# بازگردانی تنظیمات اولیه (قبل از نصب Mirror Manager)
|
||||
mirror-manager restore --initial
|
||||
|
||||
# بازگردانی یک backup مشخص
|
||||
mirror-manager restore --backup /var/lib/mirror-manager/data/backups/20250603_120000_before_apply_1
|
||||
|
||||
# غیرفعال / فعال container
|
||||
mirror-manager disable
|
||||
mirror-manager enable
|
||||
|
||||
# وضعیت
|
||||
mirror-manager status
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## پروفایلهای پیشفرض
|
||||
|
||||
| پروفایل | محتوا |
|
||||
|---------|--------|
|
||||
| آروان کامل | Shecan + Arvan APT/Docker + GitClone |
|
||||
| 403 + Shatel | 403 DNS + Shatel APT + GHProxy |
|
||||
| حداقلی | Shecan + Arvan Docker |
|
||||
|
||||
---
|
||||
|
||||
## میرورهای seed
|
||||
|
||||
### DNS
|
||||
Shecan، 403.online، Begzar، Electro + fallback Cloudflare/Google
|
||||
|
||||
### APT
|
||||
Arvan، Shatel، Ubuntu Archive
|
||||
|
||||
### Docker
|
||||
Arvan Docker Registry
|
||||
|
||||
### GitHub
|
||||
GitClone، GHProxy
|
||||
|
||||
---
|
||||
|
||||
## نکات امنیتی
|
||||
|
||||
- رمز admin را حتماً عوض کنید
|
||||
- `SECRET_KEY` تصادفی و طولانی
|
||||
- UI را فقط از طریق HTTPS (Traefik) در دسترس بگذارید
|
||||
- قبل از apply با **IP** به SSH وصل شوید (نه hostname)
|
||||
|
||||
---
|
||||
|
||||
## ساختار پروژه
|
||||
|
||||
```
|
||||
app/
|
||||
models.py # SQLite models
|
||||
services/ # apply, backup, test, dns, apt, docker, github
|
||||
routes/ # Flask blueprints
|
||||
templates/ # UI فارسی RTL
|
||||
guides.py # راهنمای هر بخش
|
||||
docker-compose.yml
|
||||
Dockerfile
|
||||
mirror-manager # CLI entry
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## توسعه محلی
|
||||
|
||||
```bash
|
||||
python -m venv .venv
|
||||
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
||||
pip install -r requirements.txt
|
||||
set DISABLE_SCHEDULER=1
|
||||
set HOST_ROOT=
|
||||
python run.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
Reference in New Issue
Block a user