A modern, feature-rich web interface for managing Jasmin SMS Gateway
Features β’ Quick Start β’ Installation β’ Docker β’ Support
- Overview
- Features
- Prerequisites
- Quick Start
- Installation
- Configuration
- Production Deployment
- Submit Log Integration
- Default Credentials
- Troubleshooting
- Support
Jasmin Web Panel is a comprehensive web-based management interface for Jasmin SMS Gateway. Built with Django and modern web technologies, it provides an intuitive dashboard to configure, monitor, and manage your SMS operations efficiently.
- π Dashboard: Real-time statistics and system health monitoring
- π₯ User Management: Create and manage users with role-based access control
- π‘ SMPP Connectors: Configure and monitor SMPP client/server connections
- π HTTP API: Manage HTTP connectors for sending SMS via REST API
- π Message Routing: Define routing rules and filters for message delivery
- π¨ MO/MT Routers: Configure Mobile Originated and Mobile Terminated message routing
- π Submit Logs: Comprehensive message tracking with advanced search and filtering
- Search by Message ID, Source/Destination address, UID, and content
- Filter by status: Success (
ESME_ROK,ESME_RINVNUMDESTS), Failed (ESME_RDELIVERYFAILURE), Unknown - Real-time statistics with color-coded status badges
- π Service Monitoring: Monitor Jasmin gateway service health
- π Real-time Status: Live SMPP connector status monitoring
- π§ RESTful API: Programmatic access to all management functions
- β‘ Rate Limiting: Configure throughput limits per user/connector
- π Multi-tenancy: Manage multiple clients/users
- π Audit Logging: Track all administrative actions
- π Internationalization: Multi-language support ready
- π± Responsive Design: Mobile-friendly interface
- Jasmin SMS Gateway: v0.9+ installed and running
- Python: 3.11 or higher
- Database: PostgreSQL 12+ (recommended) or MySQL 8.0+
- Redis: 6.0+ (for caching and Celery)
- RabbitMQ: 3.10+ (for message queuing)
- OS: Linux (Ubuntu 20.04+, Debian 11+, CentOS 8+)
- RAM: Minimum 2GB (4GB+ recommended for production)
- Disk: 10GB+ free space
- Network: Connectivity to Jasmin telnet interface (default: port 8990)
# Clone the repository
git clone https://github.com/101t/jasmin-web-panel.git
cd jasmin-web-panel
# Copy and configure environment file
cp sample.env .env
# Edit .env with your settings
# Start all services
docker compose up -d
# Access the web interface
open http://localhost:8999Default credentials: admin / secret
# Clone repository
git clone https://github.com/101t/jasmin-web-panel.git
cd jasmin-web-panel
# Create virtual environment (recommended)
python3 -m venv env
source env/bin/activate # On Windows: env\Scripts\activate
# Upgrade pip and install build tools
pip install --upgrade pip wheel uv
# Install dependencies
uv pip install -r pyproject.toml --extra=prod# Copy sample environment file
cp sample.env .env
# Edit .env with your configuration
nano .env # or use your preferred editorEssential configuration:
# Django Settings
DEBUG=False # Always False in production
SECRET_KEY=your-very-long-random-secret-key-here
ALLOWED_HOSTS=yourdomain.com,www.yourdomain.com
# Database
PRODB_URL=postgres://username:password@localhost:5432/jasmin_web_db
# Jasmin Gateway Connection
TELNET_HOST=127.0.0.1
TELNET_PORT=8990
TELNET_USERNAME=jcliadmin
TELNET_PW=jclipwd
TELNET_TIMEOUT=10
# Redis for Cache & Celery
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_DB=0
REDIS_PASSWORD=<Optional>
# Submit Log Feature
SUBMIT_LOG=True# Run migrations
python manage.py migrate
# Load sample data (optional)
python manage.py samples
# Collect static files
python manage.py collectstatic --no-input
# Create superuser (optional)
python manage.py createsuperuserpython manage.py runserver 0.0.0.0:8000Access the application at http://localhost:8000
# Pull the latest image
docker pull tarekaec/jasmin_web_panel:1.4
# Configure environment
cp sample.env .env
# Edit .env with your settings
# Run container
docker run -d \
--name jasmin-web \
-p 8999:8000 \
--env-file .env \
-v ./public:/app/public \
tarekaec/jasmin_web_panel:1.4# Build from Dockerfile
docker build -f config/docker/slim/Dockerfile -t jasmin_web_panel:custom .
# Run your custom image
docker run -d \
--name jasmin-web \
-p 8999:8000 \
--env-file .env \
jasmin_web_panel:customFull stack deployment with all dependencies:
# Ensure .env is configured
cp sample.env .env
# Start all services
docker compose up -d
# View logs
docker compose logs -f jasmin-web
# Check service status
docker compose ps
# Stop all services
docker compose downServices included:
jasmin-web: Web application (port 8999)jasmin-celery: Background task processordb: PostgreSQL databaseredis: Redis cacherabbit-mq: RabbitMQ message brokerjasmin: Jasmin SMS Gateway (ports 2775, 8990, 1401)sms_logger: SMS submit log collector
For ARM-based systems:
-
Comment out line 38 in
config/docker/slim/Dockerfile:# ENV LD_PRELOAD /usr/lib/x86_64-linux-gnu/libjemalloc.so.2 -
Start services:
docker compose up -d
| Variable | Description | Default | Required |
|---|---|---|---|
DEBUG |
Enable debug mode | False |
β |
SECRET_KEY |
Django secret key | - | β |
ALLOWED_HOSTS |
Allowed hosts | * |
β |
PRODB_URL |
PostgreSQL URL | - | β |
REDIS_HOST |
Redis host | redis |
β |
REDIS_PORT |
Redis port | 6379 |
β |
REDIS_DB |
Redis database | 0 |
β |
TELNET_HOST |
Jasmin telnet host | 127.0.0.1 |
β |
TELNET_PORT |
Jasmin telnet port | 8990 |
β |
TELNET_USERNAME |
Jasmin admin username | jcliadmin |
β |
TELNET_PW |
Jasmin admin password | jclipwd |
β |
SUBMIT_LOG |
Enable submit log tracking | False |
β |
Ensure Jasmin is configured properly:
-
Enable
submit_sm_resppublishing injasmin.cfg:[sm-listener] publish_submit_sm_resp = True
-
Restart Jasmin:
systemctl restart jasmin
Create /etc/systemd/system/jasmin-web.service:
[Unit]
Description=Jasmin Web Panel
Requires=postgresql.service
After=network.target postgresql.service
[Service]
Type=simple
SyslogIdentifier=jasminwebpanel
User=www-data
Group=www-data
WorkingDirectory=/opt/jasmin-web-panel
Environment="DJANGO_SETTINGS_MODULE=config.settings.pro"
ExecStart=/opt/jasmin-web-panel/env/bin/gunicorn \
--bind 127.0.0.1:8000 \
--workers 4 \
--timeout 120 \
--log-level info \
--access-logfile /opt/jasmin-web-panel/logs/gunicorn.log \
--error-logfile /opt/jasmin-web-panel/logs/gunicorn_error.log \
config.wsgi:application
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable jasmin-web.service
sudo systemctl start jasmin-web.service
sudo systemctl status jasmin-web.serviceCreate /etc/nginx/sites-available/jasmin_web:
upstream jasmin_web {
server 127.0.0.1:8000;
}
server {
listen 80;
server_name sms.yourdomain.com; # Replace with your domain
charset utf-8;
# Security headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
# Logging
access_log /var/log/nginx/jasmin_web_access.log combined;
error_log /var/log/nginx/jasmin_web_error.log;
# Static files
location /static/ {
alias /opt/jasmin-web-panel/public/static/;
expires 30d;
add_header Cache-Control "public, immutable";
}
# Media files
location /media/ {
alias /opt/jasmin-web-panel/public/media/;
}
# Proxy to Django
location / {
proxy_pass http://jasmin_web;
proxy_http_version 1.1;
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 $scheme;
proxy_buffering off;
client_max_body_size 20M;
}
}sudo ln -s /etc/nginx/sites-available/jasmin_web /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginxsudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d sms.yourdomain.comTrack all SMS messages submitted through Jasmin Gateway with detailed status information.
-
Enable in configuration:
SUBMIT_LOG=True -
Configure SMS Logger:
DB_HOST=db DB_DATABASE=jasmin DB_USER=jasmin DB_PASS=jasmin DB_TABLE=submit_log
- β Real-time Tracking: Monitor message submission and delivery status
- π Advanced Search: Search by Message ID, addresses, UID, or content
- π― Status Filtering:
- Success:
ESME_ROK,ESME_RINVNUMDESTS - Failed:
ESME_RDELIVERYFAILURE - Unknown: All other status codes
- Success:
- π Statistics Dashboard: View total, success, failed, and unknown counts
- π¨ Color-coded Badges: Visual status identification
- π Pagination: Handle large volumes efficiently
Username: admin
Password: secret
Via Web Interface:
- Log in with default credentials
- Navigate to Profile β Change Password
- Enter new secure password
Via Command Line:
python manage.py changepassword adminSolutions:
- Verify Jasmin is running:
systemctl status jasmin - Check telnet connectivity:
telnet localhost 8990 - Confirm
TELNET_*settings match Jasmin configuration - Ensure firewall allows port 8990
Solutions:
- Verify
SUBMIT_LOG=Truein.env - Check SMS Logger service:
docker compose ps sms_logger - Confirm
publish_submit_sm_resp = Trueinjasmin.cfg - Check logs:
docker compose logs sms_logger
Solutions:
python manage.py collectstatic --no-input --clear
sudo chown -R www-data:www-data /opt/jasmin-web-panel/public/
sudo nginx -t && sudo systemctl reload nginx# Docker Compose
docker compose logs -f jasmin-web
# Systemd
sudo journalctl -u jasmin-web.service -f- Telegram: Join our community β https://t.me/jasminwebpanel
- GitHub Issues: Report bugs or request features
- Email: [email protected]
We welcome contributions! To contribute:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
This project is licensed under the MIT License. See LICENSE file for details.
Made with β€οΈ for the Jasmin SMS Gateway community