FICUSONLINE F9E
Flexisip 2.4.3-1 + Flexisip Account Manager (Lime, Http File Transfer) on Docker
現時点での安定版リリースをDockerコンテナで運用します。 HTTPS(TLS)通信の終端はNginxコンテナ(リバースプロキシ)で行い、リクエストをバックエンドのApacheコンテナへ転送しています。従来はAccount ManagerおよびLimeのアプリケーション処理をNginxコンテナで行っていましたが、Apacheコンテナへ統一しました。
Takanobu FuseAdministrator

3 weeks ago

Cloud / Server




20260112_docker-flexisip-system|690x416


Flexisipのシステムをコンテナで分離する上でポイントとなるのは、以下の3ファイルです。

Docker Composeの設定ファイル

注)php-fpmコンテナはphp:8.4-fpmイメージを、flexisipはubuntu:24.04イメージをベースにしたカスタムイメージ。

docker-compose.yaml

services:
##### redis-server
  redis:
    container_name: redis
    image: redis:alpine
    ports:
      - 127.0.0.1:6379:6379
    volumes:
        - ./redis/etc:/etc/redis
        - ./redis/redis-data:/data
    command: ["redis-server", "/etc/redis/redis.conf"]
    restart: unless-stopped
    networks:
      flexisip-net:

##### nginx
  nginx:
    container_name: nginx
    image: nginx:alpine
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./nginx:/etc/nginx/conf.d
      - ./letsencrypt:/etc/letsencrypt:ro
    restart: unless-stopped
    networks:
      flexisip-net:
        
##### apache https://hub.docker.com/_/httpd
  apache:
    container_name: apache
    image: httpd:2.4
    volumes:
      - ./apache/httpd.conf:/usr/local/apache2/conf/httpd.conf
      - ./apache/custom_settings:/usr/local/apache2/conf/custom_settings
      - ./flexisip-account-manager/flexiapi:/opt/belledonne-communications/share/flexisip-account-manager/flexiapi
      - ./hft/hft-server:/opt/belledonne-communications/share/flexisip-http-file-transfer-server
      - ./hft/hft-tmp:/var/opt/belledonne-communications/flexisip-http-file-transfer-tmp
      - ./hft/hft_conf/flexisip-http-file-transfer-server.conf:/etc/flexisip-http-file-transfer-server/flexisip-http-file-transfer-server.conf
      - ./lime/lime-server:/opt/belledonne-communications/share/lime-server
      - ./lime/lime_conf/lime-server.conf:/etc/lime-server/lime-server.conf
      - phpmyadmin:/var/www/html
    restart: unless-stopped
    depends_on:
      - mariadb-flexisip
      - php-fpm
    networks:
      flexisip-net:

##### mariadb
  mariadb-flexisip:
    container_name: mariadb-flexisip
    image: mariadb:lts
    restart: unless-stopped
    ports:
      - 127.0.0.1:3306:3306
    command: --event-scheduler=ON --max-connections=300
    volumes:
      - ./db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
    networks:
      flexisip-net:

### flexisip
  ubuntu-flexisip:
    container_name: ubuntu-flexisip
    image: ubuntu-flexisip:20260105
    volumes:
      - ./letsencrypt:/etc/letsencrypt:ro
      - ./flexisip_conf:/etc/flexisip
      - ./linphone:/root/.local/share/linphone
      - ./tmp/ld:/tmp/ld
      - ./log/flexisip:/var/opt/belledonne-communications/log/flexisip
    depends_on:
      - redis
      - nginx
      - mariadb-flexisip
    restart: unless-stopped
    command: ["--server","all"]
    cap_add:
      - NET_ADMIN
      - SYS_RESOURCE
    privileged: true
    network_mode: "host"
    
