Flexisipアカウントマネージャー

Linphoneアプリ向けにアカウント作成用サーバのソースコードが公開されています。
CentOS+Apache向けとなっていますが、Flexisipを稼働しているDockerコンテナ群のNginx+PHP-FPMに導入します。

また用意されたphpスクリプトにより、以下のLinphoneアカウント用テーブルを作成します。

インストール手順(Docker-Composeファイルによる)

Docker-Composeファイル

別記事で設定したFlexisip用docker-composeファイル内で、flexisip-account-manager用に新たに共有ボリュームをnginxphp-fpmの項目に追加します。

./docker_files内のdockerfileにより、予め各コンテナに必要な追加パッケージをインストールしています。

# nginx, additional install $ docker exec nginx apk add bash nano
  nginx:
    container_name: nginx
    image: nginx:alpine
    tty: true
    environment:
      - VIRTUAL_HOST=test.site.com
      - VIRTUAL_ROOT=/var/www/html
      - VIRTUAL_PORT=80
      # - VIRTUAL_PROTO=fastcgi
      - LETSENCRYPT_HOST=test.site.com
      - LETSENCRYPT_EMAIL=testsite@gmail.com
    volumes:
      # shared nginx default.conf between host and container
      - ./nginx_default.conf:/etc/nginx/conf.d/default.conf
      # shared the directory /var/www/html in php-fpm container
      - ./html:/var/www/html/register
      # shared the directory /var/www/html in phpmysql-fpm container
      - ./phpmyadmin_data:/var/www/html/phpmyadmin
      # for flexisip-account-manager
      - ./flexisip-account-manager:/var/www/html/flexisip-account-manager
    external_links:
      - nginx-proxy-letsencrypt
    restart: always
    networks:
      proxy-tier:
        ipv4_address: 172.18.0.6

  # php-fpm, additional install $ docker exec php-fpm apk add bash nano
  # php extension mysqli should be installed, $ docker exec php-fpm docker-php-ext-install mysqli
  # for Userfrosting, install followings.
  # apk add libpng-dev freetype-dev libjpeg-turbo-dev zip
  # docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
  # docker-php-ext-install -j$(nproc) gd
  # docker-php-ext-install -j$(nproc) pdo pdo_mysql
  # docker-php-ext-install -j$(nproc) zip
  php-fpm:
    container_name: php-fpm
    build: 
      context: ./docker_files
      dockerfile: php7.2-fpm-alpine
    tty: true
    expose: 
      - "9000"
    volumes:
      - ./html:/var/www/html/register
      # for flexisip-account-manager. install # apk add libxml2-dev, # docker-php-ext-install xmlrpc
      - ./flexisip-account-manager:/var/www/html/flexisip-account-manager
      - ./etc/flexisip-account-manager:/etc/flexisip-account-manager
    depends_on:
      - flexisip-mariadb
    restart: always
    networks:
      proxy-tier:
        ipv4_address: 172.18.0.7

./docker_files/php7.2-fpm-alpine

FROM php:7.2-fpm-alpine
# For flexisip-account-manager xmlrpc server
RUN apk add --no-cache bash nano libpng-dev freetype-dev libjpeg-turbo-dev zip libxml2-dev \
    && docker-php-ext-install mysqli xmlrpc \
    && docker-php-ext-enable mysqli xmlrpc \

# Make the log directory and the log file for flexisip-account-manager    
RUN mkdir -p /var/opt/belledonne-communications/log \
    && cd /var/opt/belledonne-communications/log \
    && touch account-manager.log
    && chown www-data:www-data account-manager.log

flexisip-account-managerのダウンロード

git cloneコマンドによりダウンロードします。

以下srcフォルダconfフォルダの中身をdocker-composeファイルで設定した共有フォルダ
flexisip-account-manageretc へコピーします。

php-fpmコンテナの設定

php-fpmコンテナ内にbashコマンドで移動し、xmlrpcサーバに必要なパッケージ、機能拡張をインストールします。インストール後、再起動します。

$ docker exec -ti php-fpm bash

# apk add libxml2-dev
# docker-php-ext-install xmlrpc
# exit

php-fpmの再起動

$ docker container restart php-fpm

nginxコンテナの設定(/etc/nginx/conf.d/default.conf)

nginxコンテナ内でサブディレクトリflexisip-account-managerの追加・設定をします。

$ docker exec -ti nginx bash
# nano /etc/nginx/conf.d/default.conf
location ^~ /flexisip-account-manager {

    alias /var/www/html/flexisip-account-manager/xmlrpc;
    try_files $uri $uri/ @flexisip-account-manager;

    location ~ \.php$ {
        fastcgi_split_path_info ^\/flexisip-account-manager\/(.+\.php)(.*)$;
        fastcgi_param  HTTPS 'on';
        fastcgi_pass   php-fpm:9000;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $request_filename;
    }
  }

  location @flexisip-account-manager {
     rewrite /flexisip-account-manager/(.*)$ /flexisip-account-manager/xmlrpc.php;
  }

設定のリロード

# nginx -s reload

アカウントデータテーブルの作成

事前に

/etc/flexisip-account-manager/db.conf

/var/www/html/flexisip-account-manager/database/database.php

内でデータベース、ユーザ名、パスワードを設定して下さい。

db.conf

define("DB_HOST", "mariadb-flexisip");

define("DB_USER", "flexisip");

define("DB_PASSWORD", "your_password");

define("DB_NAME", "flexisip");

database.php

"mysql:host=flexisip-mariadb;dbname=flexisip"

php-fpmコンテナ内で以下phpスクリプトを実行してアカウント用テーブルを作成します。

$ docker exec -ti php-fpm bash
# php /var/www/html/flexisip-account-manager/tools/create_tables.php

xmlrpcサーバ、プロビジョニングの動作については現在検証中。

Flexisipの設定ファイルの変更

flexisip-account-managerにより作成されたaccountsテーブルとpasswordsテーブルは切り離されているので、accountsテーブルのusernameからpasswordを抽出できるようFlexisipの設定ファイルflexisip.confsociの項目を変更します。

/etc/flexisip/flexisip.conf

soci-password-request=select passwords.password, 'SHA-256' from accounts inner join passwords on accounts.id=passwords.account_id where username = :id and domain = :domain

アカウントマネージャーログ確認(php-fpmコンテナ内)

bash-5.0# cat /var/opt/belle*/log/account-manager.log

コンテナphp-fpmログ確認

$ docker logs php-fpm