{"id":32692803,"url":"https://github.com/andrewtimmins/hosting-panel","last_synced_at":"2026-05-01T21:05:43.026Z","repository":{"id":321407138,"uuid":"1085716345","full_name":"andrewtimmins/hosting-panel","owner":"andrewtimmins","description":"A comprehensive web-based control panel for managing Nginx websites, MySQL databases, PowerDNS zones, and system services on Ubuntu servers.","archived":false,"fork":false,"pushed_at":"2025-10-29T12:37:54.000Z","size":140,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-29T14:35:26.607Z","etag":null,"topics":["admin","hosting","mysql","nginx","panel","php","powerdns","ubuntu","webhosting"],"latest_commit_sha":null,"homepage":"","language":"PHP","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/andrewtimmins.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-29T12:21:36.000Z","updated_at":"2025-10-29T12:39:01.000Z","dependencies_parsed_at":"2025-10-29T14:35:28.757Z","dependency_job_id":null,"html_url":"https://github.com/andrewtimmins/hosting-panel","commit_stats":null,"previous_names":["andrewtimmins/hosting-panel"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/andrewtimmins/hosting-panel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewtimmins%2Fhosting-panel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewtimmins%2Fhosting-panel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewtimmins%2Fhosting-panel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewtimmins%2Fhosting-panel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andrewtimmins","download_url":"https://codeload.github.com/andrewtimmins/hosting-panel/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewtimmins%2Fhosting-panel/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32512709,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["admin","hosting","mysql","nginx","panel","php","powerdns","ubuntu","webhosting"],"created_at":"2025-11-01T16:01:58.890Z","updated_at":"2026-05-01T21:05:43.013Z","avatar_url":"https://github.com/andrewtimmins.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WebAdmin Hosting Panel# WebAdmin - Complete Web Server Management Panel# WebAdmin - Web Server Management Panel\n\n\n\nA comprehensive web hosting management panel for Ubuntu servers with advanced backup capabilities, DNS management, and automated site deployment.\n\n\n\n## 🌟 Features![WebAdmin](https://img.shields.io/badge/Version-1.0-blue) ![Ubuntu](https://img.shields.io/badge/Ubuntu-22.04+-orange) ![PHP](https://img.shields.io/badge/PHP-8.3-purple) ![License](https://img.shields.io/badge/License-MIT-green)A comprehensive web-based control panel for managing Nginx websites, MySQL databases, PowerDNS zones, and system services on Ubuntu servers.\n\n\n\n### 🖥️ **Server Management**\n\n- **Multi-Site Hosting**: Manage unlimited websites with individual configurations\n\n- **Nginx Integration**: Automatic virtual host configuration and SSL setupA comprehensive web-based control panel for managing Nginx websites, MySQL databases, PowerDNS zones, and system services on Ubuntu servers. Built with modern PHP 8.3, featuring an async backup system and intuitive web interface.## Features\n\n- **PHP 8.3 Support**: Modern PHP with configurable settings per site\n\n- **Database Management**: MariaDB integration with user and database controls\n\n- **SSL Automation**: Let's Encrypt certificate management with auto-renewal\n\n- **File Management**: Built-in file manager with syntax highlighting for 25+ file types## 🚀 Features- **Website Management**: Create, configure, and manage Nginx virtual hosts\n\n\n\n### 🌐 **DNS Management**  - **PHP Configuration**: Per-site PHP settings (version, memory limit, upload size, execution time, custom directives)\n\n- **PowerDNS Integration**: Complete DNS zone and record management\n\n- **DNSSEC Support**: Built-in DNSSEC capabilities for enhanced security### Website Management- **Varnish Cache**: Optional Varnish cache integration with customizable cache rules\n\n- **Zone Templates**: Quick setup for common DNS configurations\n\n- **Real-time Updates**: Instant DNS propagation and monitoring- **Nginx Virtual Hosts**: Create and manage multiple websites- **SSL Certificates**: Automated Let's Encrypt SSL certificate management with Certbot\n\n\n\n### 💾 **Advanced Backup System**- **SSL Certificates**: Automated Let's Encrypt integration with Certbot- **Cron Jobs**: Create and manage scheduled tasks per website with custom schedules\n\n- **Async Processing**: Queue-based backup system with background workers\n\n- **Real-time Progress**: Live progress tracking with visual indicators- **PHP Configuration**: Per-site PHP-FPM configuration- **Database Management**: Create, manage, and link MySQL databases to websites\n\n- **Multiple Destinations**: Support for local, FTP, and S3-compatible storage\n\n- **Automated Scheduling**: Configurable backup schedules with retention policies- **Static \u0026 Dynamic Sites**: Support for HTML, PHP, WordPress, OpenCart- **DNS Management**: Full PowerDNS zone and record management\n\n- **Complete Coverage**: Backup websites, databases, and DNS zones\n\n- **No Timeouts**: Background processing eliminates PHP execution limits- **File Manager**: \n\n\n\n### 🎨 **User Interface**### Database Management  - Browse and navigate server directories\n\n- **Modern Design**: Clean, responsive interface with professional styling\n\n- **Dashboard**: System overview with statistics and quick actions- **MySQL/MariaDB**: Create and manage databases  - Create, edit, and delete files and folders\n\n- **Progress Tracking**: Real-time backup progress with completion indicators\n\n- **Mobile Friendly**: Responsive design works on all devices- **User Management**: Database user creation and permissions  - Upload and download files\n\n\n\n### 🚀 **Application Support**- **Site Linking**: Link databases to specific websites  - Download folders as ZIP archives\n\n- **WordPress**: Automated WordPress installation and management\n\n- **OpenCart**: E-commerce platform deployment and configuration- **Backup Integration**: Automatic database backup support  - Built-in code editor with syntax highlighting (Ace Editor)\n\n- **Static Sites**: Support for HTML, CSS, JavaScript applications\n\n- **Custom PHP**: Full PHP application hosting capabilities  - Support for 25+ file types (PHP, JS, CSS, HTML, JSON, YAML, etc.)\n\n\n\n## 📋 System Requirements### DNS Management    - File permissions and ownership management\n\n\n\n- **Operating System**: Ubuntu 22.04 LTS or higher- **PowerDNS Integration**: Full DNS zone management  - File search functionality\n\n- **Memory**: Minimum 2GB RAM (4GB recommended for multiple sites)\n\n- **Storage**: Minimum 10GB free disk space- **Record Types**: A, AAAA, CNAME, MX, TXT, NS, PTR records- **Backup System**: \n\n- **Network**: Internet connection for package installation and updates\n\n- **Access**: Root/sudo privileges for installation- **Zone Management**: Create, edit, and delete DNS zones  - Async queue-based backup processing\n\n\n\n## 🛠 Installation- **DNSSEC Support**: Built-in DNSSEC capabilities  - Backup websites, databases, and DNS zones\n\n\n\n### Quick Installation  - Local and SFTP storage destinations\n\n\n\n```bash### Advanced Backup System  - Scheduled backups with cron expressions\n\n# Clone from GitHub\n\ngit clone https://github.com/andrewtimmins/hosting-panel.git- **Async Processing**: Queue-based backup system with Supervisor  - Real-time progress tracking\n\ncd hosting-panel\n\n- **Multiple Types**: Website files, databases, DNS zones, or mixed- **CMS Installers**: One-click WordPress and OpenCart installation\n\n# Run the installer\n\nchmod +x install.sh- **Storage Options**: Local filesystem or SFTP remote storage- **Service Control**: Manage Nginx, PHP-FPM, MySQL, and PowerDNS services\n\nsudo ./install.sh\n\n```- **Real-time Progress**: Live backup progress tracking with visual indicators- **User Management**: Role-based access control (admin/user)\n\n\n\n### Alternative Download- **Scheduled Backups**: Cron-based automatic backup scheduling- **Logs Viewer**: Real-time access and error log viewing\n\n\n\n```bash- **No Timeouts**: Long-running backups without HTTP timeout issues\n\n# Download ZIP archive\n\nwget https://github.com/andrewtimmins/hosting-panel/archive/main.zip## System Requirements\n\nunzip main.zip\n\ncd hosting-panel-main### Content Management Systems\n\n\n\n# Run installer- **WordPress Installer**: One-click WordPress installation and setup- **Operating System**: Ubuntu 22.04 LTS or higher\n\nchmod +x install.sh\n\nsudo ./install.sh- **OpenCart Installer**: Automated e-commerce platform deployment- **RAM**: Minimum 2GB (4GB recommended)\n\n```\n\n- **Database Creation**: Automatic database and user creation- **Disk Space**: Minimum 10GB free space\n\n### Installation Process\n\n- **Configuration**: Pre-configured settings and admin accounts- **Network**: Internet connection for package installation\n\nThe installer will:\n\n\n\n1. **System Validation**: Check Ubuntu version compatibility\n\n2. **User Input**: Prompt for installation directory and credentials### System Management  ## Quick Installation\n\n3. **Package Installation**: Install Nginx, PHP 8.3, MariaDB, PowerDNS, Supervisor\n\n4. **Service Configuration**: Configure all services with optimal settings- **Service Control**: Manage Nginx, PHP-FPM, MySQL, PowerDNS\n\n5. **Database Setup**: Create database schema and admin user\n\n6. **Backup System**: Deploy background worker with Supervisor- **Log Viewing**: Real-time access and error log monitoring### 1. Download the Installer\n\n7. **Security**: Set proper file permissions and firewall rules\n\n8. **Verification**: Test all services and validate installation- **User Management**: Role-based access control (admin/user)\n\n\n\n### Post-Installation- **Security**: Scoped sudo permissions and secure session handling```bash\n\n\n\nAfter installation, access your panel at:# Download and extract (adjust URL to your distribution method)\n\n```\n\nhttp://your-server-ip## 📋 System Requirementscd /tmp\n\n```\n\n# wget https://example.com/webadmin-installer.tar.gz\n\nLogin with the admin credentials you created during installation.\n\n- **Operating System**: Ubuntu 22.04 LTS or higher# tar -xzf webadmin-installer.tar.gz\n\n## 🔧 Configuration\n\n- **Memory**: Minimum 2GB RAM (4GB recommended for multiple sites)# cd webadmin-installer\n\n### SSL Setup (Recommended)\n\n- **Storage**: Minimum 10GB free disk space```\n\n```bash\n\n# Install SSL certificate- **Network**: Internet connection for package installation and updates\n\nsudo certbot --nginx -d your-domain.com\n\n- **Access**: Root/sudo privileges for installation### 2. Run the Installation Script\n\n# Auto-renewal is configured automatically\n\nsudo systemctl status certbot.timer\n\n```\n\n## 🛠 Quick Installation\n\n### Firewall Configuration\n\n### 1. Download the Installer\n\n```bash\n\n# Allow web traffic```bash\n\nsudo ufw allow 80/tcp# Clone from GitHub\n\nsudo ufw allow 443/tcpgit clone https://github.com/andrewtimmins/hosting-panel.git\n\ncd hosting-panel\n\n# Allow DNS traffic\n\nsudo ufw allow 53/tcp# Or download and extract zip\n\nsudo ufw allow 53/udpwget https://github.com/andrewtimmins/hosting-panel/archive/main.zip\n\nunzip main.zip\n\n# Enable firewallcd hosting-panel-main\n\nsudo ufw enable```\n\n```\n\n### 2. Run the Installation Script\n\n### Service Management\n\n```bash\n\n```bash# Make the installer executable\n\n# Check all serviceschmod +x install.sh\n\nsudo systemctl status nginx php8.3-fpm mariadb pdns supervisor\n\n# Run the installer as root\n\n# Restart servicessudo ./install.sh\n\nsudo systemctl restart nginx php8.3-fpm mariadb```\n\n\n\n# Check backup workerThe installer will:\n\nsudo supervisorctl status webadmin-backup-worker1. Check Ubuntu version compatibility\n\n```2. Prompt for installation directory and database credentials\n\n3. Install all required packages\n\n## 🗄️ Architecture4. Configure Nginx, PHP-FPM, MariaDB, PowerDNS, and Supervisor\n\n5. Import the database schema\n\n### Components6. Create the admin user\n\n7. Set up the backup worker daemon\n\n- **Nginx**: High-performance web server and reverse proxy8. Configure system permissions\n\n- **PHP 8.3-FPM**: Modern PHP with FastCGI Process Manager\n\n- **MariaDB**: Reliable MySQL-compatible database server### 3. Access WebAdmin\n\n- **PowerDNS**: Authoritative DNS server with MySQL backend\n\n- **Supervisor**: Process manager for background workersAfter installation, access your panel at:\n\n- **Certbot**: Automated SSL certificate management```\n\nhttp://your-server-ip\n\n### Backup System\n\n```\n\nThe async backup system uses:\n\n- **Queue System**: Database-driven job queue with priority support# Run the installer as root\n\n- **Background Worker**: Supervisor-managed PHP daemon\n\n- **Progress Tracking**: Real-time status updates in databasesudo ./install.shLogin with the credentials you created during installation.\n\n- **Lock Management**: `SELECT...FOR UPDATE SKIP LOCKED` for concurrency\n\n- **Destination Flexibility**: Support for multiple storage backends```\n\n\n\n### Security Features## Manual Installation\n\n\n\n- **Firewall Integration**: UFW configuration for web and DNS traffic### 3. Follow the Setup Wizard\n\n- **SSL Enforcement**: Automatic HTTPS redirects when SSL is enabled\n\n- **Database Security**: Secure random passwords and limited privilegesIf you prefer manual installation or need to customize the setup:\n\n- **File Permissions**: Proper ownership and access controls\n\n- **Process Isolation**: Separate PHP-FPM pools per applicationThe installer will prompt you for:\n\n\n\n## 📁 Directory Structure- **Installation directory** (default: `/var/www/webadmin`)### Install Required Packages\n\n\n\n```- **Database configuration** (name, user, password)\n\n/var/www/webadmin/          # Main application directory\n\n├── api.php                 # REST API endpoints- **Admin account details** (username, email, password)```bash\n\n├── index.php               # Main interface\n\n├── bootstrap.php           # Application bootstrap- **Server domain/IP** for accesssudo apt update \u0026\u0026 sudo apt upgrade -y\n\n├── backup-worker.php       # Background worker daemon\n\n├── assets/                 # Static assets (CSS, JS, images)\n\n├── config/                 # Configuration files\n\n├── logs/                   # Application logs### 4. Access WebAdminsudo apt install -y \\\n\n├── src/                    # PHP source code\n\n│   ├── Database/           # Database classes and migrations    nginx \\\n\n│   ├── Services/           # Business logic services\n\n│   └── Support/            # Helper classesAfter installation completes:    php8.3-fpm \\\n\n└── templates/              # Configuration templates\n\n``````    php8.3-cli \\\n\n\n\n## 🚀 Usagehttp://your-server-ip    php8.3-mysql \\\n\n\n\n### Creating a Website```    php8.3-mbstring \\\n\n\n\n1. **Add Site**: Navigate to \"Sites\" and click \"Add New Site\"    php8.3-xml \\\n\n2. **Configure Domain**: Enter domain name and document root\n\n3. **PHP Settings**: Choose PHP version and configure settingsLog in with the admin credentials you created during installation.    php8.3-curl \\\n\n4. **SSL Setup**: Enable SSL and configure certificates\n\n5. **DNS Setup**: Add DNS records if using integrated PowerDNS    php8.3-zip \\\n\n\n\n### Managing Backups## 📖 What Gets Installed    mariadb-server \\\n\n\n\n1. **Configure Destinations**: Set up backup storage locations    mariadb-client \\\n\n2. **Create Backup Job**: Define what to backup and schedule\n\n3. **Monitor Progress**: Real-time progress tracking in the interface### Software Packages    pdns-server \\\n\n4. **Restore Data**: Use backup files to restore sites or databases\n\n- **Nginx**: Web server and reverse proxy    pdns-backend-mysql \\\n\n### DNS Management\n\n- **PHP 8.3**: With FPM, MySQL, curl, zip, gd, intl extensions    supervisor \\\n\n1. **Create Zone**: Add DNS zone for your domain\n\n2. **Add Records**: Configure A, CNAME, MX, and other DNS records- **MariaDB**: MySQL-compatible database server    certbot \\\n\n3. **DNSSEC**: Enable DNSSEC for enhanced security\n\n4. **Monitor**: Check DNS propagation and resolution- **PowerDNS**: Authoritative DNS server with MySQL backend    python3-certbot-nginx \\\n\n\n\n## 🔍 Troubleshooting- **Supervisor**: Process manager for backup worker daemon    varnish \\\n\n\n\n### Common Issues- **Certbot**: Let's Encrypt SSL certificate automation    zip \\\n\n\n\n**Services not starting:**- **System Tools**: tar, gzip, curl, wget, unzip    unzip \\\n\n```bash\n\n# Check service status    cron\n\nsudo systemctl status nginx php8.3-fpm mariadb pdns\n\n### Directory Structure```\n\n# Check logs\n\nsudo journalctl -u nginx -f```\n\nsudo journalctl -u php8.3-fpm -f\n\n```/var/www/webadmin/          # Main application### Create Database\n\n\n\n**Backup worker not running:**├── config/                 # Configuration files\n\n```bash\n\n# Check Supervisor status├── assets/                 # CSS, JS, images```bash\n\nsudo supervisorctl status webadmin-backup-worker\n\n├── src/                    # PHP classes and servicessudo mysql -u root -p\n\n# Restart worker\n\nsudo supervisorctl restart webadmin-backup-worker├── templates/              # Nginx configuration templates```\n\n\n\n# Check worker logs├── logs/                   # Application logs\n\nsudo tail -f /var/log/supervisor/webadmin-backup-worker.log\n\n```├── *.php                   # Main application files```sql\n\n\n\n**Database connection issues:**└── backup-worker.php       # Async backup daemonCREATE DATABASE webadmin CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\n\n```bash\n\n# Test database connectionCREATE USER 'webadmin'@'localhost' IDENTIFIED BY 'your-password';\n\nsudo mysql -u root -p\n\n/var/www/websites/          # Website filesGRANT ALL PRIVILEGES ON webadmin.* TO 'webadmin'@'localhost';\n\n# Check PHP configuration\n\nphp -m | grep mysql/var/www/backups/           # Backup storageFLUSH PRIVILEGES;\n\n```\n\n```EXIT;\n\n**Permission errors:**\n\n```bash```\n\n# Fix file permissions\n\nsudo chown -R www-data:www-data /var/www/webadmin### Database Schema\n\nsudo chmod -R 755 /var/www/webadmin\n\nsudo chmod -R 644 /var/www/webadmin/config/- **User Management**: users, user_sessions tables### Import Schema\n\n```\n\n- **Website Management**: sites, site_configurations, site_databases\n\n### Log Locations\n\n- **DNS Management**: domains, records (PowerDNS schema)```bash\n\n- **Application**: `/var/www/webadmin/logs/`\n\n- **Nginx**: `/var/log/nginx/`- **Backup System**: backup_destinations, backup_history, backup_queuesudo mysql -u root -p webadmin \u003c database/schema.sql\n\n- **PHP-FPM**: `/var/log/php8.3-fpm.log`\n\n- **MariaDB**: `/var/log/mysql/`- **System**: settings, actions_log tables```\n\n- **PowerDNS**: `/var/log/pdns/`\n\n- **Supervisor**: `/var/log/supervisor/`\n\n\n\n## 🔄 Updating### System Configuration### Copy Application Files\n\n\n\n### Application Updates- **Nginx**: Virtual host for WebAdmin panel\n\n\n\n```bash- **PHP-FPM**: Optimized for web applications```bash\n\n# Backup current installation\n\nsudo cp -r /var/www/webadmin /var/www/webadmin.backup- **Sudoers**: Scoped permissions for www-data usersudo mkdir -p /websites/webadmin\n\n\n\n# Download latest version- **Supervisor**: Backup worker daemon managementsudo cp -r app/* /websites/webadmin/\n\ncd /tmp\n\ngit clone https://github.com/andrewtimmins/hosting-panel.git- **PowerDNS**: MySQL backend configurationsudo mkdir -p /websites/webadmin/logs\n\ncd hosting-panel\n\n- **SSL**: Ready for Let's Encrypt certificatessudo mkdir -p /websites/backups\n\n# Run update (preserves configuration)\n\nsudo ./update.sh```\n\n```\n\n## 🔧 Post-Installation Setup\n\n### System Updates\n\n### Configure Application\n\n```bash\n\n# Update packages### 1. Configure SSL (Recommended)\n\nsudo apt update \u0026\u0026 sudo apt upgrade -y\n\n```bash\n\n# Restart services after updates\n\nsudo systemctl restart nginx php8.3-fpm mariadb pdns supervisor```bashsudo cp config/config.php.template /websites/webadmin/config/config.php\n\n```\n\n# For domain-based access```\n\n## 🗑️ Uninstallation\n\nsudo certbot --nginx -d your-domain.com\n\nTo completely remove WebAdmin:\n\nEdit `/websites/webadmin/config/config.php` and update database credentials.\n\n```bash\n\n# Stop services# The installer configures SSL-ready Nginx settings\n\nsudo systemctl stop nginx php8.3-fpm mariadb pdns supervisor\n\n```### Configure Nginx\n\n# Remove application files\n\nsudo rm -rf /var/www/webadmin\n\n\n\n# Remove configuration### 2. Configure Firewall```bash\n\nsudo rm /etc/nginx/sites-enabled/webadmin\n\nsudo rm /etc/supervisor/conf.d/webadmin-backup-worker.confsudo cp config/nginx-site.conf /etc/nginx/sites-available/webadmin\n\n\n\n# Remove database (WARNING: This deletes all data)```bashsudo sed -i 's|{{INSTALL_DIR}}|/websites/webadmin|g' /etc/nginx/sites-available/webadmin\n\nsudo mysql -u root -p -e \"DROP DATABASE webadmin; DROP USER 'webadmin'@'localhost';\"\n\n# Allow web trafficsudo ln -s /etc/nginx/sites-available/webadmin /etc/nginx/sites-enabled/\n\n# Remove packages (optional)\n\nsudo apt remove --purge nginx php8.3-fpm mariadb-server pdns-server supervisorsudo ufw allow 80/tcpsudo rm -f /etc/nginx/sites-enabled/default\n\n```\n\nsudo ufw allow 443/tcpsudo nginx -t \u0026\u0026 sudo systemctl reload nginx\n\n## 🆘 Support\n\n```\n\nFor issues, questions, or contributions:\n\n- Check the troubleshooting section above# Allow DNS traffic\n\n- Review log files in `/var/www/webadmin/logs/`\n\n- Check Supervisor logs: `/var/log/supervisor/webadmin-backup-worker.log`sudo ufw allow 53/tcp### Configure Sudoers\n\n- Check system logs: `sudo journalctl -f`\n\nsudo ufw allow 53/udp\n\n## 📄 License\n\n```bash\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n# Enable firewallsudo cp config/sudoers-webadmin /etc/sudoers.d/webadmin\n\n## 🙏 Credits\n\nsudo ufw enablesudo chmod 440 /etc/sudoers.d/webadmin\n\nBuilt with modern web technologies:\n\n- **PHP 8.3**: Modern PHP runtime with enhanced performance``````\n\n- **MariaDB**: Reliable MySQL-compatible database\n\n- **Nginx**: High-performance web server\n\n- **PowerDNS**: Authoritative DNS server\n\n- **Supervisor**: Process management and monitoring### 3. Set Up Backup Destinations### Configure Supervisor\n\n- **Let's Encrypt**: Free SSL certificates via Certbot\n\n\n\n## 📊 Project Information\n\n1. Log into WebAdmin```bash\n\n- **Repository**: https://github.com/andrewtimmins/hosting-panel\n\n- **Version**: 1.0.02. Navigate to **Backups → Destinations**sudo cp config/backup-worker.conf /etc/supervisor/conf.d/\n\n- **License**: MIT\n\n- **Author**: Andrew Timmins3. Configure additional storage locations:sudo sed -i 's|{{INSTALL_DIR}}|/websites/webadmin|g' /etc/supervisor/conf.d/backup-worker.conf\n\n- **Requirements**: Ubuntu 22.04+, 2GB RAM, 10GB Storage\n\n   - **Local**: Different paths for organizationsudo supervisorctl reread\n\n---\n\n   - **SFTP**: Remote server backup storagesudo supervisorctl update\n\n**WebAdmin Hosting Panel** - Professional web hosting management made simple.\nsudo supervisorctl start backup-worker\n\n### 4. Create Your First Website```\n\n\n\n1. Go to **Websites → Add Website**### Configure PowerDNS\n\n2. Enter domain name and configuration\n\n3. Upload files or install WordPress/OpenCart```bash\n\n4. Configure SSL certificatesudo tee /etc/powerdns/pdns.d/mysql.conf \u003e /dev/null \u003c\u003cEOF\n\n5. Link database if neededlaunch=gmysql\n\ngmysql-host=127.0.0.1\n\n## 🔍 Monitoring and Maintenancegmysql-port=3306\n\ngmysql-dbname=webadmin\n\n### Check System Statusgmysql-user=webadmin\n\ngmysql-password=your-password\n\n```bashgmysql-dnssec=yes\n\n# All services statusEOF\n\nsudo systemctl status nginx php8.3-fpm mariadb pdns supervisor\n\nsudo systemctl restart pdns\n\n# Backup worker status```\n\nsudo supervisorctl status webadmin-backup-worker\n\n### Create Admin User\n\n# View backup worker logs\n\nsudo tail -f /var/log/supervisor/webadmin-backup-worker.out.log```bash\n\n```php -r \"echo password_hash('your-password', PASSWORD_BCRYPT);\" \u003e /tmp/hash.txt\n\n```\n\n### Log Locations\n\n```bash\n\n- **WebAdmin Access**: `/var/www/webadmin/logs/nginx-access.log`sudo mysql -u root -p webadmin\n\n- **WebAdmin Errors**: `/var/www/webadmin/logs/nginx-error.log````\n\n- **Backup Worker**: `/var/log/supervisor/webadmin-backup-worker.*.log`\n\n- **Nginx**: `/var/log/nginx/````sql\n\n- **PHP-FPM**: `/var/log/php8.3-fpm.log`INSERT INTO users (username, email, password_hash, full_name, role, is_active)\n\n- **MariaDB**: `/var/log/mysql/`VALUES ('admin', 'admin@example.com', 'paste-hash-here', 'Administrator', 'admin', 1);\n\n```\n\n### Database Access\n\n### Set Permissions\n\n```bash\n\n# Connect to WebAdmin database```bash\n\nmysql -u your_db_user -p your_db_namesudo chown -R www-data:www-data /websites/webadmin\n\nsudo chown -R www-data:www-data /websites/backups\n\n# Or as rootsudo chmod -R 755 /websites/webadmin\n\nsudo mysql your_db_namesudo chmod -R 775 /websites/webadmin/logs\n\n```sudo chmod -R 775 /websites/backups\n\n```\n\n## 🛡 Security Features\n\n## Post-Installation\n\n### Access Control\n\n- **Role-based permissions**: Admin and user roles### Secure MySQL\n\n- **Session management**: Secure session handling with expiration\n\n- **Password hashing**: BCrypt with proper salt```bash\n\nsudo mysql_secure_installation\n\n### System Security```\n\n- **Scoped sudo**: Minimal required permissions for www-data\n\n- **Input validation**: Server-side validation for all inputs### Configure Firewall\n\n- **SQL injection protection**: PDO prepared statements\n\n- **XSS protection**: Output escaping and security headers```bash\n\nsudo ufw allow 80/tcp\n\n### File Securitysudo ufw allow 443/tcp\n\n- **Permission management**: Proper file and directory permissionssudo ufw allow 53/tcp\n\n- **Backup security**: Secure temporary file handlingsudo ufw allow 53/udp\n\n- **Configuration protection**: Protected config filessudo ufw enable\n\n```\n\n## 🔄 Backup System Architecture\n\n### Set Up SSL (Recommended)\n\n### Async Processing\n\n- **Queue-based**: Jobs queued in database, processed by background workerAfter installation, you can configure SSL for the WebAdmin panel:\n\n- **Supervisor-managed**: Auto-restart on failure, persistent daemon\n\n- **No HTTP timeouts**: Backups run independently of web requests1. Update `/etc/nginx/sites-available/webadmin` with your domain name\n\n- **Progress tracking**: Real-time status updates with visual progress2. Run: `sudo certbot --nginx -d your-domain.com`\n\n\n\n### Backup Types### Configure Backup Destinations\n\n- **Website Files**: Complete file system backup with tar/gzip\n\n- **Databases**: MySQL dumps with compression1. Log in to WebAdmin\n\n- **DNS Zones**: PowerDNS zone exports2. Navigate to Backups → Backup Destinations\n\n- **Mixed Backups**: Combined websites, databases, and DNS3. Create a backup destination (local or SFTP)\n\n4. Set as default if desired\n\n### Storage Options\n\n- **Local Storage**: Filesystem paths with configurable locations### Monitor Services\n\n- **SFTP Storage**: Remote server backup with authentication\n\n- **Retention Policies**: Automatic cleanup of old backups```bash\n\n# Check backup worker status\n\n## 🚨 Troubleshootingsudo supervisorctl status backup-worker\n\n\n\n### Installation Issues# View backup worker logs\n\nsudo tail -f /var/log/supervisor/backup-worker.out.log\n\n**Package installation fails**:\n\n```bash# Check Nginx status\n\nsudo apt updatesudo systemctl status nginx\n\nsudo apt upgrade\n\n# Re-run installer# Check PHP-FPM status\n\n```sudo systemctl status php8.3-fpm\n\n\n\n**Database connection issues**:# Check PowerDNS status\n\n```bashsudo systemctl status pdns\n\n# Check MariaDB status```\n\nsudo systemctl status mariadb\n\n## Architecture\n\n# Reset root password\n\nsudo mysql_secure_installation### PHP Configuration Management\n\n```\n\nWebAdmin allows granular PHP configuration per website:\n\n### Runtime Issues\n\n- **Version Selection**: Choose PHP version per site (supports multiple PHP-FPM versions)\n\n**Nginx configuration errors**:- **Memory Limits**: Configure memory_limit (e.g., 256M, 512M, 1G)\n\n```bash- **Upload Settings**: Set upload_max_filesize and post_max_size independently\n\n# Test configuration- **Execution Times**: Configure max_execution_time and max_input_time\n\nsudo nginx -t- **Custom Directives**: Add any PHP INI settings as JSON (e.g., opcache settings, error reporting)\n\n- **Pool Configuration**: Generates dedicated PHP-FPM pool config per site\n\n# Check error logs\n\nsudo tail -f /var/log/nginx/error.log### Varnish Cache Integration\n\n```\n\nOptional Varnish cache support for high-performance websites:\n\n**Backup worker not running**:\n\n```bash- **Cache Rules**: Define what to cache (static files, pages, etc.)\n\n# Check supervisor status- **Bypass Rules**: Exclude admin areas, login pages, cookies\n\nsudo supervisorctl status webadmin-backup-worker- **TTL Configuration**: Set cache lifetime per content type\n\n- **Cache Purging**: Manual cache clearing per site\n\n# Restart worker- **Backend Integration**: Seamless Nginx → Varnish → PHP-FPM setup\n\nsudo supervisorctl restart webadmin-backup-worker\n\n### Cron Job Management\n\n# Check error logs\n\nsudo tail -f /var/log/supervisor/webadmin-backup-worker.err.logBuilt-in cron job scheduler for automated tasks:\n\n```\n\n- **Per-Site Jobs**: Create cron jobs specific to each website\n\n**Permission errors**:- **Flexible Scheduling**: Standard cron expressions (minute, hour, day, month, weekday)\n\n```bash- **User Context**: Run jobs as specific system users\n\n# Reset permissions- **Execution Tracking**: Last run time, next run time, exit codes\n\nsudo chown -R www-data:www-data /var/www/webadmin- **Output Logging**: Capture and store command output\n\nsudo chown -R www-data:www-data /var/www/websites- **Enable/Disable**: Toggle jobs without deleting them\n\nsudo chown -R www-data:www-data /var/www/backups\n\nsudo chmod -R 755 /var/www/webadmin### File Manager\n\nsudo chmod -R 775 /var/www/websites\n\nsudo chmod -R 775 /var/www/backupsThe File Manager provides a comprehensive interface for managing server files:\n\n```\n\n- **Modern UI**: Clean, responsive interface with breadcrumb navigation\n\n### Performance Issues- **Code Editor**: Integrated Ace Editor with syntax highlighting for 20+ programming languages\n\n- **Security**: Path traversal prevention and file extension validation\n\n**High memory usage**:- **File Operations**: Full CRUD support with ZIP compression for folders\n\n- Increase server RAM or optimize PHP-FPM settings- **Owner Display**: Shows file ownership (user:group) and permissions\n\n- Check for large backup operations- **Type Detection**: Automatic syntax mode detection based on file extensions\n\n\n\n**Slow backup operations**:Supported file types for editing:\n\n- Check disk I/O and available space- Web: HTML, CSS, JavaScript, TypeScript, JSX, TSX, Vue, SCSS, LESS, SVG\n\n- Consider backup scheduling during off-peak hours- Server: PHP, Python, Ruby, Shell scripts\n\n- Config: JSON, YAML, XML, INI, ENV, .htaccess\n\n## 🔄 Updates and Maintenance- Data: SQL, CSV, Markdown, Log files\n\n\n\n### Updating WebAdmin### Async Backup System\n\n\n\n1. **Backup current installation**:WebAdmin uses a sophisticated async backup system:\n\n   ```bash\n\n   # Backup database- **Queue-based**: Backups are queued and processed by a background worker\n\n   mysqldump -u root -p your_db_name \u003e webadmin-backup.sql- **Supervisor-managed**: The backup worker runs as a daemon, auto-restarts on failure\n\n   - **No timeouts**: Backups can run for hours without HTTP timeout issues\n\n   # Backup files- **Progress tracking**: Real-time progress updates stored in database\n\n   tar -czf webadmin-files-backup.tar.gz /var/www/webadmin- **Multiple backup types**: Sites, databases, DNS zones, or mixed\n\n   ```- **Flexible storage**: Local filesystem or SFTP remote storage\n\n\n\n2. **Download and apply updates**:### Security\n\n   ```bash\n\n   # Stop backup worker- **Sudo permissions**: Minimal, scoped sudo access for www-data user\n\n   sudo supervisorctl stop webadmin-backup-worker- **Password hashing**: BCrypt password hashing for user accounts\n\n   - **Session management**: Secure session handling with expiration\n\n   # Apply updates (preserve config.php)- **Role-based access**: Admin and user roles with different permissions\n\n   # Follow specific update instructions for each version- **Input validation**: Server-side validation for all user inputs\n\n   \n\n   # Restart services## Troubleshooting\n\n   sudo supervisorctl start webadmin-backup-worker\n\n   sudo systemctl reload nginx php8.3-fpm### Backup Worker Not Running\n\n   ```\n\n```bash\n\n### System Maintenancesudo supervisorctl status backup-worker\n\nsudo supervisorctl start backup-worker\n\n**Regular tasks**:sudo tail -f /var/log/supervisor/backup-worker.err.log\n\n- Monitor disk space in `/var/www/backups````\n\n- Check log file sizes and rotate if needed\n\n- Update system packages: `sudo apt update \u0026\u0026 sudo apt upgrade`### Nginx Configuration Errors\n\n- Review backup success rates and storage usage\n\n```bash\n\n## 🗑 Uninstallationsudo nginx -t\n\nsudo tail -f /var/log/nginx/error.log\n\nTo completely remove WebAdmin:```\n\n\n\n```bash### Database Connection Issues\n\n# Stop services\n\nsudo supervisorctl stop webadmin-backup-workerCheck credentials in `/websites/webadmin/config/config.php`\n\nsudo rm /etc/supervisor/conf.d/webadmin-backup-worker.conf\n\nsudo supervisorctl reread \u0026\u0026 sudo supervisorctl update```bash\n\nmysql -u webadmin -p webadmin\n\n# Remove Nginx configuration```\n\nsudo rm /etc/nginx/sites-enabled/webadmin\n\nsudo rm /etc/nginx/sites-available/webadmin### Permission Errors\n\nsudo systemctl reload nginx\n\n```bash\n\n# Remove sudo permissionssudo chown -R www-data:www-data /websites/webadmin\n\nsudo rm /etc/sudoers.d/webadminsudo chmod -R 755 /websites/webadmin\n\n```\n\n# Remove application files\n\nsudo rm -rf /var/www/webadmin## Backup \u0026 Restore\n\n\n\n# Remove database (optional)### Backup WebAdmin\n\nsudo mysql -u root -p -e \"DROP DATABASE your_db_name; DROP USER 'your_db_user'@'localhost';\"\n\n```bash\n\n# Remove PowerDNS configuration# Backup database\n\nsudo rm /etc/powerdns/pdns.d/mysql.confmysqldump -u root -p webadmin \u003e webadmin-backup.sql\n\nsudo systemctl restart pdns\n\n```# Backup application files\n\ntar -czf webadmin-files.tar.gz /websites/webadmin\n\n## 🤝 Contributing\n\n# Backup Nginx config\n\nWe welcome contributions! Please see our contributing guidelines for:cp /etc/nginx/sites-available/webadmin /path/to/backup/\n\n- Code style and standards```\n\n- Pull request process\n\n- Issue reporting### Restore WebAdmin\n\n- Feature requests\n\n```bash\n\n## 📄 License# Restore database\n\nmysql -u root -p webadmin \u003c webadmin-backup.sql\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n# Restore files\n\n## 🆘 Supporttar -xzf webadmin-files.tar.gz -C /\n\n\n\n### Getting Help# Restore Nginx config\n\ncp /path/to/backup/webadmin /etc/nginx/sites-available/\n\n- **Documentation**: Check this README and inline helpsudo nginx -t \u0026\u0026 sudo systemctl reload nginx\n\n- **Logs**: Review system and application logs```\n\n- **Community**: GitHub issues and discussions\n\n- **Professional Support**: Available for enterprise deployments## Updating\n\n\n\n### Reporting IssuesTo update WebAdmin:\n\n\n\nWhen reporting issues, please include:1. Backup your current installation\n\n- Ubuntu version and system specifications2. Download the new version\n\n- WebAdmin version3. Stop services:\n\n- Error messages and logs   ```bash\n\n- Steps to reproduce the issue   sudo supervisorctl stop backup-worker\n\n- Screenshots if relevant   ```\n\n4. Replace application files (preserve config.php)\n\n## 🏗 Built With5. Run any new database migrations\n\n6. Restart services:\n\n- **PHP 8.3**: Modern PHP with type safety and performance   ```bash\n\n- **Nginx**: High-performance web server   sudo supervisorctl start backup-worker\n\n- **MariaDB**: Reliable MySQL-compatible database   sudo systemctl reload nginx php8.3-fpm\n\n- **PowerDNS**: Authoritative DNS server   ```\n\n- **Supervisor**: Process control system\n\n- **Bootstrap CSS**: Responsive web interface## Uninstallation\n\n- **JavaScript**: Modern ES6+ for dynamic interfaces\n\nTo completely remove WebAdmin:\n\n## 🎯 Roadmap\n\n```bash\n\n### Planned Features# Stop and disable services\n\n- **API Integration**: RESTful API for external integrationssudo supervisorctl stop backup-worker\n\n- **Multi-server Management**: Manage multiple servers from one panelsudo rm /etc/supervisor/conf.d/backup-worker.conf\n\n- **Enhanced Monitoring**: System metrics and alertingsudo supervisorctl reread \u0026\u0026 sudo supervisorctl update\n\n- **Plugin System**: Extensible architecture for custom features\n\n- **Mobile App**: Companion mobile application# Remove Nginx config\n\n- **Docker Support**: Containerized deployment optionssudo rm /etc/nginx/sites-enabled/webadmin\n\nsudo rm /etc/nginx/sites-available/webadmin\n\n### Version Historysudo systemctl reload nginx\n\n- **v1.0**: Initial release with core features\n\n- **v1.1**: Enhanced backup system with async processing# Remove sudoers file\n\n- **v1.2**: Improved SSL management and security featuressudo rm /etc/sudoers.d/webadmin\n\n\n\n---# Remove application files\n\nsudo rm -rf /websites/webadmin\n\n**WebAdmin** - Making web server management simple and powerful.\n\n# Drop database\n\nFor more information, visit our [GitHub repository](https://github.com/andrewtimmins/hosting-panel).\n\n```bash\n# Drop database\nsudo mysql -u root -p -e \"DROP DATABASE webadmin; DROP USER 'webadmin'@'localhost';\"\n```\n\n## Support\n\nFor issues, questions, or contributions:\n- Check the troubleshooting section above\n- Review log files in `/websites/webadmin/logs/`\n- Check Supervisor logs: `/var/log/supervisor/backup-worker.*.log`\n- Check Nginx logs: `/var/log/nginx/`\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Credits\n\nBuilt with modern web technologies:\n- PHP 8.3\n- MariaDB\n- Nginx\n- PowerDNS\n- Supervisor\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrewtimmins%2Fhosting-panel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandrewtimmins%2Fhosting-panel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrewtimmins%2Fhosting-panel/lists"}