← Back to list

ทำระบบเสียงตามสายด้วย IZPBX และ Linphone(Rpi) ตอนที่ 1 (setup)

สำหรับตอนนี้ จะทดสอบ สร้างระบบเสียงตามสายผ่านระบบอินเทอร์เน็ตหรือระบบเน็ตเวิร์ก(VoIP) ที่สามารถพูดจากไมค์หนึ่ง ไปออกลำโพงของอีกเครื่องหนึ่ง…

Nut Techosakondee · 2026-05-30 14:09 · 0 claps · 4.0 min read
#iot #raspberry-pi #asterisk #voip-telephone-system #linphone
Open on Medium ↗
Wiki topics: 📟 · Gadgets & IoT

ทำระบบเสียงตามสายด้วย IZPBX และ Linphone(Rpi) ตอนที่ 1 (setup)

สำหรับตอนนี้ จะทดสอบ สร้างระบบเสียงตามสายผ่านระบบอินเทอร์เน็ตหรือระบบเน็ตเวิร์ก(VoIP) ที่สามารถพูดจากไมค์หนึ่ง ไปออกลำโพงของอีกเครื่องหนึ่ง โดยสามารถเลือกสถานีปลายทางได้ โดยเราจะสร้าง server ที่คอยจัดการ ด้วย IZPBX และ device ปลายทางจะใช้ microsip ทดสอบบน window และ linphone ทดสอบบน rpi

diagram concept

diagram concept

IZPBX คือ service ที่รวมกันระหว่าง Asterisk ที่เป็น Open source ที่นิยมใช้สำหรับจัดการระบบ VoIP และ FreePBX ที่เป็น Dashboard สำหรับจัดการหน้าโทรศัพท์

เริ่มต้นใช้งาน

เราจะใช้งาน server IZPBX ด้วย docker compose โดยในไฟล์ compose จะมีการ setting ตามนี้

# NOTE: don't edit this file, instead specify your changes creating docker-compose.override.yml

networks:
  izpbx:
    driver: bridge
  ## if you want run other izpbx deploy in the same docker host enable the macvlan interface driver
  #izpbx-ext:
    #driver: macvlan
    #driver_opts:
      #parent: eth0
    ipam:
      config:
      - subnet: 10.1.1.0/24

# secrets:
#   IZPBX_MYSQL_ROOT_PASSWORD:
#     environment: MYSQL_ROOT_PASSWORD
#   IZPBX_MYSQL_PASSWORD:
#     environment: MYSQL_PASSWORD

