Files

304 lines
7.6 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 روی 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)