Files
mohammadian7 63d0699cdd Fix Docker apply crash and add safe profile test flow
Remove invalid _mirror_manager from daemon.json that prevented Docker from starting. Add 2-minute test apply with auto-rollback, final apply confirmation, emergency-restore CLI/UI, and post-restart Docker health checks.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-10 20:20:10 +03:30

200 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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. Dokploy و deploy را تست کنید → **اعمال نهایی** (نگه‌داشتن تغییرات)
6. اگر مشکل پیش آمد: `mirror-manager emergency-restore` از SSH
---
## CLI (از SSH)
```bash
# بازگردانی فوری — آخرین backup قبل از apply (توصیه در emergency)
mirror-manager emergency-restore
# یا معادل:
mirror-manager restore --last
# بازگردانی تنظیمات اولیه (قبل از نصب 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