services:
  # https://hub.docker.com/_/mariadb?tab=tags&page=1&ordering=last_updated
  db:
    # current LTS (Long Term Support) release
    image: docker.io/mariadb:10.11.11
    # previous LTS (Long Term Support) release
    #image: docker.io/mariadb:10.6.14
    container_name: izpbx-db
    user: 0:0
    ## WARNING: if you upgrade image tag enter the container and run mysql_upgrade:
    ## source .env ; docker exec -it izpbx-db mysql_upgrade -u root -p$MYSQL_ROOT_PASSWORD
    command: --sql-mode=ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    restart: unless-stopped
    env_file:
    - .env
    environment:
    - TZ
    - MYSQL_DATABASE
    - MYSQL_USER
    - MYSQL_PASSWORD
    - MYSQL_ROOT_PASSWORD
    ## NOTE: using secrets files need further testing
    #- MYSQL_PASSWORD_FILE=/run/secrets/IZPBX_MYSQL_PASSWORD
    #- MYSQL_ROOT_PASSWORD_FILE=/run/secrets/IZPBX_MYSQL_ROOT_PASSWORD
    #- MARIADB_RANDOM_ROOT_PASSWORD=${MYSQL_RANDOM_ROOT_PASSWORD}
    #- MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=${MYSQL_ALLOW_EMPTY_ROOT_PASSWORD}
    #secrets:
    #- IZPBX_MYSQL_PASSWORD
    #- IZPBX_MYSQL_ROOT_PASSWORD
    volumes:
    #- /etc/localtime:/etc/localtime:ro
    # - ./data/db:/var/lib/mysql
    - db_data:/var/lib/mysql
    ## NOTE: to avoid nat management use: 'network_mode: host'
    #network_mode: host
    ## WARNING: if 'network_mode: host' is disabled, comment out the following lines
    networks:
      - izpbx
    ## WARNING: if not commented out, the database will be exposed outside the container
    ports:
    - ${APP_PORT_MYSQL}:3306

  # https://hub.docker.com/r/izdock/izpbx-asterisk/tags?page=1&ordering=last_updated
  izpbx:
    image: docker.io/izdock/izpbx-asterisk:20.16.21
    container_name: izpbx
    user: 0:0
    #entrypoint: /bin/bash -c "/bin/bash -c \"sleep 3600\""
    #hostname: ${APP_FQDN}
    restart: unless-stopped
    depends_on:
    - db
    env_file:
    - .env
    #secrets:
    #- IZPBX_MYSQL_PASSWORD
    #- IZPBX_MYSQL_ROOT_PASSWORD
    volumes:
    #- /etc/localtime:/etc/localtime:ro
    # - ./data/izpbx:/data
    - izpbx_data:/data
    ## fail2ban need privileged mode to manage iptables
    cap_drop:
    - NET_ADMIN
    environment:
      - SKIP_CHOWN=true
    security_opt:
    # - apparmor=unconfined
    - seccomp=unconfined
    privileged: false
    ulimits:
      nofile:
        soft: 8192
        hard: 32768
    ## NOTE: to avoid SIP-RTP NAT issues use: 'network_mode: host'
    # network_mode: host
    ## WARNING: if 'network_mode: host' is disabled, comment out the following lines
    ##          ports are not needed if using 'network_mode: host' or macvlan network driver
    ##          if you want use macvlan network driver comment out 'izpbx-ext:' too and change exposed IP according your needs
    networks:
      - izpbx
    # izpbx-ext:
    #   ipv4_address: 10.1.1.221
    ports:
    - 8000:${APP_PORT_HTTP}
    # - ${APP_PORT_HTTPS}:${APP_PORT_HTTPS}
    - 4570:${APP_PORT_IAX}
    - 4570:${APP_PORT_IAX}/udp
    - ${APP_PORT_PJSIP}:${APP_PORT_PJSIP}
    - ${APP_PORT_PJSIP}:${APP_PORT_PJSIP}/udp
    - ${APP_PORT_SIP}:${APP_PORT_SIP}/udp
    - ${APP_PORT_SIP}:${APP_PORT_SIP}
    # - ${APP_PORT_WEBRTC}:${APP_PORT_WEBRTC}
    # - ${APP_PORT_UCP_HTTP}:${APP_PORT_UCP_HTTP}
    # - ${APP_PORT_UCP_HTTPS}:${APP_PORT_UCP_HTTPS}
    # - ${APP_PORT_AMI}:${APP_PORT_AMI}
    # - ${APP_PORT_RTP_START}-${APP_PORT_RTP_END}:${APP_PORT_RTP_START}-${APP_PORT_RTP_END}
    # - ${APP_PORT_RTP_START}-${APP_PORT_RTP_END}:${APP_PORT_RTP_START}-${APP_PORT_RTP_END}/udp
    # - ${APP_PORT_DHCP}:${APP_PORT_DHCP}/udp
    # - ${APP_PORT_TFTP}:${APP_PORT_TFTP}
    # - ${APP_PORT_TFTP}:${APP_PORT_TFTP}/udp
    # - ${APP_PORT_NTP}:${APP_PORT_NTP}/udp
    # - ${APP_PORT_FOP2}:${APP_PORT_FOP2}
    # - ${APP_PORT_ZABBIX}:${APP_PORT_ZABBIX}

volumes:
  db_data:
  izpbx_data:

จาก compose เราใช้ volumn ภายใน เนื่องจาก ถ้า map file มาใช้ด้านนอก จะติดปัญหา permission ทำให้ build container ไม่ขึ้น

ส่วนการ setting อื่นๆ ให้ไปใส่ใน docker-compose.override.yml

services:
  db:
    networks:
      izpbx:
        ipv4_address: 10.1.1.220 

  izpbx:
    networks:
      izpbx:
        ipv4_address: 10.1.1.221 

ส่วนไฟล์ .env ให้โหลดไฟล์ default.env จากลิ้งนี้มาใช้ โดยจะมีการปรับเพิ่มเติม เพื่อเปิดใช้ function ตามนี้ ส่วน function อื่นสามารถเปิดใช้งานได้ภายหลัง

TZ=Asia/Bangkok

HTTPD_ALLOW_FROM=127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16

MYSQL_SERVER=db
MYSQL_DATABASE=asterisk
MYSQL_DATABASE_CDR=asteriskcdrdb
MYSQL_USER=asterisk

FREEPBX_TONEZONE=th
FREEPBX_PHPTIMEZONE=Asia/Bangkok

[embed]GitHub - ugoviti/izpbx: izPBX is a Turnkey Cloud Native Telephony System powered by Asterisk Engine… izPBX is a Turnkey Cloud Native Telephony System powered by Asterisk Engine and FreePBX Management GUI - ugoviti/izpbxgithub.com

หลังจาก compose up แล้ว เข้าหน้าเว็บ localhost:8000 จะได้หน้าต่างที่ให้เซต user & password หลังจากเซตเสร็จแล้ว จะได้หน้า login แบบนี้

login page

login page

หน้า dashboard จะแสดงสถานะของ server ให้ดู

dashboard page

dashboard page

Register device

ทำการลงทะเบียน device เพื่อใช้งาน โดยไปที่แถบ Application -> Extension -> Add Extension -> Add new SIP extension

Add new SIP extension

Add new SIP extension

