English / 中文

轻量·稳定·可复制的 WNMP 一键包

一条命令安装 Nginx、PHP、MariaDB(内置Mroonga搜索引擎),并自动完成内核/网络调优、WebDAV 与证书配置。为中小站点、边缘节点与私有化项目提供即开即用的生产环境基座。

Window11(WSL) Debain13 Debian12 Ubuntu22.xx Ubuntu24.xx Ubuntu25.xx
Nginx 1.28.0 PHP 8.2–8.5 MariaDB 10.6 / 10.11 BBR / FQ · 关闭 THP acme.sh证书一键 WebDAV网盘 拒绝FTP SSH密钥登录
安装
apt install -y curl curl -fL https://wnmp.org/zh/wnmp.sh -o wnmp.sh chmod +x wnmp.sh bash wnmp.sh

脚本开源协议:GPLv3。请在完全干净的系统中使用root账号执行命令。

v1.10 修改sshkey代码逻辑,重复申请ssh密钥只允许最新公钥密钥对有效,旧公钥备份保存

v1.09 删除默认站点.pem文件,避免误会。默认站点正式申请证书后才会生成.pem证书文件

v1.05 覆盖安装或执行bash wnmp.sh remariadb 先全库备份在:/home/all_databases_backup_[time].sql.gz

v1.04 纯网盘站点屏蔽.php文件,防止被下载源代码

v1.03 优化Nginx参数以加速SSL证书验证

v1.02 加入--pcntl扩展,兼容workerman

WNMP:

1、Windows11(WSL)+Nginx+Mariadb+PHP

(Windows11-WSL运行的Linux子系统部署,不是exe环境包)

2、(Linux)WebDav+Nginx+Mariadb+PHP

核心特性

即装即用的 Web 运行环境

编译安装 Nginx 1.28.0(含 dav-ext / http2 / stream 等模块),可选 PHP 8.2–8.5 与 MariaDB 10.6 / 10.11,提供合理的默认参数。

内核/网络调优

开启 BBR/FQ,合理的 somaxconn/文件句柄,关闭 THP;自动写入 sysctl 与 limits,适配 WSL 环境安全降级。

证书自动化

集成 acme.sh;优先使用 Cloudflare DNS-01,失败时自动回落 webroot;证书安装与 Nginx reload 自动化。

多站点与 WebDAV

一键创建 vhost,内置phpMyAdmin保护与WebDAV账号管理;支持为不同域名生成独立密码文件。

可维护的配置结构

统一目录规范,默认站点与 SSL 目录一目了然。

/usr/local/nginx /usr/local/php /home/wwwroot

安全默认值

禁用隐蔽目录与敏感脚本后缀、合理的超时与缓存配置、默认关闭不必要的 PHP 选项。

常用命令

正常安装

bash wnmp.sh

查看状态

bash wnmp.sh status

ssh密钥登录

bash wnmp.sh sshkey

添加webdav账号

bash wnmp.sh webdav

默认站点域名与证书

bash wnmp.sh default

创建虚拟主机(含证书)

bash wnmp.sh vhost

仅做内核/网络调优

bash wnmp.sh tool

重启服务

bash wnmp.sh restart

一键清理

bash wnmp.sh remove # 全部清理 bash wnmp.sh renginx # 仅清理 Nginx bash wnmp.sh rephp # 仅清理 PHP bash wnmp.sh remariadb # 仅清理 MariaDB

WSL初始化

bash wnmp.sh wslinit

站点底部标识(可选)

将以下 HTML 放入你的网站页脚:

<small>本服务器由 <a href="https://wnmp.org" target="_blank" rel="noopener">wnmp.org</a> 一键包构建 </small>

常见问题

是否开源?可以用于商业项目吗?

脚本以 GPLv3 开源,允许商业使用与再发布,但需要保留相同协议开源衍生作品。请遵循第三方依赖的各自许可。

支持哪些系统?

主要面向 Debian 12/13 与类 Debian 系统。已在Windows11(WSL), (Linux)Debian13, Debian12, Ubuntu22.04,Ubuntu24.04,Ubuntu25.10 安装验证通过。 对WSL(推荐Debian)做了安全降级处理。

