A lightweight, production-ready Docker image for Flexisip, the open-source SIP proxy server by Belledonne Communications. This image is optimized for minimal size and maximum efficiency through multi-stage builds and careful dependency management.
- Multi-stage build: Separates build dependencies from runtime, significantly reducing final image size
- Debian Slim base: Uses
debian:trixie-slimfor minimal footprint - Production-ready: Contains only essential runtime components, no build tools or documentation
- Optimized layers: Careful layer management to minimize image size and improve build cache efficiency
- Automated upstream tracking: Automatically detects and builds new Flexisip releases
- Multi-architecture support: Native builds for both
amd64andarm64platforms - Parallel builds: Matrix strategy for concurrent multi-version builds
- Channel-based releases: Separate tracks for
stable,alpha,beta, andedgeversions - Version pinning: Reproducible builds with explicit version tagging
- Automated daily checks: Monitors upstream repository for new releases
- Smart versioning: Automatically categorizes and builds stable, alpha, and beta releases
- Edge builds: Tracks master branch commits for bleeding-edge testing
- GitHub Actions: Fully automated CI/CD pipeline with matrix builds
- State management: Uses GitHub Variables for stateful version tracking
| Tag | Description | Update Frequency |
|---|---|---|
latest |
Latest stable release | On stable release |
2.3.2 |
Specific version | One-time build |
stable |
Latest stable release | On stable release |
alpha |
Latest alpha release | On alpha release |
beta |
Latest beta release | On beta release |
edge |
Latest master commit | Daily (if changes) |
edge-{hash} |
Specific commit build | On commit |
# Pull the latest stable version
docker pull etnperlong/flexisip:latest
# Run Flexisip proxy with default configuration
docker run -d \
--name flexisip \
-p 5060:5060/udp \
-p 5060:5060/tcp \
-v /path/to/config:/usr/local/etc/flexisip \
-v /path/to/logs:/usr/local/var/log/flexisip \
etnperlong/flexisip:latest# Create configuration directory
mkdir -p flexisip-config flexisip-logs
# Run with custom configuration
docker run -d \
--name flexisip-proxy \
--restart unless-stopped \
-p 5060:5060/udp \
-p 5060:5060/tcp \
-v $(pwd)/flexisip-config:/usr/local/etc/flexisip \
-v $(pwd)/flexisip-logs:/usr/local/var/log/flexisip \
etnperlong/flexisip:latest \
--serverversion: '3.8'
services:
flexisip:
image: etnperlong/flexisip:latest
container_name: flexisip-proxy
restart: unless-stopped
ports:
- "5060:5060/udp"
- "5060:5060/tcp"
volumes:
- ./config:/usr/local/etc/flexisip
- ./logs:/usr/local/var/log/flexisip
command: ["--server"]Flexisip configuration files should be placed in /usr/local/etc/flexisip/. The default configuration will be generated on first run if not provided.
/usr/local/etc/flexisip- Configuration directory/usr/local/var/log/flexisip- Log directory
5060/udp- SIP signaling (UDP)5060/tcp- SIP signaling (TCP)
For additional ports and configuration options, refer to the official Flexisip documentation.
- Docker with BuildKit support
- Git
# Clone the repository
git clone https://github.com/etnperlong/docker-flexisip.git
cd docker-flexisip
# Build for current architecture
docker build \
--build-arg FLEXISIP_VERSION=2.3.2 \
--build-arg DEBIAN_VERSION=trixie \
-t flexisip:local .
# Build for specific architecture
docker buildx build \
--platform linux/amd64,linux/arm64 \
--build-arg FLEXISIP_VERSION=2.3.2 \
-t flexisip:local .| Argument | Default | Description |
|---|---|---|
DEBIAN_VERSION |
trixie |
Debian base image version |
FLEXISIP_VERSION |
Required | Flexisip version tag or commit hash |
BUILD_TYPE |
Release |
CMake build type (Release/Debug) |
This project includes comprehensive GitHub Actions workflows for automated building and publishing.
graph LR
A[Daily Cron] --> B[Check Upstream]
C[Manual Trigger] --> B
B --> D{New Version?}
D -->|Yes| E[Build Matrix]
D -->|No| F[Skip]
E --> G[Build amd64]
E --> H[Build arm64]
G --> I[Merge & Push]
H --> I
I --> J[Update State]
- Trigger: Daily at 02:00 UTC or manual
- Purpose: Monitors upstream repository for new releases
- Features:
- Checks stable, alpha, beta, and edge channels
- Matrix-based parallel builds for efficiency
- Automatic version detection and categorization
- State management via GitHub Variables
- Trigger: Manual workflow dispatch
- Purpose: Build specific versions on demand
- Features:
- Accepts any version tag or commit hash
- Auto-detects channel from version string
- Useful for rebuilding or testing specific versions
- Type: Reusable workflow
- Purpose: Core build logic shared by other workflows
- Features:
- Multi-architecture builds (amd64 + arm64)
- Digest-based image merging
- Flexible tagging strategy
- Artifact caching for speed
To set up automated builds in your own fork:
# Fork on GitHub, then clone
git clone https://github.com/YOUR_USERNAME/docker-flexisip.git
cd docker-flexisipNavigate to Settings β Secrets and variables β Actions
Required Secrets:
DOCKERHUB_TOKEN: Your Docker Hub access token (How to create)PAT: GitHub Personal Access Token withvariables:writepermission
Required Variables:
DOCKERHUB_USERNAME: Your Docker Hub usernameFLEXISIP_STABLE_VERSION: Current stable version (leave empty initially)FLEXISIP_ALPHA_VERSION: Current alpha version (leave empty initially)FLEXISIP_BETA_VERSION: Current beta version (leave empty initially)FLEXISIP_EDGE_COMMIT: Current edge commit hash (leave empty initially)
The auto-check workflow requires a Personal Access Token to update repository variables because the default GITHUB_TOKEN doesn't support this operation.
-
Go to GitHub Settings:
- Click your profile picture β Settings
- Navigate to Developer settings β Personal access tokens β Fine-grained tokens
- Click Generate new token
-
Configure Token:
- Token name:
docker-flexisip-variables(or any descriptive name) - Expiration: Choose your preferred duration (90 days or custom)
- Repository access: Select "Only select repositories" and choose your fork
- Permissions β Repository permissions:
- Variables: Set to Read and write access
- Actions: Set to Read-only access (optional, for workflow runs)
- Token name:
-
Generate and Save:
- Click Generate token
- Important: Copy the token immediately - you won't see it again!
- Store it in your repository secrets as
PAT
-
Add to Repository Secrets:
- Go to your repository β Settings β Secrets and variables β Actions
- Click New repository secret
- Name:
PAT - Value: Paste your generated token
- Click Add secret
Why is this needed? The GitHub Actions default
GITHUB_TOKENhas limited permissions and cannot modify repository variables. A fine-grained PAT with explicitvariables:writepermission is required for the auto-check workflow to update version tracking variables after successful builds.
For ARM builds, you need an arm64 runner:
- Option A: Use GitHub-hosted ARM runners (if available)
- Option B: Self-host an ARM runner with label
ubuntu-24.04-arm - Option C: Modify workflows to use QEMU emulation (slower)
Edit .github/workflows/build-docker.yml:
env:
DOCKERHUB_REPO: YOUR_USERNAME/flexisip # Change thisGo to Actions tab and enable workflows for your fork.
# Manually trigger a build
Actions β Manual Build β Run workflow
Input version: 2.3.2| Feature | This Project | Official Flexisip |
|---|---|---|
| Base Image | Debian Slim | Debian Standard |
| Image Size | ~200-300MB | ~500-800MB |
| Build Stages | Multi-stage (2) | Single stage |
| Architectures | amd64, arm64 | amd64 only |
| Build Tools | Excluded from runtime | Included |
| Automation | Full CI/CD pipeline | Manual |
| Release Channels | stable/alpha/beta/edge | N/A |
| Update Frequency | Daily checks | Manual |
Contributions are welcome! Please feel free to submit issues or pull requests.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Test locally with Docker build
- Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the GNU Affero General Public License v3.0 - see the LICENSE file for details.
Note: Flexisip itself is licensed under GNU AGPLv3. This Docker packaging maintains the same license.
- Upstream Project: Flexisip on GitLab
- Docker Hub: etnperlong/flexisip
- Documentation: Flexisip Wiki
- Issue Tracker: GitHub Issues
- Linphone Project: linphone.org
- Belledonne Communications for developing and maintaining Flexisip
- Linphone Community for extensive SIP expertise and support
- GitHub Actions for providing robust CI/CD infrastructure
Made with β€οΈ for the open-source community