จากนั้นตั้ง เบอร์ที่จะใช้งานกับ device นั้น ในช่อง User Extension และตั้งชื่อ device ใน Display name และช่อง secret จะเป็นค่า password

create new user

create new user

หลังจากเซตค่าเสร็จแล้ว กด submit ด้านล่าง และแถว apply change สีแดงจะแสดงขึ้นมาที่ มุมขวาบน ของหน้าเว็บ ให้กดเพื่อเปลี่ยนแปลงค่าด้วย

apply change

apply change

ลองสร้าง device มาซัก 2–3 ตัว โดยใช้หลักการเดียวกัน

create other device

create other device

ทดสอบด้วย Microsip (สำหรับ window)

[embed]MicroSIP Downloads - Installer and Portable version Download MicroSIP, full or lite version, installer or zip archive with portable version.www.microsip.org

Download Microsip จากลิ้งนี้ แนะนำว่าให้โหลดแบบ portable เพราะจะสามารถเปิดพร้อมๆกันหลาย device เพื่อทดสอบได้

Microsip interface and add account

Microsip interface and add account

เมื่อเปิดมาแล้ว หน้าตาจะเป็นแบบนี้ ทำการเซต account โดยไปที่ มุมบนด้านขวา Add acount แล้วเซตค่าตามนี้ โดย User & password เซตให้ตรงกับที่เรา register ไว้ ส่วน SIP server และ Domain ให้ใส่ ip และ port ของ server

setting server connection

setting server connection

ในส่วนของ settings ให้เซต server name และ port ต่างๆให้ตรงกับ compose file ที่เราเซตใน docker

ถ้าเชื่อมต่อได้แล้ว ที่มุมล่างซ้ายจะเป็นสีเขียว ขึ้นว่า Online

ทดสอบลองโทรเข้าหา server โดยใช้เบอร์ภายในเช่น 43 จะเป็น Echo test จะได้ยินเสียงที่เราพูด หรือ 60 จะเป็นการบอกเวลา ถ้าลองแล้วได้ยินเสียงตอบกลับมา แสดงว่าเบอร์นั้นเชื่อมต่อกับ server ได้แล้ว

Feature codes

Feature codes

เราสามารถดู เบอร์ภายในอื่นๆ เพื่อทดสอบได้จาก Admin -> Feature codes

จากนั้นเราทำแบบเดียวกัน กับ Microsip อีกตัวหนึ่ง จะเทสในคอมเดียวกัน หรือ คอมคนละเครื่องก็ได้ เมื่อกดโทรไปแล้ว จะขึ้นหน้าต่างแจ้งเตือนให้รับสาย

test calling from 1001 to 1003

test calling from 1001 to 1003

เมื่อกด Answer และพูดจากไมค์จากเครื่องต้นทาง เสียงจะไปออกปลายทางแล้ว

speak from 1001 announce to 1002

speak from 1001 announce to 1002

จากการทดลองนี้ เราสามารถโทรได้แล้ว แต่ถ้าเราจะทำระบบเสียงตามสาย เราจะใช้หลักการเดียวกัน เพียงแต่ปลายสาย จะต้อง Auto answer เองโดยไม่ต้องมีคนกดรับ โดยจะเซต auto answer ในตอนถัดไป


메타데이터
post_id
3f9a8dc404cf
slug
ทำระบบเสียงตามสายด้วย-izpbx-และ-linphone-rpi-ตอนที่-1-setup-3f9a8dc404cf
url
https://medium.com/@nutert321/%E0%B8%97%E0%B8%B3%E0%B8%A3%E0%B8%B0%E0%B8%9A%E0%B8%9A%E0%B9%80%E0%B8%AA%E0%B8%B5%E0%B8%A2%E0%B8%87%E0%B8%95%E0%B8%B2%E0%B8%A1%E0%B8%AA%E0%B8%B2%E0%B8%A2%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-izpbx-%E0%B9%81%E0%B8%A5%E0%B8%B0-linphone-rpi-%E0%B8%95%E0%B8%AD%E0%B8%99%E0%B8%97%E0%B8%B5%E0%B9%88-1-setup-3f9a8dc404cf
canonical_url
https://medium.com/@nutert321/%E0%B8%97%E0%B8%B3%E0%B8%A3%E0%B8%B0%E0%B8%9A%E0%B8%9A%E0%B9%80%E0%B8%AA%E0%B8%B5%E0%B8%A2%E0%B8%87%E0%B8%95%E0%B8%B2%E0%B8%A1%E0%B8%AA%E0%B8%B2%E0%B8%A2%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-izpbx-%E0%B9%81%E0%B8%A5%E0%B8%B0-linphone-rpi-%E0%B8%95%E0%B8%AD%E0%B8%99%E0%B8%97%E0%B8%B5%E0%B9%88-1-setup-3f9a8dc404cf
author_url
https://medium.com/@nutert321
status
ok
fetched_at
2026-08-21 13:14:52