### PHP(+ Composer)
  php-fpm:
    container_name: php-fpm
    image: php-fpm-8.4:20260105
    volumes:
      - ./php-fpm_conf/php.ini:/usr/local/etc/php/php.ini
      - ./flexisip-account-manager/flexiapi:/opt/belledonne-communications/share/flexisip-account-manager/flexiapi
      - /opt/belledonne-communications/share/flexisip-account-manager/flexiapi/vendor
      - ./hft/hft-server:/opt/belledonne-communications/share/flexisip-http-file-transfer-server
      - ./hft/hft_conf/flexisip-http-file-transfer-server.conf:/etc/flexisip-http-file-transfer-server/flexisip-http-file-transfer-server.conf
      - ./hft/hft-tmp:/var/opt/belledonne-communications/flexisip-http-file-transfer-tmp
      - ./lime/lime-server:/opt/belledonne-communications/share/lime-server
      - ./lime/lime_conf/lime-server.conf:/etc/lime-server/lime-server.conf
      - ./log/flexisip:/var/opt/belledonne-communications/log/flexisip
      - ./log/flexisip-http-file-transfer-server.log:/var/opt/belledonne-communications/log/flexisip-http-file-transfer-server.log
      - ./log/lime-server:/var/opt/belledonne-communications/log/lime-server
      - ./log/php_errors.log:/var/log/php/php_errors.log
    restart: unless-stopped
    networks:
      flexisip-net:

##### phpmyadmin-fpm
  phpmyadmin-fpm:
    container_name: phpmyadmin-fpm
    image: phpmyadmin/phpmyadmin:fpm-alpine
    expose: 
      - "9000"
    environment:
      - PMA_HOST=mariadb-flexisip
      - PMA_PORT=3306
      - PMA_ABSOLUTE_URI=https://www.example.com/phpmyadmin
    volumes:
      - phpmyadmin:/var/www/html
    depends_on:
      - mariadb-flexisip
    restart: unless-stopped    
    networks:
      flexisip-net:

networks:
  flexisip-net:
    enable_ipv6: true
    ipam:
      driver: default
      config:
        - subnet: "10.x.x.0/24"
        - subnet: "xxxx:xxxx:xxxx:x::/64"

volumes:
  phpmyadmin:

Nginxの設定

/etc/nginx/conf.d/default.conf

resolver 127.0.0.11 valid=15s;

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name www.example.com;

    client_max_body_size 100M;

    ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        proxy_pass http://apache:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Port 443;
        proxy_set_header Authorization $http_authorization;
    }
}

server {
    listen 80;
    listen [::]:80;
    server_name www.example.com;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

Apache(httpd)の設定

必要なモジュールをアンコメントし有効化、デフォルトのドキュメントルートをコメントアウトし、<VirtualHost *:80>セクションを追加して下さい。

注)Include conf/custom_settings/*.conf には、ソースから提供されているhttpd設定ファイルを格納します。

/usr/local/apache2/conf/httpd.conf

LoadModule remoteip_module modules/mod_remoteip.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule rewrite_module modules/mod_rewrite.so

#####ServerName 127.0.0.1:80

#####DocumentRoot "/usr/local/apache2/htdocs"

#####<Directory "/usr/local/apache2/htdocs">
    #####Options Indexes FollowSymLinks
    #####AllowOverride None
    #####Require all granted
#####</Directory>

<VirtualHost *:80>
	ServerName www.example.com
	
	Include conf/custom_settings/*.conf

    <IfModule remoteip_module>
        RemoteIPHeader X-Forwarded-For
        RemoteIPInternalProxy 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
    </IfModule>

    <IfModule setenvif_module>
        SetEnvIf X-Forwarded-Proto "https" HTTPS=on
        SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
    </IfModule>
	
	<IfModule proxy_module>
		<FilesMatch "\.php$">
		    SetHandler  "proxy:fcgi://php-fpm:9000"
		</FilesMatch>
	</IfModule>

</VirtualHost>

メール認証によるユーザ登録

fam_register|690x334

sent_verification_email|690x501

fam_emal_verify|690x329

fam_user_account|690x329


Adminユーザ画面

fam_spaces_info|690x329

fam_users|690x329


QRコードによるユーザ登録

ユーザ登録のQRコードをメール送信し、LinphoneでこのQRコードを読み込むだけでユーザ登録が完了します。

user_provisioning|690x338

sent_email_qrcode|690x648