condor 679e0b4184 init
2026-07-24 18:54:53 +08:00
2026-07-24 18:54:53 +08:00
2026-07-24 18:54:53 +08:00
2026-07-24 18:54:53 +08:00
2026-07-24 18:54:53 +08:00
2026-07-24 18:54:53 +08:00
2026-07-24 18:54:53 +08:00
2026-07-24 18:54:53 +08:00
2026-07-24 18:54:53 +08:00
2026-07-24 18:54:53 +08:00
2026-07-24 18:54:53 +08:00
2026-07-24 18:54:53 +08:00
2026-07-24 18:54:53 +08:00
2026-07-24 18:54:53 +08:00

ServerStack

ServerStack 是一键部署 Linux 服务器软件栈(LAMP / LNMP / LNMT 等)的自动化安装项目, 由原始 OneinStack 风格脚本经过**工程化结构重构(Project Restructure,非 Rewrite**而来。

本次重构只调整代码组织方式与目录结构,不改动任何安装逻辑、安装顺序、命令行参数、 配置格式、菜单与日志内容。原有的 include/ 大杂烩被拆分为职责单一的目录树, 入口脚本与公共库、核心编排、软件模块彻底解耦。

历史使用说明请见 docs/README.md(上游原文档,未改动)。

软件裁剪(Software Trim:在重构基础上,进一步移除了 Tengine / OpenResty / Apache(仅保留 Nginx)、Percona 全系(仅保留 MySQL / MariaDB / PostgreSQL / MongoDB)、Memcached(仅保留 Redis)、OpenJDK 8/11(仅保留 Node.js / Python)、Tomcat 710(仅保留 phpMyAdmin)。相关安装 / 升级 / 下载 / 检测脚本与离线包清单均已同步裁剪;详见 OFFLINE.md

系统裁剪(OS Trimlib/check_os.sh 仅识别并支持 Debian 9-13 / Ubuntu 16-26apt-get 系);RHEL/CentOS/Rocky/AlmaLinux/Oracle/Fedora/Amazon/openEuler 等 yum/dnf 系一律直接退出。相应地移除了 installDepsRHELcore/os/init_RHEL.sh 以及 init.sh 的 rhel 分发。


1. 顶层目录结构

ServerStack/
├── bin/           # 入口脚本(用户直接执行的 CLI)
├── core/          # 核心流程编排(项目专属业务逻辑)
├── lib/           # 公共函数库(纯工具,无业务决策)
├── modules/       # 软件安装模块(按类别分区,高内聚)
├── services/      # systemd / init 单元文件
├── config/        # 项目配置文件
├── templates/     # 服务器 / vhost 配置模板
├── src/           # 补丁 / 密钥 / 预置 tarball(原样保留)
├── scripts/       # 独立运维辅助脚本
├── runtime/       # 运行时生成物(install.log、锁、状态标记)
├── logs/          # 运维日志(与 runtime 分离,便于轮转)
├── backup/        # 备份归档(backup.sh / db_bk.sh 写入)
├── docs/          # 文档
├── tests/         # 测试(回归 / 冒烟脚本)
└── LICENSE

文件统计(15 个目录合计 270 文件,不含根目录文档/清单):bin 9 core 13 lib 15 modules 58 services 6 config 2 templates 19 src 135 scripts 7 runtime 1 logs 1 backup 1 docs 1 tests 1。 (另含根目录 LICENSEREADME.mdOFFLINE.mdOFFLINE_MANIFEST.txt 等文档/清单文件。)


2. 各目录职责与边界

目录 职责 依赖关系 允许被谁调用 对外接口
bin/ 用户 CLI 入口,只做最小 argv 解析后委托给 core → core 用户直接执行 install / uninstall / upgrade / vhost / addons / backup / backup_setup / pureftpd_vhost / reset_db_root_password
core/ 项目专属编排:决定安装顺序流程,不含具体软件安装码 依赖 lib(函数)+ modules(经 run_install 仅 bin/ main() 及步骤函数
lib/ 纯工具函数(日志 / 颜色 / 检测 / 下载),source 时无副作用、无业务判断 依赖 ∅(不向上依赖) 任何人 load_common / log_* / 颜色变量 / check_*
modules/ 单软件一文件,统一 Install_X 接口 仅依赖 lib禁止 source core(无向上依赖) 仅经 run_install 被 core 调用 Install_X(可选 Configure / Start
services/ 静态单元文件 service.sh / systemctl 消费 系统 单元文件本身
config/ 静态项目配置 load_common 消费 core / lib 配置项
templates/ 静态服务器 / vhost 模板 安装时由 modules 渲染 modules 模板文件
src/ 静态补丁 / 密钥 / 包 编译期被 modules 引用 modules 资产文件
scripts/ 独立运维工具 可选 source lib 用户 / backup 类脚本 独立命令
runtime/ / logs/ / backup/ 生成物(日志 / 锁 / 备份) 被框架写入 框架 文件
docs/ / tests/ 文档 / 测试(新增) 无依赖 人类 / CI

依赖有向无环图(低耦合,无环)

bin → core → { lib, modules }
modules → lib
lib → ∅(纯叶子)
services / config / templates / src 为叶子资产,仅被消费
scripts → lib(可选)

任何目录都不得反向依赖 core / modules,从结构层面杜绝循环耦合。


3. 目录详解

bin/ —— 入口脚本

用户直接执行的一层薄壳,仅负责 cd 到项目根、source 公共库与编排核心、解析最少量参数后委托。

  • install.sh:主安装入口,驱动 core/workflow.sh::main()
  • uninstall.sh / upgrade.sh / vhost.sh / addons.sh / backup.sh / backup_setup.sh / pureftpd_vhost.sh / reset_db_root_password.sh:各自独立职责的管理脚本。

core/ —— 核心流程编排(13 文件)

项目专属业务逻辑,决定“先做什么、后做什么”,但不持有具体软件的编译/安装代码

  • workflow.sh唯一决定安装顺序的地方(main())。
  • environment.shinit_environment / init_variables / prepare_install / check_environment
  • init.shinit_os / install_prereqs(含 os/ 两个 OS 初始化子脚本)。
  • argument.shversion / Show_Help / parse_arguments / handle_ssh_port
  • menu.shshow_menu
  • validator.shis_valid / validate_options(幂等校验安全网)。
  • installer.shinstall_modules / configure_modules / PHP_addons
  • service.shstart_services / start_service(统一 systemctl | service 双路)。
  • summary.shprint_summary
  • demo.sh:演示站点生成。
  • os/init_Debian.sh os/init_Ubuntu.shDebian / Ubuntu 的 OS 初始化(仅支持这两类系统)。

lib/ —— 公共函数库(15 文件)

纯工具,无任何业务决策、source 时零副作用,可被任意模块安全复用。

  • loader.shload_common / load_configs / source_module / run_install(统一去重的 . module; Func | tee -a install.log)。
  • log.shlog_info / log_warn / log_error / log_success / error_exit / cleanup / rollback / trap_handler
  • color.sh check_os.sh check_dir.sh download.sh check_download.sh get_char.sh memory.sh openssl.sh check_sw.sh:颜色、系统检测、目录/下载校验、随机密码等工具。
  • py/get_ipaddr.py get_public_ipaddr.py get_ipaddr_state.py check_port.pyPython 辅助)。

modules/ —— 软件安装模块(58 文件,按类别分区)

每个软件一个文件,统一对外暴露 Install_X(部分含 Configure_X / Start_X)。 新增软件 = 在对应子目录丢一个 Install_X 文件 + 在 installer.sh / menu.sh 注册,无需改动核心

子目录 内容
web/ jemalloc, nginx
db/ mysql-5.7/8.0, mariadb-10.11/11.8/12.3, postgresql-15.14/16.10/17.6, mongodb
php/ php-7.4/8.0/8.1, mphp(多版本共存)
php-addons/ apcu, xcache, eaccelerator, ioncube, sourceguardian, ZendGuardLoader, zendopcache, composer, pecl_calendar / fileinfo / imap / ldap / mongodb / pgsql / phalcon / swoole / xdebug / yaf / yar
cache/ redis
lang/ nodejs, python
app/ phpmyadmin
ftp/ pureftpd
security/ fail2ban, ngx_lua_waf
image/ GraphicsMagick, ImageMagick
upgrade/ upgrade_db / oneinstack / php / phpmyadmin / redis / web

services/ —— 服务单元(6 文件)

init.d/ 内容,迁移为现代 systemd 单元。

  • nginx.service php-fpm.service mongod.service postgresql.service pureftpd.service redis-server.service

config/ —— 项目配置(2 文件)

  • options.conf:安装选项(含可存储的数据库密码等)。
  • versions.txt:各组件版本清单。

templates/ —— 配置模板(19 文件)

服务器 / vhost 配置模板(原 config/ 的 vhost 模板),安装期由 modules 渲染。

  • 通用:nginx.conf pure-ftpd.conf index.html index_cn.html
  • 应用模板:cloudflare codeigniter discuz drupal ecshop joomla laravel magento2 nextcloud opencart thinkphp typecho whmcs wordpress zblog.conf)。

src/ —— 补丁 / 密钥 / 预置包(149 文件)

libiconv-glibc-2.16.patch php5.3patch 若干编译依赖(注:nginx-rtmp-modulengx-fancyindex 已从 Nginx 编译中移除,因其下载源失效且无可用镜像); 其余为离线安装预置的源码 / 二进制 tarball(清单见根目录 OFFLINE_MANIFEST.txt)。

注:目录名保留 src/ 未改名 patches/。原因:编译脚本中 src/ 大量指代下载解压后的源码内部路径(如 src/core/nginx.hsrc/argon2-),盲目改名会破坏编译逻辑;保留原名零引用风险。

scripts/ —— 独立运维脚本(7 文件)

db_bk.sh website_bk.sh thread.sh mabs.sh ckssh.py mssh.exp mscp.exp

runtime/ logs/ backup/ —— 生成物目录

  • runtime/install.log:安装日志(由 lib/log.sh::_log_path 统一写入)。
  • logs/backup/:预留给运维日志与备份归档。

docs/ tests/

  • docs/README.md:上游原使用文档(未改动)。
  • tests/:回归 / 冒烟测试骨架(本次仅建目录,待补充)。

4. 入口与执行流程

bin/install.sh(约 40 行,纯入口):

#!/bin/bash
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
cd "$(dirname "$(readlink -f "$0")")/.." || exit 1   # cd 到项目根
. ./lib/loader.sh
. ./lib/log.sh
. ./core/environment.sh
# ... source 其余 core 模块 ...
trap 'trap_handler' EXIT INT TERM
main "$@"

main()core/workflow.sh)按固定顺序编排:

init_environment → load_configs → init_variables → parse_arguments →
check_environment → show_menu → validate_options → prepare_install →
init_os → install_prereqs → install_modules → configure_modules →
start_services → print_summary

5. 如何新增一个软件模块(扩展性示范)

  1. modules/<类别>/ 下新建 <software>.sh,实现 Install_<Software>(及可选的 Configure_* / Start_*)。
  2. core/installer.sh 的安装分支里加一行 run_install "modules/<类别>/<software>.sh" "Install_<Software>"
  3. 若需在交互菜单出现,在 core/menu.sh 增加对应选项。
  4. 如需 systemd 单元,放入 services/
  5. 如需默认配置文件,放入 templates/ 并在模块中渲染(经 lib/ 工具)。

核心编排(workflow.sh / installer.sh / menu.sh)之外无需改动任何公共代码。


6. 兼容性说明

  • 安装逻辑、安装顺序、CLI 参数、配置格式、菜单、日志内容全部不变。
  • ⚠️ 变更仅限路径/引用./include/X.sh → 新目录路径;属机械替换,算法/分支零改动。
  • ⚠️ install.log 落点改为 runtime/install.log(仅路径,内容不变)。
  • ⚠️ src/ 目录名保留(见第 3 节说明),其余资源目录已按规划重命名。
  • ⚠️ 软件裁剪(Software Trim:在重构基础上进一步移除了 Tengine / OpenResty / Apache(仅保留 Nginx)、Percona 全系(仅保留 MySQL / MariaDB / PostgreSQL / MongoDB)、Memcached(仅保留 Redis)、OpenJDK 8/11(仅保留 Node.js / Python)、Tomcat 710(仅保留 phpMyAdmin)。菜单 DB 选项已重排:9 = PostgreSQL、10 = MongoDB(原 13/14 已上移)。相关安装 / 升级 / 下载 / 检测脚本与离线包清单均已同步裁剪,详见 OFFLINE.md 第 4 节。

7. 校验状态

  • 全部 .sh 通过 bash -n 语法检查。
  • source 冒烟测试:框架函数全部定义、路径全部解析成功。
  • 所有 run_install / . modules/ / . lib/ / . core/ 引用均指向真实存在的文件。
  • 全局无残留 include/ 误引用;$HOME/.oneinstack 标记未受影响。
  • 待 Linux 主机动态回归:干净容器(Debian + Ubuntu 各一)交互 & CLI 两种模式, 对照原 oneinstack/install.sh.bak 比较 install.log / 汇总 / 产物目录;并补 shellcheck -S error
S
Description
lnmp安装包
Readme Apache-2.0 187 KiB
Languages
Shell 94.9%
HTML 4%
Python 0.6%
Roff 0.5%