FICUSONLINE F9E
Flexisip 2.4.3-1 + Flexisip Account Manager (Lime, Http File Transfer) on Docker
The system is deployed using Docker containers based on the current stable release. HTTPS (TLS) connections are terminated at an Nginx container functioning as a reverse proxy, and requests are forwarded to a backend Apache container. Application processing for Account Manager and Lime, which was previously performed in the Nginx container, has been unified into the Apache container.
Takanobu FuseAdministrator

3 days ago

Cloud / Server




20260112_docker-flexisip-system|690x416


When containerizing and separating the Flexisip system, the following three files are the key components.

Docker Compose File

Note: The php-fpm container is built from the php:8.4-fpm image, while Flexisip is deployed using a custom image based on 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 config file

/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) config file

Please uncomment and enable the required modules, comment out the default document root, and add a <VirtualHost *:80> section.

Note: Deploy “httpd” config files supplied from the each source into Include conf/custom_settings/*.conf.

/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>

User Registry by E-Mail

fam_register|690x334

sent_verification_email|690x501

fam_emal_verify|690x329

fam_user_account|690x329


Display for Admin User

fam_spaces_info|690x329

fam_users|690x329


User Resistry with QR Code

A QR code for user registration is sent by email, and the user registration is completed simply by scanning the QR code with Linphone.

user_provisioning|690x338

sent_email_qrcode|690x648