azerioid-stack-manager README

The project's README from github.com/azerioid/azerioid-stack-manager. As one markdown file: README.md.

AZERIOID Stack Manager

One host. One panel. A full Linux web stack you control.

AZERIOID Stack Manager is a self-contained stack manager and web control panel for operators who run sites on a single Linux server. One installer bootstraps Caddy, a dedicated PHP 8.4 FPM pool, and a SQLite-backed admin UI on Laravel 13 + Livewire 4. Everything else — Nginx, Apache, databases, cache, PHP site runtimes, Node.js, Supervisor, mail, rootless Docker — installs on demand from the dashboard or the matching CLI, using official upstream packages.

Built for VPS and bare-metal operators who want a clean bootstrap, a real UI for day-two work, and a privileged broker that keeps package installs and host changes out of the web app process.

Screenshots

Captured from a live Ubuntu 24.04 panel host (UI anonymized where needed). Reflects the post–v1.6 Virtual Hosts redesign and current Mail / runtime pages.

Overview Virtual hosts
Overview Virtual hosts
Virtual hosts · row actions Docker runtime filter
Virtual hosts actions Docker vhosts
Mail Databases
Mail Databases
Terminal File Manager + editor
Terminal File Manager
Components Security
Components Security

What ships out of the box vs on demand

Bootstrap (automatic)

Piece Role
Caddy Panel vhost on port 3169; front door on :80/:443 for sites
PHP 8.4 FPM Dedicated panel pool — isolated from site PHP versions
SQLite Panel state under /var/lib/azerioid-panel/
Broker Privileged host driver (sudoers); UI never runs apt/dnf itself
Queue worker Background component install/remove jobs

On demand (Components page or azerioid component)

Category Components
Web engines Nginx, Apache (loopback backends; Caddy terminates TLS)
Databases MariaDB, PostgreSQL, MongoDB
Cache / KV Redis, Memcached
Runtimes PHP 8.1–8.3 (site pools); Node.js 20 / 22 / 24
Process manager Supervisor (programs run as azerioid-supervised, never root)
Per-vhost app runtimes Opt-in: PHP-FPM (default), Laravel Octane / FrankenPHP, PM2 Node cluster, rootless Docker — chosen at create time or enabled later
Mail Postfix + Dovecot + OpenDKIM (opt-in; authenticated submission only, virtual mailboxes, DKIM/SPF/DMARC guidance, direct or smarthost outbound)
Tools Adminer (panel session–gated SQL UI; MariaDB / PostgreSQL / SQLite — not MongoDB)

Feature highlights

Proven on supported distros in operator testing — not marketing vapor:

Honest limits: single admin (no multi-user RBAC yet). Archive extract is not offered in the File Manager (zip-slip scoped out). Mail ships without webmail, spam filtering, quotas, or catch-all addresses; deliverability still depends on reverse DNS you set at your VPS provider. Octane is Laravel-only; PM2 is Node-only; Docker compose host mounts are bounded by what azerioid-supervised can already access (not equivalent to root).

Supported operating systems

Verified end-to-end on the current stack (Laravel 13 + Livewire 4, including mail / Octane / PM2 / rootless Docker paths where those features apply):

OS Support Notes
Ubuntu 24.04 Supported Verified
Debian 12 / 13 Supported Verified
AlmaLinux 9+ Supported Verified with SELinux Enforcing
Rocky Linux 9+ Supported Verified with SELinux Enforcing (same EL path as AlmaLinux)
CentOS Stream 9+ Supported Verified with SELinux Enforcing (same EL path; ID=centos)
RHEL / Oracle Linux 9+ Supported (same EL path) Same installer/SELinux helpers
Fedora Not supported Installer refuses correctly

Requirements: root, outbound HTTPS, git.

Quick start

git clone https://github.com/azerioid/azerioid-stack-manager.git stack-manager && cd stack-manager
chmod +x stack-manager.sh
sudo ./stack-manager.sh

Interactive install (TTY) prompts for:

Non-interactive example:

sudo ./stack-manager.sh --non-interactive --access=public --create-admin=true [email protected]
# Set ADMIN_PASSWORD in the environment — never pass passwords on argv

Tunnel access after a default install:

ssh -L 3169:127.0.0.1:3169 user@host
# open http://127.0.0.1:3169/setup  (or /login if an admin was created)

Optional hardening flags: --firewall=true, --fail2ban=true, --require-totp=true. Full list: sudo ./stack-manager.sh --help.

On any public install, change the admin password immediately after first login if you used a weak or default value.

Security model (brief)

Details: docs/SPEC.md, docs/DECISIONS.md, docs/port-ownership.md.

CLI examples

