{"id":13405632,"url":"https://github.com/101t/jasmin-web-panel","last_synced_at":"2025-11-30T06:08:17.582Z","repository":{"id":39580539,"uuid":"212270500","full_name":"101t/jasmin-web-panel","owner":"101t","description":"📨 Jasmin Web Panel for Jasmin SMS Gateway","archived":false,"fork":false,"pushed_at":"2024-06-15T19:27:35.000Z","size":4635,"stargazers_count":79,"open_issues_count":3,"forks_count":75,"subscribers_count":15,"default_branch":"master","last_synced_at":"2024-07-31T19:46:50.948Z","etag":null,"topics":["django","django-rest-framework","gateway","hacktoberfest","jasmin","jasmin-sms-gateway","jasmin-web-panel","nginx","python","python3","smpp","smpp-server","sms","sms-api","sms-gateway"],"latest_commit_sha":null,"homepage":"https://youtu.be/z-BFJzWtq1M","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/101t.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"101t"}},"created_at":"2019-10-02T06:31:44.000Z","updated_at":"2024-07-21T02:20:20.000Z","dependencies_parsed_at":"2024-06-15T20:33:16.823Z","dependency_job_id":null,"html_url":"https://github.com/101t/jasmin-web-panel","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/101t%2Fjasmin-web-panel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/101t%2Fjasmin-web-panel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/101t%2Fjasmin-web-panel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/101t%2Fjasmin-web-panel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/101t","download_url":"https://codeload.github.com/101t/jasmin-web-panel/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229795874,"owners_count":18125286,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["django","django-rest-framework","gateway","hacktoberfest","jasmin","jasmin-sms-gateway","jasmin-web-panel","nginx","python","python3","smpp","smpp-server","sms","sms-api","sms-gateway"],"created_at":"2024-07-30T19:02:07.026Z","updated_at":"2025-11-30T06:08:17.567Z","avatar_url":"https://github.com/101t.png","language":"Python","funding_links":["https://github.com/sponsors/101t"],"categories":["Python"],"sub_categories":[],"readme":"# Jasmin Web Panel\n\n\u003cdiv align=\"center\"\u003e\n\n[![Build Status](https://travis-ci.org/101t/jasmin-web-panel.svg?branch=master)](https://travis-ci.org/101t/jasmin-web-panel)\n[![Docker Hub](https://img.shields.io/badge/docker-hub-blue.svg)](https://hub.docker.com/u/tarekaec)\n[![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)\n[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)\n\n**A modern, feature-rich web interface for managing [Jasmin SMS Gateway](https://github.com/jookies/jasmin)**\n\n[Features](#-features) • [Quick Start](#-quick-start) • [Installation](#-installation) • [Docker](#-docker-deployment) • [Support](#-support)\n\n\u003c/div\u003e\n\n---\n\n## 📋 Table of Contents\n\n- [Overview](#-overview)\n- [Features](#-features)\n- [Prerequisites](#-prerequisites)\n- [Quick Start](#-quick-start)\n- [Installation](#-installation)\n  - [Manual Installation](#manual-installation)\n  - [Docker Deployment](#-docker-deployment)\n  - [Docker Compose](#docker-compose-deployment)\n- [Configuration](#-configuration)\n- [Production Deployment](#-production-deployment)\n- [Submit Log Integration](#-submit-log-integration)\n- [Default Credentials](#-default-credentials)\n- [Troubleshooting](#-troubleshooting)\n- [Support](#-support)\n\n---\n\n## 🎯 Overview\n\nJasmin Web Panel is a comprehensive web-based management interface for [Jasmin SMS Gateway](https://github.com/jookies/jasmin). Built with Django and modern web technologies, it provides an intuitive dashboard to configure, monitor, and manage your SMS operations efficiently.\n\n---\n\n## ✨ Features\n\n### Core Functionality\n- 🚀 **Dashboard**: Real-time statistics and system health monitoring\n- 👥 **User Management**: Create and manage users with role-based access control\n- 📡 **SMPP Connectors**: Configure and monitor SMPP client/server connections\n- 🌐 **HTTP API**: Manage HTTP connectors for sending SMS via REST API\n- 🔀 **Message Routing**: Define routing rules and filters for message delivery\n- 📨 **MO/MT Routers**: Configure Mobile Originated and Mobile Terminated message routing\n\n### Monitoring \u0026 Analytics\n- 📊 **Submit Logs**: Comprehensive message tracking with advanced search and filtering\n  - Search by Message ID, Source/Destination address, UID, and content\n  - Filter by status: Success (`ESME_ROK`, `ESME_RINVNUMDESTS`), Failed (`ESME_RDELIVERYFAILURE`), Unknown\n  - Real-time statistics with color-coded status badges\n- 🔍 **Service Monitoring**: Monitor Jasmin gateway service health\n- 📈 **Real-time Status**: Live SMPP connector status monitoring\n\n### Advanced Features\n- 🔧 **RESTful API**: Programmatic access to all management functions\n- ⚡ **Rate Limiting**: Configure throughput limits per user/connector\n- 🔒 **Multi-tenancy**: Manage multiple clients/users\n- 📝 **Audit Logging**: Track all administrative actions\n- 🌍 **Internationalization**: Multi-language support ready\n- 📱 **Responsive Design**: Mobile-friendly interface\n\n---\n\n## 📦 Prerequisites\n\n### Required Components\n- **[Jasmin SMS Gateway](http://docs.jasminsms.com/en/latest/installation/index.html)**: v0.9+ installed and running\n- **Python**: 3.11 or higher\n- **Database**: PostgreSQL 12+ (recommended) or MySQL 8.0+\n- **Redis**: 6.0+ (for caching and Celery)\n- **RabbitMQ**: 3.10+ (for message queuing)\n\n### System Requirements\n- **OS**: Linux (Ubuntu 20.04+, Debian 11+, CentOS 8+)\n- **RAM**: Minimum 2GB (4GB+ recommended for production)\n- **Disk**: 10GB+ free space\n- **Network**: Connectivity to Jasmin telnet interface (default: port 8990)\n\n---\n\n## 🚀 Quick Start\n\n### Using Docker Compose (Recommended)\n\n```bash\n# Clone the repository\ngit clone https://github.com/101t/jasmin-web-panel.git\ncd jasmin-web-panel\n\n# Copy and configure environment file\ncp sample.env .env\n# Edit .env with your settings\n\n# Start all services\ndocker compose up -d\n\n# Access the web interface\nopen http://localhost:8999\n```\n\n**Default credentials**: `admin` / `secret` ⚠️ **Change immediately after first login!**\n\n---\n\n## 💻 Installation\n\n### Manual Installation\n\n#### 1. Clone and Setup Environment\n\n```bash\n# Clone repository\ngit clone https://github.com/101t/jasmin-web-panel.git\ncd jasmin-web-panel\n\n# Create virtual environment (recommended)\npython3 -m venv env\nsource env/bin/activate  # On Windows: env\\Scripts\\activate\n\n# Upgrade pip and install build tools\npip install --upgrade pip wheel uv\n\n# Install dependencies\nuv pip install -r pyproject.toml --extra=prod\n```\n\n#### 2. Configure Application\n\n```bash\n# Copy sample environment file\ncp sample.env .env\n\n# Edit .env with your configuration\nnano .env  # or use your preferred editor\n```\n\n**Essential configuration**:\n\n```ini\n# Django Settings\nDEBUG=False  # Always False in production\nSECRET_KEY=your-very-long-random-secret-key-here\nALLOWED_HOSTS=yourdomain.com,www.yourdomain.com\n\n# Database\nPRODB_URL=postgres://username:password@localhost:5432/jasmin_web_db\n\n# Jasmin Gateway Connection\nTELNET_HOST=127.0.0.1\nTELNET_PORT=8990\nTELNET_USERNAME=jcliadmin\nTELNET_PW=jclipwd\nTELNET_TIMEOUT=10\n\n# Redis for Cache \u0026 Celery\nREDIS_HOST=redis\nREDIS_PORT=6379\nREDIS_DB=0\nREDIS_PASSWORD=\u003cOptional\u003e\n\n# Submit Log Feature\nSUBMIT_LOG=True\n```\n\n#### 3. Initialize Database\n\n```bash\n# Run migrations\npython manage.py migrate\n\n# Load sample data (optional)\npython manage.py samples\n\n# Collect static files\npython manage.py collectstatic --no-input\n\n# Create superuser (optional)\npython manage.py createsuperuser\n```\n\n#### 4. Run Development Server\n\n```bash\npython manage.py runserver 0.0.0.0:8000\n```\n\nAccess the application at `http://localhost:8000`\n\n---\n\n## 🐳 Docker Deployment\n\n### Using Pre-built Image\n\n```bash\n# Pull the latest image\ndocker pull tarekaec/jasmin_web_panel:1.4\n\n# Configure environment\ncp sample.env .env\n# Edit .env with your settings\n\n# Run container\ndocker run -d \\\n  --name jasmin-web \\\n  -p 8999:8000 \\\n  --env-file .env \\\n  -v ./public:/app/public \\\n  tarekaec/jasmin_web_panel:1.4\n```\n\n### Building Custom Image\n\n```bash\n# Build from Dockerfile\ndocker build -f config/docker/slim/Dockerfile -t jasmin_web_panel:custom .\n\n# Run your custom image\ndocker run -d \\\n  --name jasmin-web \\\n  -p 8999:8000 \\\n  --env-file .env \\\n  jasmin_web_panel:custom\n```\n\n### Docker Compose Deployment\n\nFull stack deployment with all dependencies:\n\n```bash\n# Ensure .env is configured\ncp sample.env .env\n\n# Start all services\ndocker compose up -d\n\n# View logs\ndocker compose logs -f jasmin-web\n\n# Check service status\ndocker compose ps\n\n# Stop all services\ndocker compose down\n```\n\n**Services included**:\n- `jasmin-web`: Web application (port 8999)\n- `jasmin-celery`: Background task processor\n- `db`: PostgreSQL database\n- `redis`: Redis cache\n- `rabbit-mq`: RabbitMQ message broker\n- `jasmin`: Jasmin SMS Gateway (ports 2775, 8990, 1401)\n- `sms_logger`: SMS submit log collector\n\n#### ARM64/AArch64 Support\n\nFor ARM-based systems:\n\n1. Comment out line 38 in `config/docker/slim/Dockerfile`:\n   ```dockerfile\n   # ENV LD_PRELOAD /usr/lib/x86_64-linux-gnu/libjemalloc.so.2\n   ```\n\n2. Start services:\n   ```bash\n   docker compose up -d\n   ```\n\n---\n\n## ⚙️ Configuration\n\n### Environment Variables Reference\n\n| Variable | Description | Default | Required |\n|----------|-------------|---------|----------|\n| `DEBUG` | Enable debug mode | `False` | ✅ |\n| `SECRET_KEY` | Django secret key | - | ✅ |\n| `ALLOWED_HOSTS` | Allowed hosts | `*` | ✅ |\n| `PRODB_URL` | PostgreSQL URL | - | ✅ |\n| `REDIS_HOST` | Redis host | `redis` | ✅ |\n| `REDIS_PORT` | Redis port | `6379` | ✅ |\n| `REDIS_DB` | Redis database | `0` | ✅ |\n| `TELNET_HOST` | Jasmin telnet host | `127.0.0.1` | ✅ |\n| `TELNET_PORT` | Jasmin telnet port | `8990` | ✅ |\n| `TELNET_USERNAME` | Jasmin admin username | `jcliadmin` | ✅ |\n| `TELNET_PW` | Jasmin admin password | `jclipwd` | ✅ |\n| `SUBMIT_LOG` | Enable submit log tracking | `False` | ❌ |\n\n### Jasmin Gateway Configuration\n\nEnsure Jasmin is configured properly:\n\n1. Enable `submit_sm_resp` publishing in `jasmin.cfg`:\n   ```ini\n   [sm-listener]\n   publish_submit_sm_resp = True\n   ```\n\n2. Restart Jasmin:\n   ```bash\n   systemctl restart jasmin\n   ```\n\n---\n\n## 🚀 Production Deployment\n\n### Nginx \u0026 Systemd Setup\n\n#### 1. Create Systemd Service\n\nCreate `/etc/systemd/system/jasmin-web.service`:\n\n```ini\n[Unit]\nDescription=Jasmin Web Panel\nRequires=postgresql.service\nAfter=network.target postgresql.service\n\n[Service]\nType=simple\nSyslogIdentifier=jasminwebpanel\nUser=www-data\nGroup=www-data\nWorkingDirectory=/opt/jasmin-web-panel\nEnvironment=\"DJANGO_SETTINGS_MODULE=config.settings.pro\"\nExecStart=/opt/jasmin-web-panel/env/bin/gunicorn \\\n    --bind 127.0.0.1:8000 \\\n    --workers 4 \\\n    --timeout 120 \\\n    --log-level info \\\n    --access-logfile /opt/jasmin-web-panel/logs/gunicorn.log \\\n    --error-logfile /opt/jasmin-web-panel/logs/gunicorn_error.log \\\n    config.wsgi:application\nRestart=on-failure\nRestartSec=10\n\n[Install]\nWantedBy=multi-user.target\n```\n\n#### 2. Enable and Start Service\n\n```bash\nsudo systemctl daemon-reload\nsudo systemctl enable jasmin-web.service\nsudo systemctl start jasmin-web.service\nsudo systemctl status jasmin-web.service\n```\n\n#### 3. Configure Nginx\n\nCreate `/etc/nginx/sites-available/jasmin_web`:\n\n```nginx\nupstream jasmin_web {\n    server 127.0.0.1:8000;\n}\n\nserver {\n    listen 80;\n    server_name sms.yourdomain.com;  # Replace with your domain\n    charset utf-8;\n    \n    # Security headers\n    add_header X-Frame-Options \"SAMEORIGIN\" always;\n    add_header X-Content-Type-Options \"nosniff\" always;\n    add_header X-XSS-Protection \"1; mode=block\" always;\n    \n    # Logging\n    access_log /var/log/nginx/jasmin_web_access.log combined;\n    error_log /var/log/nginx/jasmin_web_error.log;\n    \n    # Static files\n    location /static/ {\n        alias /opt/jasmin-web-panel/public/static/;\n        expires 30d;\n        add_header Cache-Control \"public, immutable\";\n    }\n    \n    # Media files\n    location /media/ {\n        alias /opt/jasmin-web-panel/public/media/;\n    }\n    \n    # Proxy to Django\n    location / {\n        proxy_pass http://jasmin_web;\n        proxy_http_version 1.1;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_buffering off;\n        client_max_body_size 20M;\n    }\n}\n```\n\n#### 4. Enable Nginx Configuration\n\n```bash\nsudo ln -s /etc/nginx/sites-available/jasmin_web /etc/nginx/sites-enabled/\nsudo nginx -t\nsudo systemctl reload nginx\n```\n\n#### 5. Setup SSL (Recommended)\n\n```bash\nsudo apt install certbot python3-certbot-nginx\nsudo certbot --nginx -d sms.yourdomain.com\n```\n\n---\n\n## 📊 Submit Log Integration\n\nTrack all SMS messages submitted through Jasmin Gateway with detailed status information.\n\n### Setup Instructions\n\n1. **Enable in configuration**:\n   ```ini\n   SUBMIT_LOG=True\n   ```\n\n2. **Configure SMS Logger**:\n   ```ini\n   DB_HOST=db\n   DB_DATABASE=jasmin\n   DB_USER=jasmin\n   DB_PASS=jasmin\n   DB_TABLE=submit_log\n   ```\n\n### Features\n\n- ✅ **Real-time Tracking**: Monitor message submission and delivery status\n- 🔍 **Advanced Search**: Search by Message ID, addresses, UID, or content\n- 🎯 **Status Filtering**: \n  - Success: `ESME_ROK`, `ESME_RINVNUMDESTS`\n  - Failed: `ESME_RDELIVERYFAILURE`\n  - Unknown: All other status codes\n- 📈 **Statistics Dashboard**: View total, success, failed, and unknown counts\n- 🎨 **Color-coded Badges**: Visual status identification\n- 📄 **Pagination**: Handle large volumes efficiently\n\n---\n\n## 🔐 Default Credentials\n\n⚠️ **SECURITY WARNING**: Change default credentials immediately after first login!\n\n```\nUsername: admin\nPassword: secret\n```\n\n### Change Password\n\n**Via Web Interface**:\n1. Log in with default credentials\n2. Navigate to **Profile** → **Change Password**\n3. Enter new secure password\n\n**Via Command Line**:\n```bash\npython manage.py changepassword admin\n```\n\n---\n\n## 🔧 Troubleshooting\n\n### Cannot connect to Jasmin Gateway\n\n**Solutions**:\n- Verify Jasmin is running: `systemctl status jasmin`\n- Check telnet connectivity: `telnet localhost 8990`\n- Confirm `TELNET_*` settings match Jasmin configuration\n- Ensure firewall allows port 8990\n\n### Submit logs not appearing\n\n**Solutions**:\n- Verify `SUBMIT_LOG=True` in `.env`\n- Check SMS Logger service: `docker compose ps sms_logger`\n- Confirm `publish_submit_sm_resp = True` in `jasmin.cfg`\n- Check logs: `docker compose logs sms_logger`\n\n### Static files not loading\n\n**Solutions**:\n```bash\npython manage.py collectstatic --no-input --clear\nsudo chown -R www-data:www-data /opt/jasmin-web-panel/public/\nsudo nginx -t \u0026\u0026 sudo systemctl reload nginx\n```\n\n### View Application Logs\n\n```bash\n# Docker Compose\ndocker compose logs -f jasmin-web\n\n# Systemd\nsudo journalctl -u jasmin-web.service -f\n```\n\n---\n\n## 💬 Support\n\n### Community Support\n\n- **Telegram**: Join our community → [https://t.me/jasminwebpanel](https://t.me/jasminwebpanel)\n- **GitHub Issues**: [Report bugs or request features](https://github.com/101t/jasmin-web-panel/issues)\n- **Email**: [tarek.it.eng@gmail.com](mailto:tarek.it.eng@gmail.com)\n\n### Contributing\n\nWe welcome contributions! To contribute:\n\n1. Fork the repository\n2. Create a feature branch: `git checkout -b feature/amazing-feature`\n3. Commit your changes: `git commit -m 'Add amazing feature'`\n4. Push to the branch: `git push origin feature/amazing-feature`\n5. Open a Pull Request\n\n---\n\n## 📄 License\n\nThis project is licensed under the MIT License. See [LICENSE](LICENSE) file for details.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**Made with ❤️ for the Jasmin SMS Gateway community**\n\n[⬆ Back to Top](#jasmin-web-panel)\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F101t%2Fjasmin-web-panel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F101t%2Fjasmin-web-panel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F101t%2Fjasmin-web-panel/lists"}