用户登录
个人主页 用户中心 我的订单 添加授权 管理授权
退出登录
用户登录 用户注册
欢迎来到 UC建站系统

LNMP一键部署脚本:新服务器跑一遍环境全装好,支持批量推送

去年帮朋友的公司做了一件事:他们买了五台阿里云轻量服务器,要部署五个地区的WordPress多语言站。我花了半天写好一套Ansible playbook,剩下半天把这五台服务器全部初始化完成——Nginx 1.26、MySQL 8.0、PHP 8.3、Redis、Composer、Node.js 20、Let's Encrypt自动续签、防火墙规则、SSH加固,五台服务器的环境一模一样,没有一台漏装任何一个扩展

手动搭环境的问题不在"会不会",在"一致性"——你永远不知道第三台和第几台之间少改了什么配置。批量初始化的核心价值就一句话:用一份配置描述文件,确保所有服务器的建站环境完全一致,可重复、可追溯、可一键重建

五种方案,从一台到一百台

方案适合台数上手门槛一台耗时批量能力成本
宝塔/aaPanel1~5台★☆☆ 最低15分钟无,一台台装免费
1Panel1~10台★★☆ 较低10分钟弱,Docker编排可复用免费
LNMP一键脚本1~20台★★☆ 需会SSH5分钟(执行)中等,可配合ssh批量执行免费
Docker Compose1~50台★★★ 需会Docker3分钟(docker compose up)强,配置文件即环境免费
Ansible5~100+台★★★★ 需学YAML一条命令全部并行最强,天生为批量而生免费

台数指"你能接受逐台操作的服务器数量上限",超过这个数就得上自动化方案了

一、宝塔面板:点几下鼠标就能建站,但批量就别想了

宝塔(国内版)/ aaPanel(英文版,免费功能完全一致)是新手和单台服务器场景下的最佳选择。安装一条命令跑完,然后在浏览器里点点鼠标就能装好LNMP/LAMP环境。

1 - LNMP一键部署脚本:新服务器跑一遍环境全装好,支持批量推送 - UC建站系统

安装命令(Ubuntu/Debian):

wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh

装完后访问 http://你的IP:8888 进入面板,在"软件商店"里一键安装 Nginx、MySQL、PHP、Redis、phpMyAdmin。建站时填域名、选PHP版本、点创建——从空服务器到能访问的WordPress网站,15分钟以内

但宝塔的短板也很明确:

没有批量能力

每台服务器都要单独装面板、单独点鼠标、单独配置。五台服务器就是五遍完全相同的操作,中间漏了哪个配置很难发现。

资源占用不低

面板本身常驻约200-400MB内存。1核1G的低配服务器上,装了宝塔再装LNMP,内存基本就满了。

环境不可描述

你没法把"装了Nginx 1.26 + PHP 8.3 + Redis 7.2"这个环境状态保存成一个文件,下次在新服务器上一键还原。

结论:只有1-3台服务器、不想碰命令行的,宝塔完全够用。超过5台,请往下看。

二、1Panel:Docker原生的现代面板,但批量仍然靠手动

1Panel是2023年开源的国产面板,跟宝塔最大的区别是:它所有服务都跑在Docker容器里。这意味着Nginx、MySQL、PHP、Redis各自是一个独立容器,互不污染,卸载时也不会在系统里留残留文件。

安装命令:

curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

1Panel相比宝塔的优势:

  • 资源占用更低:面板本身约100-150MB内存,比宝塔轻将近一半
  • 开源透明:代码在GitHub上完全公开,宝塔国内版不开源
  • Docker编排可复用:虽然1Panel本身没有批量管理功能,但因为它底层是Docker Compose,你可以把它的docker-compose.yml复制到其他服务器上直接启动
  • 应用商店丰富:除了建站三件套,还内置了Halo、Typecho、WordPress、Nextcloud等几十个应用的一键部署

但1Panel也有两个明显的不足:面板的网站管理功能不如宝塔成熟(比如SSL证书自动续签偶尔抽风),以及它的批量部署本质上还是靠你手动把Docker Compose文件复制到各台服务器——它没有内置"往10台服务器同时推送配置"的能力

三、LNMP一键脚本:命令行党最熟的工具,但脚本管脚本、配置管配置

LNMP.org的一键安装包是国内使用最广的命令行建站方案,从2010年维护到现在。一条命令装好Nginx、MySQL、PHP全家桶,所有配置都在命令行里完成。

安装命令:

wget http://soft.vpser.net/lnmp/lnmp1.9.tar.gz -O lnmp1.9.tar.gztar zxf lnmp1.9.tar.gz && cd lnmp1.9./install.sh lnmp  # 选MySQL版本、PHP版本、是否装内存优化

