Skip to content

101t/jasmin-web-panel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Jasmin Web Panel

Build Status Docker Hub Python 3.11+ License

A modern, feature-rich web interface for managing Jasmin SMS Gateway

Features β€’ Quick Start β€’ Installation β€’ Docker β€’ Support


πŸ“‹ Table of Contents


🎯 Overview

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.


✨ Features

Core Functionality

  • πŸš€ 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

Monitoring & Analytics

  • πŸ“Š 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

Advanced Features

  • πŸ”§ 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

πŸ“¦ Prerequisites

Required Components

  • 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)

System Requirements

  • 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)

πŸš€ Quick Start

Using Docker Compose (Recommended)

# 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:8999

Default credentials: admin / secret ⚠️ Change immediately after first login!


πŸ’» Installation

Manual Installation

1. Clone and Setup Environment

# 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

2. Configure Application

# Copy sample environment file
cp sample.env .env

# Edit .env with your configuration
nano .env  # or use your preferred editor

Essential 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

3. Initialize Database

# 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 createsuperuser

4. Run Development Server

python manage.py runserver 0.0.0.0:8000

Access the application at http://localhost:8000


🐳 Docker Deployment

Using Pre-built Image

# 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

Building Custom Image

# 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:custom

Docker Compose Deployment

Full 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 down

Services included:

  • jasmin-web: Web application (port 8999)
  • jasmin-celery: Background task processor
  • db: PostgreSQL database
  • redis: Redis cache
  • rabbit-mq: RabbitMQ message broker
  • jasmin: Jasmin SMS Gateway (ports 2775, 8990, 1401)
  • sms_logger: SMS submit log collector

ARM64/AArch64 Support

For ARM-based systems:

  1. Comment out line 38 in config/docker/slim/Dockerfile:

    # ENV LD_PRELOAD /usr/lib/x86_64-linux-gnu/libjemalloc.so.2
  2. Start services:

    docker compose up -d

βš™οΈ Configuration

Environment Variables Reference

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 ❌

Jasmin Gateway Configuration

Ensure Jasmin is configured properly:

  1. Enable submit_sm_resp publishing in jasmin.cfg:

    [sm-listener]
    publish_submit_sm_resp = True
  2. Restart Jasmin:

    systemctl restart jasmin

πŸš€ Production Deployment

Nginx & Systemd Setup

1. Create Systemd Service

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.target

2. Enable and Start Service

sudo systemctl daemon-reload
sudo systemctl enable jasmin-web.service
sudo systemctl start jasmin-web.service
sudo systemctl status jasmin-web.service

3. Configure Nginx

Create /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;
    }
}

4. Enable Nginx Configuration

sudo ln -s /etc/nginx/sites-available/jasmin_web /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

5. Setup SSL (Recommended)

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d sms.yourdomain.com

πŸ“Š Submit Log Integration

Track all SMS messages submitted through Jasmin Gateway with detailed status information.

Setup Instructions

  1. Enable in configuration:

    SUBMIT_LOG=True
  2. Configure SMS Logger:

    DB_HOST=db
    DB_DATABASE=jasmin
    DB_USER=jasmin
    DB_PASS=jasmin
    DB_TABLE=submit_log

Features

  • βœ… 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
  • πŸ“ˆ Statistics Dashboard: View total, success, failed, and unknown counts
  • 🎨 Color-coded Badges: Visual status identification
  • πŸ“„ Pagination: Handle large volumes efficiently

πŸ” Default Credentials

⚠️ SECURITY WARNING: Change default credentials immediately after first login!

Username: admin
Password: secret

Change Password

Via Web Interface:

  1. Log in with default credentials
  2. Navigate to Profile β†’ Change Password
  3. Enter new secure password

Via Command Line:

python manage.py changepassword admin

πŸ”§ Troubleshooting

Cannot connect to Jasmin Gateway

Solutions:

  • Verify Jasmin is running: systemctl status jasmin
  • Check telnet connectivity: telnet localhost 8990
  • Confirm TELNET_* settings match Jasmin configuration
  • Ensure firewall allows port 8990

Submit logs not appearing

Solutions:

  • Verify SUBMIT_LOG=True in .env
  • Check SMS Logger service: docker compose ps sms_logger
  • Confirm publish_submit_sm_resp = True in jasmin.cfg
  • Check logs: docker compose logs sms_logger

Static files not loading

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

View Application Logs

# Docker Compose
docker compose logs -f jasmin-web

# Systemd
sudo journalctl -u jasmin-web.service -f

πŸ’¬ Support

Community Support

Contributing

We welcome contributions! To contribute:

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Commit your changes: git commit -m 'Add amazing feature'
  4. Push to the branch: git push origin feature/amazing-feature
  5. Open a Pull Request

πŸ“„ License

This project is licensed under the MIT License. See LICENSE file for details.


Made with ❀️ for the Jasmin SMS Gateway community

⬆ Back to Top