azerioid status
azerioid vhost list --json
azerioid vhost add --domain=app.example.com --type=php --php=8.4 --root=/data/www/app.example.com --tls=auto
azerioid vhost add --domain=api.example.com --type=php --php=8.4 --runtime=octane --tls=auto
azerioid vhost octane enable --domain=api.example.com
azerioid vhost octane reload --domain=api.example.com
azerioid vhost pm2 enable --domain=node.example.com --instances=2 --entry=server.js
azerioid vhost docker enable --domain=app.example.com --mode=image --image=nginx:alpine --internal-port=80
azerioid db add --engine=mariadb --name=appdb --user=appdb
azerioid component install redis
azerioid component install mail   # refuses foreign Exim/Sendmail unless --option=confirm=REPLACE-MTA
azerioid component install adminer
azerioid process create --vhost=app.example.com --command='node server.js' --name=app-node
azerioid mail hostname set --hostname=mail.example.com
azerioid mail domain enable --domain=app.example.com
azerioid mail mailbox add [email protected]   # password printed once
azerioid mail status   # “Direct mail delivery: available” or “…blocked… configure a relay”
azerioid mail smarthost set --host=smtp.provider.example --port=587 --username=apikey
# relay password: AZERIOID_RELAY_PASSWORD=… (never argv)
azerioid mail dns --domain=app.example.com
azerioid panel update check
azerioid panel update apply --v=v1.6.0 --confirm

Secrets (DB passwords, DNS tokens, backup passphrase, TOTP re-auth, mail/smarthost passwords) go through the environment or one-time stdout — not argv flags. Full surface: azerioid help.

Uninstall

Panel only:

sudo ./deploy/uninstall.sh --drop-db --remove-bootstrap

Full teardown (panel + broker-managed components + added repos). Intentionally retains site trees under /data/www and panel/broker logs under /var/log/azerioid-panel (audit trail after reinstall):

sudo ./deploy/uninstall.sh --full

License

MIT — see web/composer.json.

Contributing

Issues and pull requests: azerioid/azerioid-stack-manager. Architecture decisions live in docs/DECISIONS.md; keep ADR history intact when proposing changes.

azerioid-stack-manager (azerioid/azerioid-stack-manager)

Searching Database…

这是什么?AZERIOID Stack Manager 是一个自包含的堆栈管理器和 Web 控制面板,面向在单台 Linux 服务器上运营网站的管理员。它会引导安装 Caddy、专用 PHP-FPM 池和基于 SQLite 的管理界面,之后你可以按需添加 Web 服务器、数据库、缓存、邮件、Node.js 和无根 Docker。
这是我装进代码里的库,还是独立的服务器应用?它是一个独立的自托管 Web 应用,外加配套的 CLI(azerioid),基于 Laravel 13 + Livewire 4 构建,面板数据库为 SQLite——不是要导入其他项目的库。
怎么在我的服务器上跑起来?用 root 权限运行交互式安装器(sudo ./stack-manager.sh),它会询问访问模式(tunnel 或 public)、面板端口、TOTP、防火墙和 fail2ban;也支持用非交互式标志进行脚本化安装。
安装之前我的服务器需要什么?你需要 root 权限、出站 HTTPS 和 git。它运行在 Ubuntu 24.04、Debian 12/13、AlmaLinux/Rocky/CentOS Stream 9+ 以及 RHEL/Oracle Linux 9+ 上;明确不支持 Fedora。
目前的限制有哪些?目前还没有多用户 RBAC(仅限单个管理员),文件管理器有意不提供压缩包解压功能,捆绑的邮件服务器也没有 webmail、垃圾邮件过滤、配额或 catch-all 地址。
这是为谁打造的?面向运营单台 Linux 机器的 VPS 和裸金属管理员,他们想要干净的开箱引导,加上一个真正可用的“第二天”界面来管理网站、数据库、邮件和进程,而不是手工堆砌服务器配置。
它在任何 Linux 发行版上都能用吗?不是——它只在 Ubuntu 24.04、Debian 12/13、AlmaLinux 9+、Rocky Linux 9+、CentOS Stream 9+ 和 RHEL/Oracle Linux 9+(启用 SELinux enforcing 的 EL 路径)上验证过;安装器会明确拒绝 Fedora。
DNS 令牌和密码等机密信息安全吗?DNS-01 API 令牌和邮件/smarthost 机密以仅 root 可读的方式存储,且绝不通过命令行参数接收;其他机密通过环境变量或一次性 stdout 传递。
除引导堆栈外还能按需安装什么?从 Components 页面或 azerioid CLI,你可以添加 Nginx 或 Apache、MariaDB/PostgreSQL/MongoDB、Redis/Memcached、PHP 8.1-8.3 或 Node.js 20/22/24 运行时、Supervisor、完整邮件堆栈(Postfix+Dovecot+OpenDKIM)以及无根 Docker。
我的网站的 HTTPS 是怎么配置的?由 Caddy 终结 TLS,支持自动的 Let's Encrypt HTTP-01、自签名/内部 TLS,以及通过 Cloudflare 或 DigitalOcean 的 DNS-01(与内部 TLS 相比测试较少)。
每个站点可以用自己的引擎或运行时吗?可以——每个虚拟主机独立选择 Caddy、Apache 或 Nginx 作为引擎,还可以选择 Laravel Octane(FrankenPHP)、Node 的 PM2 集群模式或无根 Docker,而不是默认的 PHP-FPM。
面板默认暴露到互联网吗?不。默认访问模式是 localhost 隧道(127.0.0.1:3169);通过主机 IP 的公网 HTTPS 访问是安装时需要明确选择的选项。
Creator
azerioid
Size
6.3 MB
Stars
710
Age
1mo
Commits · 90 Days