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

核心特性
即装即用的 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 选项。
轻量·稳定·可复制的 WNMP 一键包
一条命令安装 Nginx、PHP、MariaDB(内置Mroonga搜索引擎),并自动完成内核/网络调优、WebDAV 与证书配置。为中小站点、边缘节点与私有化项目提供即开即用的生产环境基座。
apt install -y curl
curl -fL https://wnmp.org/zh/wnmp.sh -o wnmp.sh
chmod +x wnmp.sh
bash wnmp.sh脚本开源协议:GPLv3。请使用root账号执行命令。
核心特性
即装即用的 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 statusssh密钥登录
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常见问题
是否开源?可以用于商业项目吗?
脚本以 GPLv3 开源,允许商业使用与再发布,但需要保留相同协议开源衍生作品。请遵循第三方依赖的各自许可。
支持哪些系统?
主要面向 Debian 12/13 与类 Debian 系统。已在Debian13, Debian12, Ubuntu22.04,Ubuntu24.04,Ubuntu25.10 安装验证通过。 对WSL(推荐Debian)做了安全降级处理。
生产环境首选Debian 13,WNMP脚本没有计划兼容其他非类Debian 系统,也不保证兼容官方已停止维护的类Debian老旧系统版本,请谅解!
最低支持什么硬件配置安装?
如果你不安装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,有可能续签失败
为什么不使用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搜索引擎?
实际上Mroonga早已经内置在Mariadb多个版本中作为可选引擎提供使用。但官方内置的版本非常低,不能正常使用,因此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]/ ,Nginx会跳转到第一个监听了443端口的站点。这是大多数服务器运维容易忽视的问题。https://[ip]/ 会打开你正常配置域名证书的站点主页。如果在页面中输入账号密码,会存在中间人攻击风险!
因此WNMP默认站点同时监听了80和443端口,并且为了避免使用http://[ip]/phpmyadmin或https://[ip]/phpmyadmin 错误方式打开数据库,存在中间人攻击风险。WNMP要求访问默认站点的前提是执行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
能否只用其中某一部分?
可以。脚本支持按需安装与单独清理某个组件,也可以仅执行内核/网络调优。
是否支持一键生成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构建中,敬请期待!


































蒙公网安备 15010502000974号