装完后用 lnmp vhost add 添加网站,用 lnmp ssl add 添加Let's Encrypt证书,全程命令行。

LNMP脚本在批量场景下的用法是:

# 先在一台服务器上装好、调好所有配置# 然后把配置文件打包,用scp分发到其他服务器# 再ssh到每台执行安装脚本# 批量执行示例(假设IP列表在 servers.txt 里)while read ip; dossh root@$ip "wget http://your-server/lnmp1.9.tar.gz && tar zxf lnmp1.9.tar.gz && cd lnmp1.9 && ./install.sh lnmp"done < servers.txt

这个方案的问题在于:LNMP脚本的参数是交互式的(安装过程中要选MySQL版本、输密码),你得用 expect 或改成无人值守模式才能批量跑。而且装完之后Nginx的配置、PHP的扩展、Redis的连接信息,都得单独分发配置文件。

和宝塔一样,LNMP脚本本质上是一个单机工具,批量能力靠你手动拼。但它的优势是:装出来的环境是纯原生的,没有面板进程占资源,1核1G服务器也能流畅跑。

四、Docker Compose:一个yml文件描述整个建站环境,真正的"配置即环境"

这是目前我推荐给有Docker基础的开发者的方案。核心思路:把Nginx、MySQL、PHP、Redis、WordPress全部写进一个 docker-compose.yml 文件里,任何一台装了Docker的服务器,把这个文件扔上去,docker compose up -d,环境就起来了。

2 - LNMP一键部署脚本:新服务器跑一遍环境全装好,支持批量推送 - UC建站系统

一个完整的WordPress建站环境 docker-compose.yml:

version: '3.8'services:nginx:image: nginx:1.26-alpineports: ["80:80", "443:443"]volumes:- ./nginx/conf.d:/etc/nginx/conf.d- ./nginx/ssl:/etc/nginx/ssl- wordpress_data:/var/www/htmldepends_on: [wordpress]restart: alwayswordpress:image: wordpress:6.6-php8.3-fpm-alpineenvironment:WORDPRESS_DB_HOST: mysqlWORDPRESS_DB_NAME: wordpressWORDPRESS_DB_USER: wordpressWORDPRESS_DB_PASSWORD: ${DB_PASSWORD}volumes: [wordpress_data:/var/www/html]restart: alwaysmysql:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}MYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: ${DB_PASSWORD}volumes: [mysql_data:/var/lib/mysql]restart: alwaysredis:image: redis:7.2-alpinevolumes: [redis_data:/data]restart: alwaysvolumes:wordpress_data:mysql_data:redis_data:

Docker Compose方案的核心优势:

环境完全一致

Nginx 1.26-alpine 在任何服务器上都是同一个镜像,不存在"这台服务器上的PHP少了某个扩展"的问题。

迁移和克隆极快

docker compose down → 打包volumes → 新服务器docker compose up -d,整个网站就搬过去了。

版本切换一行命令

PHP 8.2换8.3?改镜像tag重拉即可。不需要像传统方式那样卸载重装、处理依赖冲突。

但Docker Compose也有两个需要注意的地方:1核1G的服务器跑WordPress + MySQL两个容器内存会比较吃紧(建议至少1.5G内存),以及Docker网络模式下,容器之间的通信(比如WordPress连Redis)需要用服务名而不是127.0.0.1。

五、Ansible:批量初始化建站环境的终极方案

当你需要管理5台以上服务器时,前面所有方案都会遇到同一个瓶颈:你怎么确保每台服务器的环境一模一样?

Ansible的答案是:把环境初始化写成一个playbook(YAML文件),一条命令往所有目标服务器同时推送执行。不需要在目标服务器上装任何agent,只要SSH能通就行。

一个完整的LNMP建站环境Ansible playbook的核心结构:

# site.yml - 建站环境批量初始化 playbook- hosts: webserversbecome: yesvars:php_version: "8.3"mysql_root_password: "{{ vault_mysql_root_password }}"tasks:# 1. 系统基础:更新源、装常用工具、设时区- name: 更新apt源并安装基础包apt: update_cache=yes name="{{ item }}" state=latestloop: [curl, wget, git, unzip, htop, ufw, fail2ban]# 2. Nginx:添加官方源 → 安装指定版本 → 推送配置文件- name: 添加Nginx官方源apt_repository: repo='ppa:ondrej/nginx-mainline'- name: 安装Nginxapt: name=nginx state=latest- name: 推送Nginx主配置template: src=templates/nginx.conf.j2 dest=/etc/nginx/nginx.conf# 3. MySQL 8.0:安装 → 安全初始化 → 创建数据库和用户- name: 安装MySQLapt: name=mysql-server-8.0 state=latest- name: 设置root密码mysql_user: name=root password="{{ mysql_root_password }}" host=localhost# 4. PHP 8.3 + 常用扩展:从ondrej PPA安装- name: 添加PHP PPAapt_repository: repo='ppa:ondrej/php'- name: 安装PHP及扩展apt: name="{{ item }}" state=latestloop:- php8.3-fpm- php8.3-mysql- php8.3-redis- php8.3-curl- php8.3-gd- php8.3-mbstring- php8.3-xml- php8.3-zip- php8.3-imagick# 5. Redis:安装 + 配置内存限制 + 设置密码- name: 安装Redisapt: name=redis-server state=latest# 6. Composer + Node.js 20- name: 安装Composershell: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer# 7. 防火墙:只放行 80/443/SSH端口- name: 配置UFWufw: rule=allow port={{ item }}loop: ['80/tcp', '443/tcp', '22987/tcp']# 8. SSL证书:用certbot自动申请- name: 安装certbotapt: name=certbot state=latest

