codesalad/admin-panel
1
3
Fork
You've already forked admin-panel
0
Modern AGPL-3.0 admin panel for managing emails, websites, files and DNS
  • PHP 61.3%
  • CSS 11.3%
  • JavaScript 9.8%
  • Jinja 9.7%
  • Shell 7.9%
2026年07月12日 23:12:53 +02:00
.well-known first commit 2025年04月27日 12:12:36 +02:00
ansible Fix Postfix fail2ban filter, tweak Certbot installation 2026年07月02日 20:31:24 +02:00
backend Add updating groups for different versions, remove obsolete files, update only from ansible, minor fixes 2026年02月11日 14:50:42 +01:00
default-page Use raised eyebrow SVG, add license notice 2025年07月10日 14:17:56 +02:00
email-config first commit 2025年04月27日 12:12:36 +02:00
error Use raised eyebrow SVG, add license notice 2025年07月10日 14:17:56 +02:00
lib Add type checks 2026年07月12日 23:12:53 +02:00
login WIP: Add domain table overwiew + options, add email enable/disable, file structure changes (unstable) 2025年07月12日 23:42:11 +03:00
pages delete unused css classes 2026年04月03日 13:32:40 +02:00
scripts Fix Postfix fail2ban filter, tweak Certbot installation 2026年07月02日 20:31:24 +02:00
setup Add updating groups for different versions, remove obsolete files, update only from ansible, minor fixes 2026年02月11日 14:50:42 +01:00
sign-in Add webkit-user-select, clarify VM installation 2026年03月01日 14:57:51 +01:00
src add clock icon for cron 2025年07月30日 14:29:39 +02:00
.gitignore Put all vars in inventory-example.yaml; Specify major package versions where config file syntax could change 2025年11月11日 15:52:29 +01:00
CONTRIBUTING.md Formatting 2025年07月04日 10:15:12 +03:00
favicon.ico High-res favicon 2025年07月05日 21:41:00 +03:00
index.php use dataset instead of non-standard custom attribute 2025年12月15日 01:30:24 +01:00
LICENSE first commit 2025年04月27日 12:12:36 +02:00
logout.php Make function names more verbose, change logout logic to clear session storage, move all config changes to config.php 2025年07月17日 11:37:23 +02:00
README.md Update README.md 2026年04月26日 22:27:15 +02:00
robots.txt first commit 2025年04月27日 12:12:36 +02:00
script.js Add missing check for the jsMenuSelect in commit 3cf0ed1c3d 2026年04月16日 23:48:36 +02:00
STRUCTURE.md use dataset instead of non-standard custom attribute 2025年12月15日 01:30:24 +01:00
style.css Add DNS verification code before submitting; merge small css file 2026年04月03日 13:28:08 +02:00

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

  1. Install ansible on user machine and server (e.g. sudo apt install ansible)
  2. Install python-passlib on user machine
  3. Install community.general by running ansible-galaxy collection install community.general in your terminal
  4. Copy ansible/inventory-example.yaml to ansible/inventory.yaml
  5. Set the correct distro by changing the host group it applies to above the comment (default is debian_13)
  6. Set the SSH login credentials in ansible/inventory.yaml
  7. Set public-facing IP in ansible/inventory.yaml (server_ip variable)
  • (Optional) Enable SSL in ansible/inventory.yaml (set use_ssl variable to true)
  1. 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

  1. Clone the repository
git clone https://codeberg.org/codesalad/admin-panel.git
cd admin-panel/
  1. Download the latest Debian 13 (no-cloud) VM from https://www.debian.org/distrib/
  2. Setup the VM in QEMU/KVM/virt-manager or your preferred hypervisor.
  3. Add MACHINE_IP server.example.local to /etc/hosts so you can open the Web UI in the VM in your browser
  4. Follow steps for standard installation above but do not enable SSL/TLS (doesn't issue certbot certs)

Web UI-only Setup Steps

  1. Download and install XAMPP or another web server of your choice.
  2. Clone the repository
git clone https://codeberg.org/codesalad/admin-panel.git
  1. Place the admin-panel folder inside the web server's htdocs (or equivalent) directory.

  2. Create a MySQL database:

    • Database name: rootdb_panel
    • Host: localhost
    • Username: root
    • Password: leave empty
  3. Import the admin-panel/setup/rootdb_panel.sql file into the rootdb_panel database in phpmyadmin.

  4. Create a test root:

sudo admin-panel/setup/make_testroot.sh /YOUR/TESTROOT
chmod -R 777 /YOUR/TESTROOT/
  1. Go to http://localhost/admin-panel (or equivalent).

Note

PHP Git-related issue: PHP Git functions may not work because /opt/xampp/lib contains outdated libraries.
Temporary workaround:

  • Rename /opt/xampp/lib to lib.old while 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


Credits

The following amazing software makes M Panel complete!


Copyright (c) 2025 Codesalad