# استقرار 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`** (نه 3000) 4. Command در Dokploy باید **خالی** باشد — Dockerfile خودش `python main.py` را اجرا می‌کند 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 اگر فعال کردید). --- ## عیب‌یابی ### ۰. Build گیر می‌کند روی `load metadata for python` علت: Docker Hub از ایران در دسترس نیست. **راه‌حل (در Dockerfile اعمال شده):** - Base image از `docker.arvancloud.ir/library/python:3.12-slim-bookworm` - pip از `pypi.org` از طریق پروکسی VPN (`172.17.0.1:1081`) **اگر pip fail شد:** VPN را روشن کنید و دوباره Deploy بزنید. **قبل از deploy دستی روی سرور (اختیاری):** ```bash docker pull docker.arvancloud.ir/library/python:3.12-slim-bookworm ``` **اگر باز هم گیر کرد** — VPN را روشن کنید و دوباره Deploy بزنید. **تست build دستی:** ```bash cd /etc/dokploy/compose/vpn-mirror-sazg0b/code docker compose -p vpn-mirror-sazg0b build --progress=plain 2>&1 | tee /tmp/mirror-build.log ``` ### ۱. 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)