FreeSWITCHのインストール (Debian)
https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Installation/Linux/Debian_67240088/
システムインフォメーション
- Version 5.5.0
- Git Information Branch: master
- Commit: bc5275fdcdaf37dbadcea8cf32935561a78d66b2
- Origin: https://github.com/fusionpbx/fusionpbx
- Project Path /var/www/fusionpbx
- Switch Version 1.10.12 (64bit)
- Switch Git Information unknown
- PHP Version 8.2.29
データベース
- Name PostgreSQL
- Version 17.6
本記事は下記フォーラム(作業ノート)の内容を纏めたものです。内容の詳細については、ここを参照願います。
https://forum.ficusonline.com/t/topic/535/3
掲載したファイルは、githubにアップロードします。
1. 作業ディレクトリ
作業ディレクトリとして、公式インストールスクリプト内のdebianディレクトリを利用します。 このディレクトリ内の一部スクリプトや設定ファイルを、各Dockerコンテナで流用します。
$ git clone https://github.com/fusionpbx/fusionpbx-install.sh
$ cd fusionpbx-install.sh/debian
ダウンロードしたディレクトリの中で、実際に使用するファイルはデータベース、サーバの設定に必要な以下の4ファイルです。各自の環境に併せ内容の編集をして下さい。
注) DockerイメージにFreeSWITCHをインストールするには、アクセストークンが必要です。予め下記サイトを参照してトークンを取得してください。 https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Installation/how-to-create-a-personal-access-token/how-to-create-a-personal-access-token/
fusionpbx-install.sh/debian/resources/config.sh
各種スクリプトで参照する環境変数ファイル。アクセストークンが必要。fusionpbx-install.sh/debian/resources/finish.sh
Docker-Composeで初回起動後にデータベースの構築などをするスクリプトfusionpbx-install.sh/debian/resources/fusionpbx/config.conf
FusionPBXの設定ファイルfusionpbx-install.sh/debian/resources/nginx/fusionpbx
Nginxの設定ファイル
2. FusionPBXとオプションパッケージのダウンロード
上記作業ディレクトリ内でFusionPBX最新安定版をダウンロード、fusionpbx/appにオプションパッケージを追加します。
FusionPBXのダウンロード
$ git clone $branch https://github.com/fusionpbx/fusionpbx.git
追加パッケージ(オプション)
$ git clone https://github.com/fusionpbx/fusionpbx-app-transcribe.git ./fusionpbx/app/transcribe
$ git clone https://github.com/fusionpbx/fusionpbx-app-speech.git ./fusionpbx/app/speech
$ git clone https://github.com/fusionpbx/fusionpbx-app-device_logs.git ./fusionpbx/app/device_logs
$ git clone https://github.com/fusionpbx/fusionpbx-app-dialplan_tools.git ./fusionpbx/app/dialplan_tools
$ git clone https://github.com/fusionpbx/fusionpbx-app-edit.git ./fusionpbx/app/edit
$ git clone https://github.com/fusionpbx/fusionpbx-app-sip_trunks.git ./fusionpbx/app/sip_trunks
$ sudo chown -R www-data:www-data /var/www/fusionpbx /var/cache/fusionpbx /etc/freeswitch
3. カスタムDockerイメージの作成
FusionPBXを構成する主要パッケージは、nginx, php-fpm,postgresql,freeswitchですが、php-fpmとfreeswitchについては、FusionPBXの動作環境に適合するようカスタムイメージを作成します。 カスタムイメージを作成するためのdockerfileをdocker_filesディレクトリに作成し、各カスタムイメージをビルドします。
3-1. PHP-FPMカスタムイメージのビルド
FusionPBXのソースは、Docker-Composeファイルで、このコンテナ内に配置されます。
$ mkdir docker_files
docker_files/php-fpm-fusionpbx
docker_files/entrypoint.sh
ビルド
$ docker build -f $(pwd)/docker_files/php-fpm-fusionpbx -t php-8.2-fpm:20250817 $(pwd)/docker_files
3-2. FreeSWITCHカスタムイメージのビルド
FreeSWITCHのDockerイメージについては、下記公式パッケージをダウンロードしてカスタマイズ(取得方法は、git,svnコマンドを使用するなど任意)。
https://github.com/signalwire/freeswitch/tree/master/docker/master
docker_filesディレクトリに新規freeswitch_masterディレクトリを作成してイメージビルド用の各ファイルを配置
$ mkdir freeswitch_master
インストールするFreeSWICTHのパッケージは、必要な機能ごとに数パターン用意されていますが、今回はfreeswitch-meta-allではなく、freeswitch-meta-bareをインストールした上で必要な拡張機能を追加しています。
- freeswitch-meta-bare
- freeswitch-meta-vanilla
- freeswitch-meta-sorbet
- freeswitch-meta-all-dbg
- freeswitch-meta-all
docker_files/freeswitch_master/Dockerfile
docker_files/freeswitch_master/docker-entrypoint.sh
docker_files/freeswitch_master/build/freeswitch.limits.conf
ビルド
$ docker build -f $(pwd)/docker_files/freeswitch_master/Dockerfile -t freeswitch:20250817 $(pwd)/docker_files/freeswitch_master
ビルドしたイメージの確認
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
php-8.2-fpm 20250817 xxxxxxxxxxxx 5 weeks ago 740MB
freeswitch 20250817 xxxxxxxxxxxx 6 weeks ago 2.11GB
4. TLS証明書取得
LetsEncryptによるTLS認証に必要な証明書を取得します。
今回はNginx, FreeSwitchともにIPv6のみの対応とし、CloudflareのDNSレコード:タイプAAAAでドメインを登録、DNSチャレンジで証明書を取得します。
以下のcloudflare専用certbotコンテナを使用します。cloudflareのアカウントとAPIトークン(cloudflare.iniに記述)は必須です。
https://hub.docker.com/r/certbot/dns-cloudflare
$ docker run -it --rm --name certbot_cloudflare -v "/etc/letsencrypt:/etc/letsencrypt" -v "./cloudflare.ini:/opt/certbot/cloudflare.ini" certbot/dns-cloudflare:latest certonly --dns-cloudflare --dns-cloudflare-propagation-seconds 60 --dns-cloudflare-credentials ./cloudflare.ini -d ficusonline.com -d *.ficusonline.com
Nginxには取得した証明書をそのまま利用できますが、FreeSWITCHのTLS認証ファイルは、これら証明書をベースに新たに作成する必要が有ります。
ホストマシン上で以下の作業を実行。
# cat ./letsencrypt/live/ficusonline.com/fullchain.pem > ./letsencrypt/live/ficusonline.com/all.pem
# cat ./letsencrypt/live/ficusonline.com/privkey.pem >> ./letsencrypt/live/ficusonline.com/all.pem
# cd ./letsencrypt
# ln -s live/ficusonline.com/all.pem agent.pem
# ln -s live/ficusonline.com/all.pem tls.pem
# ln -s live/ficusonline.com/all.pem wss.pem
# ln -s live/ficusonline.com/all.pem dtls-srtp.pem
5. Docker-Composeファイルの作成
FreeSwitchコンテナのネットワークモードはhostとして下さい。他のコンテナについては任意ですが、 設定ファイルがそのまま流用できるため、Nginx、PHP-FPMコンテナについてもhostモードにしています。
PHP-FPMとFreeSWITCHコンテナで共有するディレクトリは以下の通りです。
- ./resources/fusionpbx/config.conf:/etc/fusionpbx/config.conf
- ./fusionpbx/app/switch/resources/conf:/etc/freeswitch
- ./fusionpbx/app/switch/resources/scripts:/usr/share/freeswitch/scripts
- freeswitch_lib:/var/lib/freeswitch
- freeswitch_usr_lib:/usr/lib/freeswitch
- freeswitch_share:/usr/share/freeswitch
- freeswitch_log:/var/log/freeswitch
- freeswitch_run:/var/run/freeswitch
- ./cache:/var/cache/fusionpbx
PHP-FPMコンテナ起動時に、複数のPHPスクリプトを実行するため、Supervisorの設定ファイルを作成・指定しています。
- ./php-fpm_conf/php.ini:/usr/local/etc/php/php.ini
- ./php-fpm_conf/supevisor.conf:/etc/supervisor/conf.d/supevisor.conf:ro
- ./php_log:/var/log/supervisor
docker-compose.yaml
6. FusionPBXの起動
起動
$ docker compose up -d
起動後にfinish.shスクリプトをphp-fpmコンテナ内で実行するとFreeSWITCHの設定テーブルが作成され、アクセスURL、管理者アカウント:admin、パスワードが表示されるので、ブラウザでアクセス・ログインして下さい。
$ docker compose exec php-fpm bash
# cd /opt/fusionpbx-installer-sh
# ./finish.sh
Installation has completed.
Use a web browser to login.
domain name: https://000.000.000.000
username: admin
password: XXXXXXXXXXXXXXXXXXXXXXX
The domain name in the browser is used by default as part of the authentication.
If you need to login to a different domain then use username@domain.
username: [email protected]
Additional information.
https://fusionpbx.com/support.php
https://www.fusionpbx.com
http://docs.fusionpbx.com
https://www.fusionpbx.com/training.php
ログイン画面
ダッシュボード
7. セキュリティ対策とデバック
インストールスクリプトを参照し、ホストマシン上で別途設定して下さい。 セキュリティについては iptables, fail2ban、デバックには sngrep を利用しています。