生产环境首选Debian13,WNMP脚本没有计划兼容其他非类Debian 系统,也不保证兼容官方已停止维护的类Debian老旧系统版本,请谅解!

Win系统如何安装使用WMMP?

确认你是win11系统。首先需要安装wsl子系统

Win+R 组合键打开运行输入框,输入cmd # 键盘组合键shift+ctrl+enter 进入管理员模式控制台。

wsl -l -o # 查看是否能读取远程系统列表,如果能正常读取,表示wsl正常

wsl --install debian # (开始安装debian13子系统,第一次执行命令会要求重启电脑,或提示未开启CPU虚拟化支持等,请根据提示操作)

正常安装后会要求配置一个普通账号+密码,配置成功后直接:exit 退出子系统

wsl -d debian -u root # 以root账号身份登录debian系统

cd ~ apt update && apt install -y curl && curl -fL https://wnmp.org/zh/wnmp.sh -o wnmp.sh && chmod +x wnmp.sh && bash wnmp.sh wslinit

在此电脑任务地址栏定位打开C:\Users\[username]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup # 请用windows登录的真实账号名代替[username]

新建一个wsl.vbs文件并写入内容:

Set ws = CreateObject("Wscript.Shell") ws.run "wsl -d debian", 0

初始化完成后,子系统已安装SSH服务端,根据提示重启电脑后,你可以像正常服务器VPS一样用SSH客户端登录你的wsl debian 子系统

登录地址:127.0.0.1 端口:22

更多wsl命令:在windows cmd环境下,非子系统shell控制台

wsl -l -v # 查看已安装系统列表

wsl --shutdown # 停止子系统

wsl --unregister debian # 卸载子系统

如需要局域网访问子系统,打开C:\Users\[username]目录 # 请用windows登录的真实账号名代替[username]

新建一个.wslconfig文件并写入内容:

[wsl2] networkingMode=Mirrored dnsTunneling=true firewall=true autoProxy=true [experimental] hostAddressLoopback=true

在管理员权限 PowerShell 窗口中运行以下命令,以配置 Hyper-V 防火墙 设置以允许入站连接:

Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow

再次重启电脑。现在你可以登录与你本机win系统相同局域网IP地址登录子系统。请在cmd命令控制台输入ipconfig 查看你的本机局域网IP

为什么 WNMP 不提供面板?

因为最安全的服务器,是没有面板的那一台。

面板类软件(例如 BT 宝塔)以图形化方式管理服务器,虽然方便,但同时也带来了:

🔓 开放额外端口(如 8888),扩大攻击面;

⚠️ 保留 SSH 密码登录,增加暴力破解风险;

🧩 长期常驻的面板守护进程,可能被提权或注入;

🔄 自动更新与插件系统,降低可审计性。

而 WNMP 的设计理念完全不同:

✅ 默认启用 SSH 密钥登录(最安全的登录方式);

✅ 不开放任何 Web 面板端口,部署完成后几乎零常驻进程

✅ 系统配置完全透明,可脚本化、可版本化、可审计;

✅ 追求宿主级性能与安全基线,而非图形界面的便利。

WNMP 的目标不是“替代宝塔”,而是提供一份面向工程师的纯净环境模板——命令行即控制面板,安全性与可控性永远优先。

面板适合入门者;WNMP 属于工程师。

为什么不适配 Docker?

WNMP 并不是“把 Nginx + PHP + MariaDB 打成容器”,而是为了在干净的系统环境下,一键完成 宿主级性能调优与安全基线配置(内核网络参数、ulimit 限制、SSH 密钥配置、编译优化等)。

这些宿主级能力在容器内往往不可控,或需要 --privileged 等高权限运行,反而削弱了容器的隔离初衷。

因此,WNMP 推荐在 KVM 虚拟机、云服务器,或 Proxmox (PVE) 中开设的 KVM 虚拟系统上使用,以充分发挥其性能调优与系统优化的优势。

最低支持什么硬件配置安装?

