Files

7.6 KiB
Raw Permalink Blame History

استقرار 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

  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 ServiceDocker Compose
  2. تنظیمات:
فیلد مقدار
Name mirror-manager
Source Git
Repository mohammadian7/mirror
Branch main
Compose Path docker-compose.yml
Build Path . (root)
  1. 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 کار نکرد:

  1. تب Domains
  2. Host: mirror.itistan.ir
  3. Port: 8765 (نه 3000)
  4. Command در Dokploy باید خالی باشد — Dockerfile خودش python main.py را اجرا می‌کند
  5. HTTPS: فعال / Let's Encrypt
  6. 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)

# وضعیت
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 از pypi.org از طریق پروکسی VPN (172.17.0.1:1081)

اگر pip fail شد: VPN را روشن کنید و دوباره Deploy بزنید.

قبل از 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