Initial commit

This commit is contained in:
2026-06-03 17:33:19 +03:30
commit 9608342428
48 changed files with 3562 additions and 0 deletions
+279
View File
@@ -0,0 +1,279 @@
# استقرار Mirror Manager روی Dokploy
**دامنه:** `mirror.itistan.ir`
**Repo:** https://git.itistan.ir/mohammadian7/mirror
---
## نمای کلی
```
Gitea (git.itistan.ir)
▼ clone + build
Dokploy
├── Traefik → https://mirror.itistan.ir
└── Container (privileged)
└── mount /etc → apply DNS/APT/Docker/Git
```
---
## مرحله ۰ — پیش‌نیاز DNS
در پنل DNS دامنه `itistan.ir` یک رکورد **A** بسازید:
| نوع | نام | مقدار |
|-----|-----|-------|
| A | `mirror` | IP سرور VPS |
بعد از propagate شدن:
```bash
ping mirror.itistan.ir
```
باید IP سرور را برگرداند.
---
## مرحله ۱ — Push کد به Gitea
روی **کامپیوتر خودتان** (Windows) در پوشه پروژه:
```powershell
cd C:\Users\DELL\Desktop\Project\mirror
git init
git branch -M main
git remote add origin https://git.itistan.ir/mohammadian7/mirror.git
git add .
git commit -m "Initial Mirror Manager for mirror.itistan.ir"
git push -u origin main
```
> اگر Gitea username/password خواست، از token یا رمز Gitea استفاده کنید.
> repo فعلاً public است؛ بعداً می‌توانید private کنید.
---
## مرحله ۲ — آماده‌سازی سرور (یک بار)
SSH به VPS:
```bash
# پوشه داده persistent
sudo mkdir -p /var/lib/mirror-manager/data
sudo chmod 755 /var/lib/mirror-manager/data
# (اختیاری) clone دستی برای CLI
sudo git clone https://git.itistan.ir/mohammadian7/mirror.git /opt/mirror-manager
sudo bash /opt/mirror-manager/deploy/install-cli.sh /opt/mirror-manager
```
---
## مرحله ۳ — ساخت پروژه در Dokploy
### ۳.۱ Project
1. وارد پنل Dokploy شوید
2. **Create Project** → نام مثلاً `mirror-manager`
### ۳.۲ اتصال Gitea (اگر قبلاً نکردید)
1. **Settings → Git Providers**
2. **Add Provider** → Gitea
3. URL: `https://git.itistan.ir`
4. Token با دسترسی `read:repository` بسازید و وارد کنید
### ۳.۳ Application — Docker Compose
1. داخل پروژه → **Create Service****Docker Compose**
2. تنظیمات:
| فیلد | مقدار |
|------|-------|
| Name | `mirror-manager` |
| Source | Git |
| Repository | `mohammadian7/mirror` |
| Branch | `main` |
| Compose Path | `docker-compose.yml` |
| Build Path | `.` (root) |
3. **Save**
---
## مرحله ۴ — Environment Variables در Dokploy
در تب **Environment** این متغیرها را اضافه کنید:
```env
SECRET_KEY=یک-رشته-تصادفی-حداقل-۳۲-کاراکتر
ADMIN_USERNAME=admin
ADMIN_PASSWORD=رمز-قوی-شما
HOST_ROOT=/host
DATA_DIR=/app/data
ROLLBACK_MINUTES=15
AUTO_TEST_INTERVAL_MINUTES=30
MIRROR_CONTAINER_NAME=mirror-manager
```
**SECRET_KEY** تصادفی:
```bash
openssl rand -hex 32
```
> `.env` روی سرور لازم نیست — Dokploy خودش env را inject می‌کند.
---
## مرحله ۵ — Domain در Dokploy (دو روش)
### روش A — Traefik labels (پیشنهادی، از قبل در compose هست)
در `docker-compose.yml` labelها برای `mirror.itistan.ir` تنظیم شده. فقط **Deploy** کنید.
### روش B — Dokploy Domains UI
اگر label کار نکرد:
1. تب **Domains**
2. Host: `mirror.itistan.ir`
3. Port: `8765`
4. HTTPS: فعال / Let's Encrypt
5. **Deploy** مجدد
> هر دو روش همزمان نباشد — یکی کافی است.
---
## مرحله ۶ — Deploy
1. **Deploy** را بزنید
2. لاگ build را ببینید (اولین بار build image ممکن است ۲–۵ دقیقه طول بکشد)
3. ۱۰–۳۰ ثانیه صبر کنید تا Traefik گواهی SSL بگیرد
4. باز کنید: **https://mirror.itistan.ir**
5. login: `ADMIN_USERNAME` / `ADMIN_PASSWORD`
---
## مرحله ۷ — اولین استفاده
1. با **IP** به SSH وصل باشید (نه hostname)
2. اولین login → backup اولیه خودکار
3. **پروفایل‌ها** → «آروان کامل» → **اعمال**
4. ۱۵ دقیقه تست → **تأیید** یا **Rollback**
---
## CLI از SSH (بعد از deploy)
```bash
# وضعیت
mirror-manager status
# غیرفعال کردن UI (تنظیمات host دست نخورده)
mirror-manager disable
# فعال کردن مجدد
mirror-manager enable
# بازگردانی به قبل از نصب Mirror Manager
mirror-manager restore --initial
```
اگر `mirror-manager` پیدا نشد:
```bash
export PYTHONPATH=/opt/mirror-manager
python3 /opt/mirror-manager/mirror-manager status
```
---
## به‌روزرسانی بعدی
```bash
# روی PC: push تغییرات
git push origin main
```
در Dokploy → **Redeploy** (یا webhook auto-deploy اگر فعال کردید).
---
## عیب‌یابی
### ۱. 502 / 504 از Traefik
```bash
docker ps | grep mirror-manager
docker logs mirror-manager --tail 50
```
- container باید `Up` باشد
- روی network `dokploy-network` باشد:
```bash
docker network inspect dokploy-network | grep mirror-manager
```
### ۲. SSL صادر نمی‌شود
- رکورد A درست است؟
- پورت 80/443 از اینترنت باز است (فایروال سرور / cloud panel)
- ۲–۳ دقیقه صبر + Redeploy
### ۳. Apply کار نمی‌کند
Container باید **privileged** + `pid: host` + mount `/etc:/host/etc` داشته باشد.
```bash
docker inspect mirror-manager --format '{{.HostConfig.Privileged}}'
# باید true باشد
```
### ۴. apt update fail
میرور را در UI **تست** کنید؛ URL میرور را CRUD کنید.
### ۵. Docker restart و Dokploy down
طبیعی است — apply را در ساعات کم‌ترافیک انجام دهید.
---
## امنیت (repo public)
Repo فعلاً public است:
- **هرگز** `.env` با رمز واقعی commit نکنید
- `SECRET_KEY` و `ADMIN_PASSWORD` فقط در Dokploy Environment
- بعداً repo را **private** کنید
- رمز admin را بلافاصله عوض کنید
---
## چک‌لیست نهایی
- [ ] رکورد A: `mirror.itistan.ir` → IP سرور
- [ ] کد push شده به Gitea
- [ ] Dokploy Compose از repo clone می‌کند
- [ ] Environment variables تنظیم شده
- [ ] Deploy موفق
- [ ] https://mirror.itistan.ir/login باز می‌شود
- [ ] `install-cli.sh` روی host اجرا شده
- [ ] backup اولیه در UI تأیید شده
- [ ] SSH با IP (نه hostname)
---
## پشتیبانی
- راهنمای هر بخش داخل UI: `/guide/dns` و ...
- README اصلی: [README.md](../README.md)