如果你不安装Mariadb,在Debian系统下,最低支持512M内存安装,Debian系统本身占用200M内存空间;在Ubuntu系统下,最低支持768内存安装,Ubuntu系统本身占用500M内存空间!

如果安装Mariadb数据库,最低要求1GB内存才能正常安装!

支持哪些PHP版本?

只支持PHP8.2-PHP8.5

WNMP脚本没有计划兼容官方已停止维护的老旧版本号,请谅解!

如何自行安装PHP扩展?

pecl install xxx

安装完成后,需要手动编辑/usr/local/php/php.ini extension=xxx.so

php -m 验证

bash wnmp.sh restart 或 systemclt restart php-fpm 重载PHP让php-fpm启用扩展

Nginx,PHP,Mariadb,Phpmyadmin安装包下载地址是什么?

WNMP所有软件都调用的官方下载地址。不会采用任何第三方下载地址

如果你的下载速度非常慢,请尝试切换系统更新源,或挂载代理安装。为了保证安全性,请坚持使用官方下载源!

为什么采用编译安装Nginx,PHP,Mariadb,而不采用二进制安装或 apt 官方源安装?

由于各自软件的官方更新策略问题,第一时间会发布在官网或github开源库中,Debian或Ubuntu官方源中的软件并不是最新版本。并且二进制安装无法自定义可选扩展。

比如NGINX要支持WebDav协议,必须单独编译nginx-dav-ext-module

比如Swoole官方已在github发布了php8.5版本,但官网和apt并没有更新,因此,你如果采用WNMP一键部署环境后可直接在PHP8.5版本下使用Swoole,而其他途径目前为止还不支持PHP8.5

WNMP安装了哪些PHP扩展,为什么没有设置可选配置?

WNMP安装的PHP会默认编译安装启用swoole,apcu,inotify,redis

由于WNMP作者就是LOWPHP 开发者,因此WNMP会保证LOWPHP环境的运行为前提。但WNMP并不影响传统PHP-FPM项目源码正常执行,所以请放心生产环境直接使用WNMP部署你的WEB环境使用

其中apcu是PHP官方内置的可选扩展,单进程下性能比redis更优秀的缓存插件。但PHP-FPM进程管理器是及时销毁重建进程的机制,所以PHP-FPM传统项目无法正常使用apcu缓存。但不影响你源代码正常执行

inotify扩展同样是官方内置的可选扩展,其作用为实时监控指定目录的所有文件变化。

因此LOWPHP常驻内存运行方式可以充分利用原生扩展C语言性能,提供缓存和热更新功能。LOWPHP暂未发布,敬请期待。

LOWPHP类似GO语言开发的FrankenPHP,但LOWPHP是PHP原生架构,单核心常驻内存后,支持多站点执行。让开发程序员无需关心底层原理,编写代码与传统PHP-FPM一致,无需关心更新,同步,协程,异步等问题,同时LOWPHP也是一个开发框架,规范开发流程,让任何传统PHP程序员能开发出高性能项目,同时多站点部署方式与传统PHP-FPM无异!

证书如何签发?

若需DNS-01安装证书,请执行wnmp.sh脚本编译安装nginx后,第一时间到cloudflare-个人简介-API令牌-创建令牌,选择 编辑区域 DNS 生成token后,在已安装nginx的服务器控制台执行 :

echo "SAVED_CF_Token='token字符串'" >> ~/.acme.sh/account.conf

若检测到有效的 Cloudflare 凭据与 dns_cf.sh,优先 DNS-01;否则回落到 webroot。安装后自动写入证书路径并重载 Nginx。

推荐使用DNS-01为站点域名申请证书,如若采用webroot签发证书,域名开启cdn后,续签无法识别正常DNS IP,有可能续签失败

内网环境可以跳过证书申请吗?

可以的。脚本检测到内网环境会要求确认是否强制申请证书。选择[否]即可跳过证书申请,非常适合开发环境安装调试。选择[是]则可以类似PVE nat ipv4 虚拟局域网内部虚拟机安装,只要PVE母鸡转发80和443端口至当前内网kvm虚拟机,就可以正常申请证书。

