Co-authored-by: Cursor <cursoragent@cursor.com>
7.5 KiB
استقرار 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 شدن:
ping mirror.itistan.ir
باید IP سرور را برگرداند.
مرحله ۱ — Push کد به Gitea
روی کامپیوتر خودتان (Windows) در پوشه پروژه:
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:
# پوشه داده 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
- وارد پنل Dokploy شوید
- Create Project → نام مثلاً
mirror-manager
۳.۲ اتصال Gitea (اگر قبلاً نکردید)
- Settings → Git Providers
- Add Provider → Gitea
- URL:
https://git.itistan.ir - Token با دسترسی
read:repositoryبسازید و وارد کنید
۳.۳ Application — Docker Compose
- داخل پروژه → Create Service → Docker Compose
- تنظیمات:
| فیلد | مقدار |
|---|---|
| Name | mirror-manager |
| Source | Git |
| Repository | mohammadian7/mirror |
| Branch | main |
| Compose Path | docker-compose.yml |
| Build Path | . (root) |
- Save
مرحله ۴ — Environment Variables در Dokploy
در تب Environment این متغیرها را اضافه کنید:
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 تصادفی:
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 کار نکرد:
- تب Domains
- Host:
mirror.itistan.ir - Port:
8765(نه 3000) - Command در Dokploy باید خالی باشد — Dockerfile خودش
python main.pyرا اجرا میکند - HTTPS: فعال / Let's Encrypt
- Deploy مجدد
هر دو روش همزمان نباشد — یکی کافی است.
مرحله ۶ — Deploy
- Deploy را بزنید
- لاگ build را ببینید (اولین بار build image ممکن است ۲–۵ دقیقه طول بکشد)
- ۱۰–۳۰ ثانیه صبر کنید تا Traefik گواهی SSL بگیرد
- باز کنید: https://mirror.itistan.ir
- login:
ADMIN_USERNAME/ADMIN_PASSWORD
مرحله ۷ — اولین استفاده
- با IP به SSH وصل باشید (نه hostname)
- اولین login → backup اولیه خودکار
- پروفایلها → «آروان کامل» → اعمال
- ۱۵ دقیقه تست → تأیید یا Rollback
CLI از SSH (بعد از deploy)
# وضعیت
mirror-manager status
# غیرفعال کردن UI (تنظیمات host دست نخورده)
mirror-manager disable
# فعال کردن مجدد
mirror-manager enable
# بازگردانی به قبل از نصب Mirror Manager
mirror-manager restore --initial
اگر mirror-manager پیدا نشد:
export PYTHONPATH=/opt/mirror-manager
python3 /opt/mirror-manager/mirror-manager status
بهروزرسانی بعدی
# روی 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 از
mirror.arvancloud.ir
قبل از deploy دستی روی سرور (اختیاری):
docker pull docker.arvancloud.ir/library/python:3.12-slim-bookworm
اگر باز هم گیر کرد — VPN را روشن کنید و دوباره Deploy بزنید.
تست build دستی:
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
docker ps | grep mirror-manager
docker logs mirror-manager --tail 50
- container باید
Upباشد - روی network
dokploy-networkباشد:
docker network inspect dokploy-network | grep mirror-manager
۲. SSL صادر نمیشود
- رکورد A درست است؟
- پورت 80/443 از اینترنت باز است (فایروال سرور / cloud panel)
- ۲–۳ دقیقه صبر + Redeploy
۳. Apply کار نمیکند
Container باید privileged + pid: host + mount /etc:/host/etc داشته باشد.
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