要是说到用VPS主机建站,目前一般流行两种方式:一是直接在VPS主机上安装虚拟主机面板,例如宝塔面板,另一种就是直接安装Nginx、Mysql、PHP等组件。两种方式各有各的优缺点,使用虚拟主机面板简单但是容易有安全问题和资源占用过大的问题。
手动搭建 LNMP 比用脚本装环境更费功夫,但装完之后,虚拟主机、证书、日志和备份还是要自己维护。OneinStack 和 LNMP.org 在 2023 年的安全争议,可参考本文最后一节的历史资料。
本文原以 2024 年的 LNMP 一键安装包 2.1 为例。2.1 当时增加了 PHP 8.3、MySQL 8.4 和 Nginx HTTP/3 支持。现行稳定分支见 LNMP 2.3 正式版:https://lnmp.org/notice/23.html,LNMP 2.4 测试版:https://lnmp.org/notice/lnmp-2-4-beta.html 的安装与真实升级恢复仍有待完整验收。下面的旧安装截图用于识别历史环境,日常维护先看服务器实际安装的版本和配置。
如果你对国内的建站程序没有兴趣,你可以试试国外的比较成熟的建站程序和面板,更多的一键建站脚本请查看专题:一键建站脚本工具专题。
PS:2026年11月4日更新,对照 LNMP 2.3 正式版和 2.4 测试版,更新了虚拟主机、证书和服务维护说明,并修正了日志轮转及备份脚本的用法。
网站:
登陆VPS主机后运行:screen -S lnmp,如果提示screen: command not found 命令不存在可以执行:yum install screen 或 apt-get install screen安装。
下面保留 2.1 的历史安装命令。新机器要安装时,从 官网下载页:https://lnmp.org/download.html 获取安装包,核对当前版本及官方提供的校验值后再解压。2.3 安装器默认选择 PHP 8.3 和 MySQL 8.4 LTS,已有服务器的版本要另行检查。
# LNMP 2.1 历史安装示例,仅供查阅。 # wget https://soft.lnmp.com/lnmp/lnmp2.1.tar.gz -O lnmp2.1.tar.gz && tar zxf lnmp2.1.tar.gz && cd lnmp2.1 && ./install.sh lnmp
旧安装器用 lnmp、lnmpa、lamp 选择架构,部分版本也支持 ./install.sh nginx 或 ./install.sh db 单独安装组件。这些是安装入口。维护已有环境时,先核对组件和配置,确需升级时按官方组件升级文档另行备份和演练。
下面是原 LNMP 2.1 的安装选择界面。
旧版允许选择 MySQL、MariaDB 或跳过数据库。编译资源要求随数据库版本、发行版和安装方式变化,按所选版本的官方说明预留内存、磁盘和时间。
根据提示选择PHP版本。
提示”Press any key to install...or Press Ctrl+c to cancel“后,按回车键确认开始安装。LNMP脚本就会自动安装编译Nginx、MySQL、PHP、phpMyAdmin等软件及相关的组件。安装时间可能会几十分钟到几个小时不等,主要是机器的配置网速等原因会造成影响。
旧安装器会显示组件状态和用时。验收时还要确认本机 HTTP 能响应、PHP 可执行、应用可连接数据库。数据库可以通过 Unix socket 或仅在本机监听,公网不需要开放 3306。
新增站点使用 lnmp vhost add,已有站点先用 lnmp vhost list 核对域名,再检查实际站点目录、访问日志和 Nginx 虚拟主机配置。WordPress 伪静态及 PHP 实例按实际部署选择。官方虚拟主机教程:https://lnmp.org/faq/lnmp-vhost-add-howto.html
下图保留 2.1 的 SSL 菜单。新增站点时可按向导启用 HTTPS,已有虚拟主机可用 lnmp ssl add。自备证书时填写实际证书链和与之匹配的私钥路径。免费 CA 的选项和可用性以现用版本与服务商为准。2.3 的 SSL 模板默认启用 TLS 1.2 和 1.3,已有站点请核对实际配置。
签发失败时先查域名解析和验证条件。HTTP-01 要让 CA 能访问域名的 80 端口及验证路径,泛域名证书使用 DNS-01。2.3 提供 lnmp dns 用 DNS API 签证书并创建站点,也可用 lnmp onlyssl 只签证书,部署步骤再单独完成。签发和部署后核对 Nginx 配置、证书域名、到期时间和续期任务。相关操作可参考 acme.sh 安装和切换 SSL CA 教程。
日常服务检查:先用 lnmp status 查看整套状态,再用 lnmp nginx status、lnmp php-fpm status 和实际使用的 lnmp mysql status 或 lnmp mariadb status 定位组件。多 PHP 或 LNMPA/LAMP 要核对实际实例和服务。仅修改 Nginx 配置时,先用实际安装的 Nginx 执行 nginx -t,测试通过后再按需执行 lnmp nginx reload。官方服务命令:https://lnmp.org/faq/lnmp-status-manager.html
日志持续写入时会增长,不能从安装了 LNMP 就推断已经配置定时轮转。先确认虚拟主机的 access_log、error_log 和实际文件,再查现有 cron、systemd timer 或 logrotate。官方安装包 tools 目录提供 cut_nginx_logs.sh。官方工具说明:https://lnmp.org/faq/lnmp-1-2-tools.html
下面是旧脚本参数。log_files_name 填实际存在的 .log 文件基名,log_files_path 只指向专用日志目录。
#设置nginx日志文件目录路径
log_files_path="/home/wwwlogs/"
#日志文件将会存放到/home/wwwlogs/年/月/日志文件名_年月日.log
log_files_dir=${log_files_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")
#设置要切割的日志的名字,如果日志目录下面的日志文件名为vpser.net.log,则填写vpser.net,每个日志名用空格分隔
log_files_name=(access vpser.net licess)
#设置nginx文件的位置
nginx_sbin="/usr/local/nginx/sbin/nginx"
#设置日志保存的时间,天
save_days=30 2.3 与本次核对的 2.4 测试包都先重命名选定日志,再按时间清理并请求 Nginx reload。清理范围是配置的日志目录树,超过保留天数的条目可能被删除。2.4 测试版也收紧了 Nginx 日志目录权限,排查时请核对实际执行账号。下面只检查脚本语法。
bash -n ./cut_nginx_logs.sh
先在测试环境确认切割后新日志能继续写入,旧日志可读。已有 logrotate 负责同一批文件时,沿用现有轮转任务。
下面是 cron 格式示例。若采用官方工具,先将通过核对的脚本放入实际维护目录,再按机器时区和保留策略设定运行时间。
0 0 * * * /bin/bash /opt/lnmp-tools/cut_nginx_logs.sh
关于crontab定时任务设置,请参考:Linux Crontab命令定时任务基本语法与操作教程。
LNMP 一键安装包 的 tools/backup.sh 可以打包指定网站目录和导出指定数据库。下列参数保留作配置对照,路径、数据库名和凭据按实际环境核对。
Backup_Home="/home/backup/" #####备份文件存放目录
MySQL_Dump="/usr/local/mysql/bin/mysqldump" ####mysqldump路径,如果是mariadb替换/usr/local/mysql为/usr/local/mariadb
######~Set Directory you want to backup~######
Backup_Dir=("/home/wwwroot/vpser.net" "/home/wwwroot/lnmp.org") ##########要备份的目录,目录用双引号括起来,多个目录空格隔开,如前面的例子
######~Set MySQL Database you want to backup~######
Backup_Database=("lnmp" "vpser") ########要备份的数据库,前面有例子
######~Set MySQL UserName and password~######
MYSQL_UserName='root' ####不用说了,MySQL root账号
MYSQL_PassWord='yourrootpassword' ##### MySQL root密码
######~Enable Ftp Backup~######
Enable_FTP=0 #####是否启用ftp备份,0 启用,非0 不启用
# 0: enable; 1: disable
######~Set FTP Information~###### ftp账号信息
FTP_Host='1.2.3.4'
FTP_Username='vpser.net'
FTP_Password='yourftppassword'
FTP_Dir="backup" #########ftp服务器上存放备份的目录
#Values Setting END!
默认备份文件保存3天,可以修改backup.sh里的-3day为你指定的天数。 官方包内的旧脚本会将数据库账号和密码传给导出命令,并按日期命名和清理旧归档。先检查执行账号、保留规则、导出范围和失败退出行为。新任务宜使用权限受限的数据库账号及私有客户端选项文件。
先在测试环境核对导出结果,确认能解包、能导入,再配置定时任务。下例假定脚本已审查并放入维护目录,时间按调度机器的时区解释。
30 2 * * * /bin/bash /opt/lnmp-tools/backup.sh
官方 2.3 和本次核对的 2.4 测试包中,这个脚本的可选远传使用 lftp,Enable_FTP=0 实际表示启用 FTP。原有 又拍云 FTP 的历史用法 可供维护旧任务时查阅。用对象存储时,应单独配置支持对应后端的客户端,先加密可能含凭据或个人数据的归档。
归档完成后,可用 Rsync、SCP 或 rclone 将已验证的文件传到异地。备份也要覆盖必要配置,保留独立历史版本,并做读回校验和隔离恢复。可参考 网站和数据库的加密备份与隔离恢复。
2023 年 OneinStack 和 LNMP.org 的安全争议及讨论链接如下,供追查历史。维护时从官方入口核对版本、下载校验值和变更记录。
相关的网页截图见:https://do.wzfou.net/wzfou/lnmp/oneinstackma.png
文章出自:挖站否 https://wzfou.com/lnmp21/,版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。
文章更新于: 2026年11月4日 下午4:53
查看评论
2.1的下载后md5和官网的也不一致
那最好不要用了
不敢用了,但是又没得选,谁告诉我哪个还有安全的
好久不用面板了,起初用docker,现在都是k3s了
去年收购时有一次供应链藏木马,今年好像5月份左右的时候又有一次。最好的选择就是用 llm 辅助去手动用包管理构建环境,如果有这个一对一答疑的老师都不愿意学还是趁早放弃比较好。