为什么不使用FTP而使用WebDav?

FTP是一个老旧的明文传输协议,即使可以配置证书也是非常麻烦的,由于大多数FTP服务端软件默认参数就是明文21端口,导致中间人可以轻松获取你的FTP账号密码,所以请立即停用FTP。即使你采用其他脚本安装的服务器环境,也应该立即卸载FTP服务端软件

WebDav是基于 HTTP/1.1 的扩展协议,只要正常申请SSL证书后,WebDav走443端口就能和网页一样受到证书加密保护。

在Windows系统下,你可以使用WinScp客户端采用与FTP一样的文件传输方式,或使用RaiDrive 映射为本地网盘操作文件。在其他Linux系统下,你可以使用Rclone挂载为本地网盘使用

WebDav支持一个站点多个账号配置,请重复执行bash wnmp.sh webdav 为同一个站点配置多个WebDav账号。所有密码文件路径在/home/passwd/目录下

客户端配置连接时,WinSCP 选择webdav协议连接,请在HOST:[domain]/webdav 加密方式选择:TLS/SSL隐式加密,端口必须保证为443端口,才能获得SSL证书加密保护!

其他客户端webdav协议下直接填写:https://[domain]/webdav

请使用真实域名替换[domain]

WNMP是否可以只开启WebDav作为网盘使用?

可以的。如果只作为网盘使用,执行bash wnmp.sh vhost开始站点,或单独执行bash wnmp.sh webdav 给已存在的站点配置WebDav时,选择 是否公开目录 yes .WNMP会禁用整个站点.php执行。任何后缀的文件都会作为下载文件提供下载

如果单独作为网盘使用,建议只安装NGINX,执行bash wnmp.sh 后可选择不安装PHP,不安装mariadb,只安装nginx

为什么不使用Mysql而使用Mariadb?

Mariadb是Mysql原作者重新开发构建的类Mysql开源版本。绝大多数语法与Mysql兼容,不用担心存在兼容问题!你可以导入Mysql的sql到Mariadb测试,几乎不会存在兼容问题

为什么Mariadb只支持10.x而不支持11.x?

考虑到低配置VPS环境,例如1GB内存的VPS也能正常安装WNMP,并且基于官方理念问题,新版本的Mariadb与Mysql差异越来越大。例如:utf8mb4_general_ci 编码在两个数据库都支持,但新版本默认排序规则/编码不同。

WNMP安装的Mariadb数据库默认内置安装了Mroonga搜索引擎,Mroonga官方支持的Mariadb版本最高只支持10.x

数据库并不需要最新版本,低端配置的服务器环境无法正常安装,以及兼容综合考虑后WNMP暂时只支持Mariadb 10.x,并且还在官方正常维护期间的版本,如果确实需要安装其他版本,请自行修改WNMP代码

什么是Mroonga搜索引擎?

MariaDB 内置了多个版本的可选 Mroonga 引擎,但这些版本通常已过时。因此WNMP默认编译Mariadb时关闭了可选内置Mroonga引擎。而采用了独立编译安装最新版本的Mroonga引擎

Mariadb官网对Mroonga介绍落地页:https://mariadb.com/docs/server/server-usage/storage-engines/mroonga/about-mroonga

Mroonga官网:https://mroonga.org/

几乎任何使用Mysql或Mariadb作为数据库的项目,其瓶颈都来自于数据库查询性能。强烈建议不要再使用LIKE模糊查询,其性能低下!

当把数据表引擎Innodb切换到Mroonga后,配置varchar或text字段索引为fulltext索引类型后,你可以尝试执行SELECT [name] FROM [users] WHERE MATCH ([name]) AGAINST ('+张三' IN BOOLEAN MODE);测试是否正常。注:请使用真实字段和表名代替[name],[users]

更详细的教程,请访问 https://mroonga.org/ 官网了解

为什么http://[ip]/phpmyadmin打开是403页面?

大多数其他方式安装的Nginx环境,都没有考虑默认站点的证书问题,如果默认站点只监听80端口的情况下,则请求https://[ip]/可能会被路由到第一个 443 虚拟主机,从而存在中间人攻击的风险。

