نصب و راه‌اندازی VaniaPBX

سه راه برای راه‌اندازی: داکر روی سرور موجود، نصب مستقیم با ISO، یا ماشین مجازی آمادهٔ OVA/OVF. روش داکر پیشنهاد ماست. فایل موردنظر را دانلود و مرحله‌به‌مرحله پیش بروید.

اگر روی سرور خودتان از قبل لینوکس و Docker دارید، این ساده‌ترین و سریع‌ترین راه است. کل VaniaPBX در یک ایمیج آماده بسته‌بندی شده: هستهٔ برنامه، Asterisk، پایگاه‌داده، Redis، RabbitMQ و Nginx همه داخل همان یک کانتینر بالا می‌آیند. نیازی به نصب جداگانهٔ هیچ‌کدام ندارید.

پیش از شروع

مطمئن شوید سرور شما این‌ها را دارد:

  • یک توزیع لینوکس به‌روز با Docker Engine و افزونهٔ Docker Compose
  • معماری amd64، حداقل ۴ گیگابایت رم (برای ترافیک سنگین ۸ گیگ یا بیشتر)
  • یک IP عمومی ثابت یا NAT درست تنظیم‌شده
  • دسترسی root یا عضویت در گروه docker
  • زمان درست سیستم و همگام‌سازی NTP

برای اطمینان از نصب بودن داکر، این دو دستور را بگیرید:

terminal
docker version
docker compose version

پورت‌هایی که باید باز باشند

این پورت‌ها باید هم در فایروال سرور و هم در فایروال ابری (Security Group) باز باشند. توجه کنید که بدون بازهٔ RTP، تماس‌ها برقرار می‌شوند ولی صدا رد و بدل نمی‌شود.

پورتپروتکلکاربرد
80TCPپنل وب و API
5060UDP و TCPسیگنالینگ PJSIP
5061TCPSIP روی TLS
5160UDPسرویس SIP قدیمی (Legacy)
4569UDPIAX2
8089TCPWebSocket امن برای WebRTC
10000-10100UDPبازهٔ پیش‌فرض صدای RTP
3478 / 5349UDP / TCPسرور TURN داخلی (اگر در پنل فعال شود)

نمونهٔ قواعد فایروال با UFW:

firewall (ufw)
sudo ufw allow 80/tcp
sudo ufw allow 5060/tcp
sudo ufw allow 5060/udp
sudo ufw allow 5061/tcp
sudo ufw allow 5160/udp
sudo ufw allow 4569/udp
sudo ufw allow 8089/tcp
sudo ufw allow 10000:10100/udp
sudo ufw allow 3478/udp
sudo ufw allow 3478/tcp
sudo ufw allow 5349/tcp
sudo ufw allow 49160:49200/udp
sudo ufw status verbose
پایگاه‌داده، Redis، RabbitMQ، AMI و ARI فقط داخل کانتینر و روی loopback شنیده می‌شوند و هرگز نبایدروی اینترنت منتشر شوند.

آماده کردن فضای ذخیره‌سازی دائمی

همهٔ اطلاعات شما — پایگاه‌داده، ضبط تماس‌ها، پیغام‌گیر، تنظیمات و کلیدهای محرمانه — زیر مسیر /var/lib/vaniapbx داخل یک والیوم داکر ذخیره می‌شود. پیش از اجرا آن را بسازید:

terminal
docker volume create vaniapbx-data
sudo install -d -m 0755 /opt/vaniapbx/logs
docker volume inspect vaniapbx-data

نصب کامل با Docker Compose (پیشنهادی)

روش Compose تمیزتر است چون تنظیمات را در دو فایل نگه می‌دارد. اول پوشهٔ نصب را بسازید:

terminal
sudo install -d -m 0750 /opt/vaniapbx
cd /opt/vaniapbx
sudo install -d -m 0755 logs
docker volume create vaniapbx-data

حالا فایل /opt/vaniapbx/.env را بسازید. رمز مدیر را یک رشتهٔ تصادفی و دست‌کم ۱۲ کاراکتری بگذارید و به‌جای 203.0.113.10 آدرس عمومی سرور خودتان را بنویسید:

.env
VANIAPBX_IMAGE=vaniapbx/vpbx:astrekis-22
VANIAPBX_PUBLIC_ADDRESS=203.0.113.10
VANIAPBX_ADMIN_USERNAME=Admin
VANIAPBX_ADMIN_PASSWORD=replace-with-a-long-random-password
VANIAPBX_ADMIN_EMAIL=admin@example.com
VANIAPBX_ADMIN_FIRST_NAME=Vania
VANIAPBX_ADMIN_LAST_NAME=Administrator
VANIAPBX_TIMEZONE=Asia/Tehran
VANIAPBX_RTP_START=10000
VANIAPBX_RTP_END=10100

فایل محیط را قفل کنید تا فقط root بخواندش:

terminal
sudo chown root:root /opt/vaniapbx/.env
sudo chmod 0600 /opt/vaniapbx/.env

سپس فایل /opt/vaniapbx/compose.yml را با این محتوا بسازید:

compose.yml
name: vaniapbx

