{"id":35174234,"url":"https://github.com/skygenesisenterprise/aether-link","last_synced_at":"2026-05-21T19:34:12.405Z","repository":{"id":323872607,"uuid":"1094507465","full_name":"skygenesisenterprise/aether-link","owner":"skygenesisenterprise","description":"The communication backbone connecting users, devices, and services across the Aether network.","archived":false,"fork":false,"pushed_at":"2025-11-12T16:14:06.000Z","size":9138,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-05T20:39:49.075Z","etag":null,"topics":["c","docker","pbx","sip","typescript","voip","web-client"],"latest_commit_sha":null,"homepage":"https://skygenesisenterprise.com","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/skygenesisenterprise.png","metadata":{"files":{"readme":"README-Docker.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":".github/SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"patreon":null,"open_collective":"skygenesisenterprise","ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2025-11-11T19:56:28.000Z","updated_at":"2025-11-12T18:32:06.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/skygenesisenterprise/aether-link","commit_stats":null,"previous_names":["skygenesisenterprise/aether-link"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/skygenesisenterprise/aether-link","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skygenesisenterprise%2Faether-link","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skygenesisenterprise%2Faether-link/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skygenesisenterprise%2Faether-link/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skygenesisenterprise%2Faether-link/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skygenesisenterprise","download_url":"https://codeload.github.com/skygenesisenterprise/aether-link/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skygenesisenterprise%2Faether-link/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33311845,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-21T12:23:38.849Z","status":"ssl_error","status_checked_at":"2026-05-21T12:22:11.673Z","response_time":62,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["c","docker","pbx","sip","typescript","voip","web-client"],"created_at":"2025-12-28T21:50:58.504Z","updated_at":"2026-05-21T19:34:12.376Z","avatar_url":"https://github.com/skygenesisenterprise.png","language":"C","funding_links":["https://opencollective.com/skygenesisenterprise"],"categories":[],"sub_categories":[],"readme":"# 🚀 Aether Link - Dockerized PBX + Web Interface\n\nA modern telecommunications platform combining Asterisk PBX with a Next.js web client, containerized for easy deployment and development.\n\n## 📋 Features\n\n- **Asterisk PBX**: Full-featured telephony system\n- **Next.js Client**: Modern web interface for management\n- **Multi-container Architecture**: Asterisk + Web Client + Database\n- **Hot Reload**: Development-friendly with live updates\n- **Persistent Data**: PostgreSQL + Redis for data storage\n- **Easy Deployment**: Docker Compose with single command\n\n## 🏗️ Architecture\n\n```\n┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐\n│   Asterisk PBX  │    │  Next.js Client │    │   PostgreSQL    │\n│   (SIP/RTP)     │    │   (Web UI)      │    │   (Database)    │\n│                 │    │                 │    │                 │\n│ Port: 5060      │    │ Port: 3000      │    │ Port: 5432      │\n│ RTP: 10000-20000│    │ API: 8080       │    │                 │\n└─────────────────┘    └─────────────────┘    └─────────────────┘\n         │                       │                       │\n         └───────────────────────┼───────────────────────┘\n                                 │\n                    ┌─────────────────┐\n                    │      Redis      │\n                    │   (Cache/Sessions)│\n                    │                 │\n                    │ Port: 6379      │\n                    └─────────────────┘\n```\n\n## 🚀 Quick Start\n\n### Prerequisites\n\n- Docker \u0026 Docker Compose\n- Make (optional, for convenience commands)\n\n### Production Deployment\n\n```bash\n# Clone and navigate to the project\ngit clone \u003crepository-url\u003e\ncd aether-link\n\n# Start all services\nmake up\n\n# Or without make\ndocker-compose up -d\n\n# Check service health\nmake health\n```\n\n### Development Setup\n\n```bash\n# Start development environment with hot reload\nmake dev\n\n# Or without make\ndocker-compose -f docker-compose.dev.yml up --build\n```\n\n## 🌐 Access Points\n\nOnce started, you can access:\n\n- **Web Interface**: http://localhost:3000\n- **API Endpoints**: http://localhost:3000/api\n- **pgAdmin** (dev): http://localhost:5050\n- **Asterisk CLI**: `make asterisk`\n\n## 📱 Default Credentials\n\n- **Web Admin**: \n  - Username: `admin`\n  - Password: `admin123`\n- **PostgreSQL**:\n  - User: `aether`\n  - Password: `aether123`\n- **pgAdmin**:\n  - Email: `admin@aether-link.local`\n  - Password: `admin123`\n\n## 🛠️ Management Commands\n\n### Using Make (Recommended)\n\n```bash\n# Service Management\nmake up          # Start production\nmake down        # Stop services\nmake restart     # Restart services\nmake dev         # Start development\n\n# Monitoring\nmake logs        # View all logs\nmake health      # Check service health\nmake monitor     # Real-time monitoring\n\n# Access\nmake shell       # Container shell\nmake asterisk    # Asterisk CLI\nmake db-shell    # PostgreSQL shell\n\n# Database\nmake db-backup   # Backup database\nmake db-restore  # Restore database\n\n# Cleanup\nmake clean       # Clean containers and images\n```\n\n### Manual Docker Commands\n\n```bash\n# View logs\ndocker-compose logs -f\n\n# Access container\ndocker-compose exec aether-link /bin/bash\n\n# Asterisk CLI\ndocker-compose exec aether-link asterisk -rvvv\n\n# Database access\ndocker-compose exec postgres psql -U aether -d aether_link\n```\n\n## 📁 Directory Structure\n\n```\naether-link/\n├── client/                 # Next.js web application\n│   ├── src/               # React components and pages\n│   ├── public/            # Static assets\n│   └── package.json       # Node.js dependencies\n├── docker/                # Docker configuration files\n│   ├── supervisord.conf   # Process supervisor config\n│   ├── asterisk.conf      # Asterisk service config\n│   ├── nextjs.conf        # Next.js service config\n│   └── entrypoint.sh      # Container startup script\n├── config/                # Persistent configuration\n│   └── asterisk/          # Asterisk configuration files\n├── data/                  # Persistent data\n│   └── asterisk/          # Asterisk runtime data\n├── logs/                  # Log files\n│   ├── asterisk/          # Asterisk logs\n│   └── supervisor/        # Supervisor logs\n├── init-scripts/          # Database initialization\n├── docker-compose.yml     # Production compose file\n├── docker-compose.dev.yml # Development compose file\n├── Dockerfile            # Production image\n├── Dockerfile.dev        # Development image\n└── Makefile              # Convenience commands\n```\n\n## 🔧 Configuration\n\n### Environment Variables\n\nKey environment variables in `docker-compose.yml`:\n\n```yaml\nenvironment:\n  - NODE_ENV=production\n  - NEXT_PUBLIC_AETHER_LINK_PROTOCOL=http\n  - NEXT_PUBLIC_AETHER_LINK_HOST=localhost\n  - NEXT_PUBLIC_AETHER_LINK_PORT=8080\n  - NEXT_PUBLIC_AETHER_LINK_WS_PROTOCOL=ws\n  - NEXT_PUBLIC_AETHER_LINK_WS_PORT=8080\n```\n\n### Asterisk Configuration\n\nAsterisk configuration files are mounted from `./config/asterisk/`:\n\n- `sip.conf` - SIP endpoint configuration\n- `extensions.conf` - Dialplan rules\n- `pjsip.conf` - PJSIP configuration\n- `cdr.conf` - Call detail records\n\n### Database Configuration\n\nPostgreSQL initialization scripts in `./init-scripts/`:\n\n- `01-init-database.sql` - Database schema and initial data\n\n## 🔄 Development Workflow\n\n### 1. Making Changes to Web Client\n\n```bash\n# Start development environment\nmake dev\n\n# Make changes to files in client/\n# Changes will be hot-reloaded automatically\n```\n\n### 2. Modifying Asterisk Configuration\n\n```bash\n# Edit configuration files\nvim config/asterisk/sip.conf\n\n# Reload Asterisk configuration\nmake asterisk\n\u003e dialplan reload\n\u003e sip reload\n```\n\n### 3. Database Changes\n\n```bash\n# Create new migration script\nvim init-scripts/02-new-feature.sql\n\n# Recreate database (WARNING: This deletes data)\ndocker-compose down -v\ndocker-compose up -d\n```\n\n## 📊 Monitoring\n\n### Health Checks\n\n```bash\n# Check all services\nmake health\n\n# Individual service checks\ncurl http://localhost:3000/api/health\ndocker-compose exec aether-link asterisk -rx \"core show status\"\n```\n\n### Logs\n\n```bash\n# All logs\nmake logs\n\n# Specific service logs\nmake logs-asterisk\nmake logs-web\n\n# Real-time monitoring\nmake monitor\n```\n\n## 🔒 Security Considerations\n\n### Production Deployment\n\n1. **Change Default Passwords**: Update all default credentials\n2. **Network Security**: Use firewall rules to restrict access\n3. **SSL/TLS**: Configure HTTPS for web interface\n4. **SIP Security**: Use SRTP and secure SIP protocols\n5. **Database Security**: Limit database network exposure\n\n### Environment Variables\n\n```bash\n# Set strong passwords\nPOSTGRES_PASSWORD=your-secure-password\nREDIS_PASSWORD=your-redis-password\n\n# Use secure protocols\nNEXT_PUBLIC_AETHER_LINK_PROTOCOL=https\nNEXT_PUBLIC_AETHER_LINK_WS_PROTOCOL=wss\n```\n\n## 🚀 Scaling\n\n### Horizontal Scaling\n\n```yaml\n# In docker-compose.yml\nservices:\n  aether-link:\n    deploy:\n      replicas: 3\n    # Add load balancer configuration\n```\n\n### Resource Limits\n\n```yaml\nservices:\n  aether-link:\n    deploy:\n      resources:\n        limits:\n          cpus: '2.0'\n          memory: 2G\n        reservations:\n          cpus: '1.0'\n          memory: 1G\n```\n\n## 🐛 Troubleshooting\n\n### Common Issues\n\n1. **Port Conflicts**: Ensure ports 5060, 3000, 5432 are available\n2. **Permission Issues**: Check file permissions in mounted volumes\n3. **Database Connection**: Verify PostgreSQL is running and accessible\n4. **Asterisk Not Starting**: Check configuration files in `config/asterisk/`\n\n### Debug Commands\n\n```bash\n# Check container status\ndocker-compose ps\n\n# View detailed logs\ndocker-compose logs aether-link\n\n# Access container for debugging\nmake shell\n\n# Check Asterisk status\nasterisk -rx \"core show version\"\nasterisk -rx \"sip show peers\"\n```\n\n## 📚 Additional Resources\n\n- [Asterisk Documentation](https://docs.asterisk.org/)\n- [Next.js Documentation](https://nextjs.org/docs)\n- [Docker Documentation](https://docs.docker.com/)\n- [PostgreSQL Documentation](https://www.postgresql.org/docs/)\n\n## 🤝 Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Test with `make test`\n5. Submit a pull request\n\n## 📄 License\n\nThis project is licensed under the same terms as Asterisk - see the LICENSE file for details.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskygenesisenterprise%2Faether-link","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskygenesisenterprise%2Faether-link","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskygenesisenterprise%2Faether-link/lists"}