- PHP 61.3%
- CSS 11.3%
- JavaScript 9.8%
- Jinja 9.7%
- Shell 7.9%
M Panel
License: AGPL v3 Platform: Debian Status: WIP
Welcome to M Panel , our new open-source admin panel project!
As this is an early-stage project, any help and contributions are greatly appreciated.
M Panel is built on Debian and aims to be an easy-to-install, user-friendly admin panel for managing accounts and domains (DNS records, email accounts, websites).
Demo available at https://codesalad.codeberg.page/admin-panel
Certified Systems
| OS | Status |
|---|---|
| Raspberry Pi OS | ✅ Supported |
| Debian 12 and 13 | ✅ Supported |
Requirements
- Debian 12 or Debian 13 (or any Debian-based systemd Linux distribution with the same configuration file locations).
- Non-systemd distributions are not supported.
- All dependencies are installed automatically by the installer.
Installation
Caution
Project is still in development stage and may be unstable!
Warning
Fresh install highly recommended! Using an existing system may cause data loss or system breakage.
Prerequisites
- An internet connection and A record for your domain pointing to your server (for Let's Encrypt certificates)
- Raspberry Pi 4B 4GB + 32 GB SD card performance or better recommended
1. Clone the repository
git clone https://codeberg.org/codesalad/admin-panel.git
cd admin-panel/
2. Installation
Ansible installation
- Install
ansibleon user machine and server (e.g.sudo apt install ansible) - Install
python-passlibon user machine - Install
community.generalby runningansible-galaxy collection install community.generalin your terminal - Copy
ansible/inventory-example.yamltoansible/inventory.yaml - Set the correct distro by changing the host group it applies to above the comment (default is
debian_13) - Set the SSH login credentials in
ansible/inventory.yaml - Set public-facing IP in
ansible/inventory.yaml(server_ipvariable)
- (Optional) Enable SSL in
ansible/inventory.yaml(setuse_sslvariable totrue)
- Run
ansible-playbook -i ansible/inventory.yaml ansible/install/setup.yaml; ansible-playbook -i ansible/inventory.yaml ansible/update/update.yaml
2.1 Installation options
Note
It is recommended to leave default options during package configuration, unless stated otherwise below
- Do not set/change root mariadb password during installation, it is set in the setup script
- Select "sqlite3" during roundcube installation
- Select "apache2" during phpmyadmin installation (using space bar and up/down arrow, then tab to select "Ok")
2.2 Updating
The following command adds individual patches changes needed to match the current installation script and updates the web interface
Run ansible-playbook -i ansible/inventory.yaml ansible/update/update.yaml
Development Mode
You can currently test the admin panel in 2 ways: in a VM with all the software or partially just the web UI.
Development mode does not require a specific Linux distribution. However, operations involving service control (start/stop) will require sudo and may work incorrectly.
VM Setup Steps
- Clone the repository
git clone https://codeberg.org/codesalad/admin-panel.git
cd admin-panel/
- Download the latest Debian 13 (no-cloud) VM from https://www.debian.org/distrib/
- Setup the VM in QEMU/KVM/virt-manager or your preferred hypervisor.
- Add
MACHINE_IP server.example.localto/etc/hostsso you can open the Web UI in the VM in your browser - Follow steps for standard installation above but do not enable SSL/TLS (doesn't issue certbot certs)
Web UI-only Setup Steps
- Download and install XAMPP or another web server of your choice.
- Clone the repository
git clone https://codeberg.org/codesalad/admin-panel.git
-
Place the
admin-panelfolder inside the web server'shtdocs(or equivalent) directory. -
Create a MySQL database:
- Database name:
rootdb_panel - Host:
localhost - Username:
root - Password: leave empty
- Database name:
-
Import the
admin-panel/setup/rootdb_panel.sqlfile into therootdb_paneldatabase in phpmyadmin. -
Create a test root:
sudo admin-panel/setup/make_testroot.sh /YOUR/TESTROOT
chmod -R 777 /YOUR/TESTROOT/
- Go to http://localhost/admin-panel (or equivalent).
Note
PHP Git-related issue: PHP Git functions may not work because
/opt/xampp/libcontains outdated libraries.
Temporary workaround:
- Rename
/opt/xampp/libtolib.oldwhile testing Git in M Panel.- Restore the original folder afterwards to allow XAMPP to start and stop services correctly.
Contributing
Want to help?
Please read our Contributing Guidelines and code logic & file structure explanation before submitting pull requests.
Features
- Per-domain email user, file, DNS and website management
- Multiple domains per user
- Soft Storage limits
- User management from root account
- phpMyAdmin (SQL management) and Roundcube (web mail)
- Per-email user CalDAV and CardDAV (Radicale)
- One-click git repository and Wordpress download
Roadmap
- Cron jobs
- User managamenet root page
- Docker version
- DNSSEC support
- Email aliasing
- Warnings (popups, emails) when expiring or filling up space, lock user actions
License
- Project: Licensed under the AGPL-3.0-or-later.
- SVG icons: From Font Awesome, licensed under CC BY 4.0.
- Raised eyebrow emoji: From Twemoji, hex code 1F928, licensed under CC BY 4.0.
Credits
The following amazing software makes M Panel complete!
- phpMyAdmin: Available here
- Roundcube: Available here
- Radicale: Available here
Copyright (c) 2025 Codesalad