services:
  vaniapbx:
    image: ${VANIAPBX_IMAGE}
    container_name: vaniapbx
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
      - NET_RAW
    environment:
      PBX_ADMIN_USERNAME: ${VANIAPBX_ADMIN_USERNAME}
      PBX_ADMIN_PASSWORD: ${VANIAPBX_ADMIN_PASSWORD}
      PBX_ADMIN_EMAIL: ${VANIAPBX_ADMIN_EMAIL}
      PBX_ADMIN_FIRST_NAME: ${VANIAPBX_ADMIN_FIRST_NAME}
      PBX_ADMIN_LAST_NAME: ${VANIAPBX_ADMIN_LAST_NAME}
      PBX_PRINT_INITIAL_CREDENTIALS: "false"
      PBX_TIMEZONE: ${VANIAPBX_TIMEZONE}
      ASTERISK_EXTERNAL_ADDRESS: ${VANIAPBX_PUBLIC_ADDRESS}
      ASTERISK_RTP_START: ${VANIAPBX_RTP_START}
      ASTERISK_RTP_END: ${VANIAPBX_RTP_END}
    ports:
      - "80:80/tcp"
      - "5060:5060/udp"
      - "5060:5060/tcp"
      - "5061:5061/tcp"
      - "5160:5160/udp"
      - "4569:4569/udp"
      - "8089:8089/tcp"
      - "10000-10100:10000-10100/udp"
      - "3478:3478/udp"
      - "3478:3478/tcp"
      - "5349:5349/tcp"
      - "49160-49200:49160-49200/udp"
    volumes:
      - vaniapbx-data:/var/lib/vaniapbx
      - /opt/vaniapbx/logs:/var/log/vaniapbx
      - /etc/machine-id:/host/etc/machine-id:ro
      - /sys/class/dmi/id:/host/sys/class/dmi/id:ro
    security_opt:
      - no-new-privileges:true
    stop_grace_period: 90s

volumes:
  vaniapbx-data:
    external: true
    name: vaniapbx-data
بازهٔ RTP در دو جا نوشته شده: متغیرهای ASTERISK_RTP_START/ENDو نگاشت پورت‌ها. اگر یکی را عوض کردید، حتماً دیگری را هم دقیقاً هم‌اندازه تغییر دهید.

در پایان، پیکربندی را بررسی و سرویس را بالا بیاورید:

terminal
cd /opt/vaniapbx
docker compose config
docker compose pull
docker compose up -d
docker compose ps

راه‌اندازی سریع بدون Compose (اختیاری)

اگر ترجیح می‌دهید بدون فایل Compose و با یک دستور کار کنید:

terminal
docker pull vaniapbx/vpbx:astrekis-22

docker run --detach \
  --name vaniapbx \
  --restart unless-stopped \
  --cap-add NET_ADMIN \
  --cap-add NET_RAW \
  --env PBX_ADMIN_USERNAME=Admin \
  --env PBX_ADMIN_PASSWORD='replace-with-a-long-random-password' \
  --env PBX_ADMIN_EMAIL=admin@example.com \
  --env ASTERISK_EXTERNAL_ADDRESS=203.0.113.10 \
  --env ASTERISK_RTP_START=10000 \
  --env ASTERISK_RTP_END=10100 \
  --publish 80:80/tcp \
  --publish 5060:5060/udp \
  --publish 5060:5060/tcp \
  --publish 5061:5061/tcp \
  --publish 5160:5160/udp \
  --publish 4569:4569/udp \
  --publish 8089:8089/tcp \
  --publish 10000-10100:10000-10100/udp \
  --volume vaniapbx-data:/var/lib/vaniapbx \
  --volume /opt/vaniapbx/logs:/var/log/vaniapbx \
  --volume /etc/machine-id:/host/etc/machine-id:ro \
  --volume /sys/class/dmi/id:/host/sys/class/dmi/id:ro \
  vaniapbx/vpbx:astrekis-22
از --privileged استفاده نکنید؛ همان دو قابلیت NET_ADMIN و NET_RAW برای فایروال، Fail2ban و بازرسی بسته کافی‌اند.

بررسی اولین اجرا

اولین بالا آمدن ممکن است چند دقیقه طول بکشد. تا سالم شدن (healthy) صبر کنید:

terminal
docker inspect --format '{{.State.Health.Status}}' vaniapbx
docker logs --follow --tail 200 vaniapbx

وضعیت سرویس‌های داخلی و Asterisk را هم می‌توانید ببینید:

terminal
docker exec vaniapbx supervisorctl status
docker exec vaniapbx asterisk -rx 'core show version'
docker exec vaniapbx asterisk -rx 'pjsip show endpoints'
curl --fail --silent --show-error http://127.0.0.1/ >/dev/null

حالا در مرورگر http://SERVER_IP/ را باز کنید و با نام کاربری و رمزی که در .env گذاشتید وارد شوید.

پشتیبان‌گیری و بازیابی

یک بکاپ منطقی و فشرده از پایگاه‌داده بگیرید:

terminal
sudo install -d -m 0700 /opt/vaniapbx/backups

sudo docker exec vaniapbx sh -lc '
  export PGPASSWORD="$(cat /var/lib/vaniapbx/secrets/POSTGRES_PASSWORD)"
  exec pg_dump -h 127.0.0.1 \
    -U "$(cat /var/lib/vaniapbx/secrets/POSTGRES_USER)" \
    -d vaniapbx --format=custom --no-owner --no-acl
' > /opt/vaniapbx/backups/vaniapbx-$(date +%F-%H%M%S).dump
هرگز هنگام توقف یا ارتقای معمولی docker compose down -v نزنید. گزینهٔ -v والیوم دائمی و همهٔ داده‌های شما را پاک می‌کند.

ارتقا بدون از دست دادن داده

اول بکاپ بگیرید، بعد مقدار VANIAPBX_IMAGE را در .envبه تگ نسخهٔ جدید تغییر دهید و اجرا کنید. والیوم vaniapbx-data دست‌نخورده می‌ماند و مهاجرت‌های دیتابیس هنگام بالا آمدن خودکار اجرا می‌شوند:

terminal
cd /opt/vaniapbx
docker compose pull
docker compose up -d
docker compose ps