执行一条命令,所有服务器同时跑:

ansible-playbook -i inventory.ini site.yml

inventory.ini 里定义你要管理哪些服务器:

[webservers]tokyo  ansible_host=172.16.1.10  ansible_user=rootseoul   ansible_host=172.16.1.20  ansible_user=rootsingapore ansible_host=172.16.1.30 ansible_user=rootfrankfurt ansible_host=172.16.1.40 ansible_user=rootsydney  ansible_host=172.16.1.50  ansible_user=root

Ansible最厉害的地方不是"快",而是"幂等性"——同一个playbook跑第二次、第三次,Ansible会检查当前状态,只修改有变化的部分,不会重复安装已经装好的包。这意味着你可以在任何时候对任何一台服务器执行playbook,不用管它之前是什么状态。

另一个实际价值:服务器挂了,开一台新的,一条命令恢复到和原来一模一样。不需要回忆"这台服务器到底装了什么",playbook就是环境文档。

不同场景选哪种方案

你的情况推荐方案原因
1-3台服务器,不想学命令行宝塔 / aaPanel最快上手,点点鼠标搞定
1-5台,想用Docker但不想太折腾1PanelDocker原生+可视化面板+开源
1-10台,熟悉命令行,追求性能LNMP一键脚本零资源浪费,原生性能,适合低配VPS
3-20台,团队协作,需要环境一致性Docker Compose配置文件即文档,本地和线上一致
5台以上,运维自动化是刚需Ansible(可叠加Docker Compose)批量+幂等+可追溯,一次配置永久复用

混合方案:Ansible + Docker Compose,批量初始化建站的最佳实践

在实际项目中,我用的最多的是Ansible + Docker Compose组合:

  • Ansible负责服务器层的初始化:装Docker、配防火墙、设SSH密钥、装fail2ban、设时区和swap
  • Docker Compose负责应用层的建站环境:Nginx、MySQL、PHP、Redis、WordPress全用容器跑
  • Ansible负责把docker-compose.yml和配置文件推送到目标服务器:用 copy 或 template 模块
  • Ansible最后执行 docker compose up -d:用 command 或 docker_compose 模块

这个组合的好处是:服务器层面(系统配置)和应用层面(建站环境)完全解耦。要升级PHP版本?改docker-compose.yml里一个tag就行。要加一台新服务器?加到inventory里跑一遍playbook就行。

完整流程跑下来,一台全新服务器从空系统到"能访问的WordPress网站",大约需要的时间:

步骤耗时备注
Ansible系统初始化3-5分钟装Docker+配防火墙+SSH加固
拉Docker镜像2-3分钟取决于网络速度
docker compose up30秒所有服务同时启动
WordPress初始化1分钟填站点名+管理员账号
合计约8-10分钟/台且是并行执行,5台和1台差不多

对比手动搭建——从SSH登录开始,apt update,装Nginx,装MySQL,改my.cnf,装PHP,装扩展,装Redis,配置Nginx虚拟主机,申请SSL证书……一个人做一遍至少40分钟,五台就是三个多小时。而且很容易忘掉某一步。

说穿了,批量初始化建站环境的真正价值不在"快",在"你不需要记住每一步做了什么"。playbook就是你的记忆,docker-compose.yml就是你的环境说明书。三个月后要加一台新服务器,不用翻聊天记录回忆"上次怎么装的来着"。跑一遍,和之前一模一样。


如果现在只有一两台服务器,从Docker Compose开始。哪怕以后服务器数量不增长,一个yml文件描述完整建站环境这件事本身,就比手动装一遍然后忘掉值十倍。

相关推荐
在线客服
👇找客服拿折扣
QQ咨询&售后
在线时间
11:00 ~ 5:30
QQ:3155555535
👇联系QQ
👇联系WX
首页 程序 帮助 登录