因此,WNMP 默认站点监听 80 和 443 端口。为了防止通过 http://[ip]/phpmyadmin 或 https://[ip]/phpmyadmin 等错误方式访问数据库(这些方式存在中间人攻击风险),访问默认站点需要执行 `bash wnmp.sh default`。只有在为默认站点配置子域名并成功获取证书后,才能通过 `https://[domain]/phpmyadmin` 访问数据库。

如何管理mariadb数据库?

执行bash wnmp.sh default为默认站点配置了二级域名申请证书的前提下,你可以访问https://[domain]/phpmyadmin,默认已经启用Nginx Basic Auth鉴权,账号为:wnmp,密码默认为[needpasswd]或你安装Mariadb设置的数据库密码一致!

修改默认站点的Nginx Basic Auth鉴权账号密码,请执行:htpasswd -bc /home/passwd/.default [账号] [密码],默认站点不支持多账号配置

https://[domain]/phpmyadmin Nginx Basic Auth鉴权通过后,才能登录phpmyadmin登录页面,账号输入root,密码输入你安装Mariadb设置的数据库密码

Mariadb数据库只支持localhost而非127.0.0.1连接。请注意项目源码中连接数据库使用localhost

第二种管理数据库方式为SSH命令控制台,直接输入mysql即可进入Mariadb命令控制台

如果数据表启用了Mroonga引擎,不能使用phpmyadmin导入导出SQL文件,因为phpmyadmin官方并没有考虑支持Mroonga

推荐统一采用在SSH命令控制台执行mysqldump命令导入导出SQL

全数据导出例子:mysqldump --all-databases --single-transaction --default-character-set=utf8mb4 --routines --events --flush-privileges | gzip > all_databases_backup.sql.gz #包含账户/权限/例程/事件

某数据库导出例子:mysqldump --single-transaction --default-character-set=utf8mb4 --databases test | gzip > test.sql.gz

导入例子:gunzip < all_databases_backup.sql.gz | mysql --default-character-set=utf8mb4

导入例子:gunzip < test.sql.gz | mysql --default-character-set=utf8mb4

是否可以覆盖安装,数据库数据存在备份吗?

是的。v1.05版本已加入覆盖安装或执行bash wnmp.sh remariadb 先全库备份在:/home/all_databases_backup_[time].sql.gz

是否兼容swoole,workerman常驻内存架构?

是的。v1.02版本刚刚加入--pcntl扩展,兼容workerman

能否只用其中某一部分?

可以。脚本支持按需安装与单独清理某个组件,也可以仅执行内核/网络调优。

是否支持一键生成SSH登录密钥?

可以的。执行bash wnmp.sh sshkey

===

⚠️ 强提醒:在你确认【已把私钥保存到你自己的电脑】之前

⚠️ 请不要断开当前 SSH 会话,否则你将无法再次登录服务器!

===

保存私钥到本地电脑,可以使用SSH客户端载入密钥免密码登录

配置密钥登录后,服务器将禁止一切账号密码登录

WNMP与其他脚本有什么区别,为什么要使用WNMP安装环境?

WNMP会动态根据系统硬件环境优化参数,在生产环境下已可以让服务器达到最大化性能

你可以用ab,wrk等并发测试工具测试性能。

同一个服务器硬件环境下,你可以尝试安装其他脚本与WNMP横向对比并发性能。作者不保证一定比其他脚本性能优秀,测试结果仅供参考!

特别注明:测试并发性能时,请关闭域名CDN缓存,采用http,并且ab -n100000 -c1000 -k http... 一定要保证开启 -k 才能保持启用Keep-Alive,模拟真实浏览器行为,性能更高。

是否未来计划出售wnmp.org域名所有权?

作者承诺坚持开源精神,不会出售wnmp.org,请认准唯一官网网址。

如何反馈BUG?

QQ群:1075305476

Telegram Group: https://t.me/wnmps

Github: https://github.com/lowphpcom/wnmp

社区源码正在基于LOWPHP构建中,敬请期待!