1. 为什么我坚持用 Lightsail 做第一个云项目,而不是直接上 EC2?

刚接触 AWS 的时候,我也在 EC2 控制台里迷路过——安全组配了三遍还是连不上 SSH,VPC 子网和路由表改来改去,最后发现连公网 IP 都没分配对。直到我点开 Lightsail 控制台首页那句“Launch your first instance in under 2 minutes”,才真正意识到: 云服务的门槛不该是配置复杂度,而应该是业务启动速度 。Lightsail 不是“简化版 EC2”,它是 AWS 专门为“今天就想把网站跑起来”的人设计的一套完整交付链路:从虚拟机、防火墙、静态 IP、DNS、负载均衡到数据库,全部封装进一个带图形界面的控制台里,所有操作都有明确状态反馈,失败会直接告诉你哪一步卡住了,而不是让你翻 CloudWatch 日志猜原因。

它解决的不是“能不能做”,而是“敢不敢动手”。比如你刚写完一个 Python Flask 小工具,想让同事远程试用;或者你接了个本地咖啡馆的官网单子,客户明天就要看效果;又或者你正在准备 AWS 认证,需要一个干净环境反复练习 Web 服务部署——这些场景下,Lightsail 就是那个不拖后腿的搭档。它不强制你理解 IAM 角色继承链,也不要求你手写 CloudFormation 模板,但它背后依然是真实的 AWS 底层资源:你的实例运行在真实 EC2 实例上(只是被 Lightsail 抽象掉了),你的数据库是 RDS 的轻量封装,你的静态 IP 是 Elastic IP 的托管版本。这意味着你学到的不是玩具知识,而是可迁移的云能力:SSH 连接方式、Linux 系统管理、Apache/Nginx 配置逻辑、MySQL 权限模型……全都是生产环境真材实料。我带过不少转行学员,他们用 Lightsail 搭建个人博客、部署毕业设计项目、甚至跑通第一个 SaaS 原型,三个月后切换到 EC2 时,90% 的操作习惯完全复用,唯一要补的只是“为什么这里要多配一个安全组”这种原理性认知。所以别被“入门级”三个字误导——Lightsail 是 AWS 给新手的降落伞,但伞绳连着的是整片云的真实结构。

2. Lightsail 的底层逻辑与核心设计哲学

2.1 它不是“阉割版”,而是“预装工厂”

很多人误以为 Lightsail 是 EC2 的缩水版,其实恰恰相反:它是 AWS 把 EC2、EBS、ELB、Route 53、RDS 这些服务的常用组合,提前在后台打包成一套标准化交付单元。你可以把它想象成一家汽车厂——EC2 是裸露的发动机、底盘、变速箱散件,你需要自己组装、调校、上路测试;而 Lightsail 是已经完成总装、通过出厂检测、加满油、钥匙插在 ignition 上的整车。你坐进去,拧钥匙,就能开走。

这个“预装”体现在三个关键维度:

第一,资源绑定不可拆分 。在 EC2 中,你可以单独购买 16GB 内存的实例,再挂载 2TB 的 EBS 卷,再额外申请一个 Elastic IP,三者计费独立、生命周期独立。但在 Lightsail 里,“512MB RAM + 1vCPU + 20GB SSD + 1TB 月流量 + 公网 IPv4 地址”是一个原子单位,叫 Instance Plan 。你买的是这个整体套餐,不是其中某一项。这带来两个实际好处:一是计费零歧义,不会出现“咦我只开了实例怎么账单里还有 EBS 费用”;二是运维极简,重启实例时,IP、磁盘、网络规则全部自动关联,不用像 EC2 那样担心 EBS 卷没重新挂载、Elastic IP 没重新绑定。

第二,网络抽象为“开箱即用”模式 。EC2 的网络模型是 VPC → Subnet → Security Group → Network ACL → Route Table → Internet Gateway 的七层嵌套,新手光画架构图就得半小时。Lightsail 则把这套复杂性压缩成两个开关: Firewall Rules (防火墙规则)和 Static IP (静态 IP)。你点击“Add another rule”,选协议(TCP/UDP)、端口(80, 443, 22)、来源(My IP / Anywhere),保存即生效。没有子网 CIDR 需要计算,没有路由表需要编辑,没有网络 ACL 需要同步。背后的实现?AWS 自动为你创建了一个最小化 VPC,只包含必要组件,并屏蔽所有非必要配置入口。这不是功能缺失,而是把 95% 的用户根本用不到的 5% 配置项彻底隐藏,把注意力聚焦在“我的应用该开哪些端口”这个本质问题上。

第三,数据库即服务(DBaaS)深度集成 。EC2 上搭 MySQL,你要自己装包、配 my.cnf、设 root 密码、开远程访问、建用户、授权限、配备份脚本……Lightsail 数据库服务则直接提供一个带图形管理界面的 MySQL 或 PostgreSQL 实例,连接地址、端口、用户名、密码在创建时就生成好,主从复制、自动备份、快照恢复、参数组调整,全部点几下鼠标完成。更关键的是,它和你的 Lightsail 实例天然互通——同区域下,数据库连接地址直接填 your-db-name.xxxxxx.us-east-1.rds.amazonaws.com ,无需配置 VPC 对等连接或安全组放行,因为 AWS 已在后台为你打通了私有网络通道。这种“默认安全、默认互通”的设计,省掉的不是几个小时,而是新手面对网络不通时那种“到底哪里错了”的焦虑感。

2.2 定价模型:用确定性对抗云服务的不可预测性

EC2 的按秒计费、Spot 实例竞价、预留实例折扣、Savings Plans……这些机制对成本优化专家是利器,对刚起步的开发者却是陷阱。我见过太多人因为忘记关测试实例,月底收到四位数账单;也见过团队为省 $20 月费,花三天研究 Savings Plans 折扣率,结果上线延迟一周。Lightsail 的定价哲学非常直白: 你买多少资源,就付多少钱,不多不少,不因使用率波动

以最常用的 $5/月套餐为例,它包含:

  • 512MB 内存
  • 1 个 vCPU
  • 20GB SSD 存储
  • 1TB 月流量(出入站合计)
  • 1 个静态 IPv4 地址
  • 无限次快照存储(仅存储增量差异,不额外收费)

这里的关键细节在于“ 1TB 月流量 ”的定义。它不是“带宽上限”,而是“数据传输总量配额”。比如你网站一天被访问 1 万次,每次响应平均 1MB,那么日流量约 10GB,月流量约 300GB,在 1TB 配额内,你永远享受 5Mbps 的稳定带宽(这是 Lightsail 实例的默认带宽上限,$5 套餐对应 5Mbps,$10 套餐升至 10Mbps)。只有当月流量超过 1TB,才会按 $0.09/GB 收超额费。这和 EC2 的“按带宽峰值计费”(如 100Mbps 带宽,不管用不用都收钱)或“按流量计费”(每 GB 都算钱)有本质区别。对小流量项目,Lightsail 的成本曲线是一条平直的线;而 EC2 的成本曲线是一条可能突然飙升的折线。我在帮一个社区论坛迁移时做过测算:日活 500 用户的 Discourse 实例,在 Lightsail $10 套餐下,月均账单稳定 $10.27(含 $0.27 超额流量);在 EC2 t3.micro(免费套餐已过期)上,仅 EBS io1 卷 + 数据库 + 流量,月均浮动在 $18–$32 之间。确定性带来的不仅是省钱,更是预算可控性——你知道下个月服务器成本就是 $10,而不是“大概 $20 左右,看运气”。

2.3 安全模型:默认防御纵深,而非开放沙盒

新手最容易犯的安全错误,不是“不知道怎么加固”,而是“根本没意识到需要加固”。EC2 默认安全组放行所有入站流量(0.0.0.0/0),等于把服务器大门敞开,等你手动关上。Lightsail 则反其道而行之: 所有端口默认关闭,只开放你明确声明的端口 。当你创建实例时,控制台会弹出一个预设规则列表:HTTP (80), HTTPS (443), SSH (22)。你必须主动勾选,它们才会生效。没勾选?那你的实例对外就是“黑洞”,连 ping 都不通。

这个设计背后是 AWS 的安全理念转变:不再假设用户是安全专家,而是把“最小权限原则”作为默认行为。更进一步,Lightsail 还内置了两层防护:

第一层是 SSH 密钥强绑定 。创建实例时,你必须选择或创建一个 SSH 密钥对。这个密钥对由 AWS KMS 加密托管,私钥文件(.pem)只在你下载时提供一次,之后控制台不再显示。这意味着:

  • 无法用密码登录(root 登录被彻底禁用)
  • 私钥丢失 = 永久失去访问权限(除非重建实例)
  • 每个实例可绑定多个密钥,方便团队协作

第二层是自动快照保护 。Lightsail 允许你设置“自动快照”策略:每天/每周在指定时间点,自动创建实例的完整快照。这个快照不是简单复制磁盘,而是基于 LVM 的写时复制(Copy-on-Write)技术,只存储变化块,因此创建速度快(通常 < 30 秒)、存储成本低(首份全量,后续增量)。更重要的是,快照是 跨区域异步复制 的——你在美国东部创建的快照,会自动同步到美国西部备份点。这解决了两个致命风险:一是人为误操作(如 rm -rf /var/www ),二是区域级故障(如数据中心断电)。我曾有个客户在凌晨三点误删了整个 WordPress 数据库,我们从 2 小时前的自动快照恢复,全程 4 分钟,用户无感知。这种“默认开启、无需配置”的灾备能力,是 EC2 用户需要写脚本、配 Lambda、设 EventBridge 才能勉强达到的效果。

3. 从零开始:亲手搭建一个可公开访问的 WordPress 站点

3.1 创建实例前的必做准备:区域、密钥、命名规范

别急着点“Create Instance”。先花 2 分钟做三件事,能避免后续 80% 的连接和管理问题。

第一步:选择离你用户最近的区域 。Lightsail 目前支持 10+ 个区域,但并非所有区域功能一致。比如亚太地区(东京、首尔、孟买)的实例默认带 IPv6 支持,而部分欧洲区域对 CDN 集成更优。我的经验是:

  • 如果目标用户在中国大陆,选 Asia Pacific (Tokyo) —— 延迟最低,且 AWS 在东京有直连中国骨干网
  • 如果是欧美用户, US East (N. Virginia) 是首选,节点最多、生态最成熟
  • 绝对避开 US West (N. California) —— 这个区域 Lightsail 实例的 DNS 解析偶尔不稳定,我遇到过三次域名解析超时,排查半天才发现是区域锅

第二步:创建专属 SSH 密钥对 。不要用控制台自动生成的“default”密钥。点击左侧菜单 “Account” → “SSH Keys”,然后 “Create new key pair”。命名规则建议: lightsail-prod-2024-q3 (环境-用途-时间)。创建后, 立刻下载私钥文件(.pem)并移至安全位置 。Windows 用户注意:Lightsail 生成的私钥是 OpenSSH 格式,PuTTY 需要用 PuTTYgen 转换为 .ppk 格式(Load → Save private key)。Mac/Linux 用户可直接用:

chmod 400 ~/Downloads/lightsail-prod-2024-q3.pem
ssh -i ~/Downloads/lightsail-prod-2024-q3.pem ubuntu@YOUR_INSTANCE_IP

第三步:规划实例命名与标签 。Lightsail 控制台不支持 EC2 那样的 Tag 系统,但实例名(Instance Name)是你唯一的识别标识。别用 my-first-server 这种名字。采用 wp-blog-prod-tokyo (应用-环境-区域)格式。这样当你有 5 个实例时,一眼就能分辨哪个是生产博客、哪个是测试 API、哪个是备份数据库。

3.2 创建实例:蓝图选择与配置细节拆解

进入 Lightsail 控制台,点击 “Create instance”。页面分为三栏,我们逐项深挖:

左栏:Choose an instance image
这里有两个核心选项: Apps + OS OS only

  • Apps + OS :适合 90% 的新手。Lightsail 提供的 WordPress 蓝图不是简单装个 WordPress,而是预装了:
    ✓ Ubuntu 22.04 LTS(长期支持版,安全更新到 2032 年)
    ✓ Apache 2.4(启用 mod_rewrite,支持 WordPress 固定链接)
    ✓ PHP 8.1(预编译安装,含 opcache、gd、mbstring 等 WordPress 必需扩展)
    ✓ MySQL 8.0(已创建 wordpress 数据库,配置好 wp_user 账户)
    ✓ Let’s Encrypt SSL 证书自动签发脚本(首次访问 HTTP 会 301 重定向到 HTTPS)

    提示:WordPress 蓝图还预装了 WP-CLI 命令行工具,后续升级插件、导入内容全靠它,比后台点点点快十倍。

  • OS only :仅当你有特殊需求时才用,比如:
    × 需要 CentOS(某些老企业软件只认 CentOS)
    × 要部署 Node.js 应用(Lightsail 有 Node.js 蓝图,但版本较旧,不如自己装最新版)
    × 必须用 Windows Server(运行 .NET Framework 应用)

中栏:Choose your instance plan
$5 套餐(512MB RAM + 1vCPU)够不够?取决于你的 WordPress 规模:

  • 纯静态页面、少于 10 个插件、日活 < 100:稳稳够用
  • 启用 WooCommerce、WP Rocket 缓存、Elementor 可视化编辑器:建议 $10 套餐(1GB RAM)
  • 运行 BuddyPress 社区或大型媒体库:直接上 $20 套餐(2GB RAM)

注意:RAM 是硬瓶颈。WordPress 在 512MB 下,PHP-FPM 进程数会被限制在 3 个,一旦并发请求超 3,新请求排队等待,用户看到“504 Gateway Timeout”。这不是 CPU 不够,是内存耗尽导致进程崩溃。所以宁可多花 $5,也不要赌小流量。

右栏:Configure your instance
这里藏着三个关键开关:

  1. Instance name :按前述规范填写,如 wp-blog-prod-tokyo
  2. SSH key pair :务必选择你刚创建的密钥, 不要选 “None”
  3. Firewall :默认已勾选 HTTP/HTTPS/SSH。如果你只做后台管理,可取消 HTTP/HTTPS,只留 SSH(更安全);但首次部署,建议全选,方便调试。

点击 “Create instance” 后,控制台会显示 “Launching…” 状态。 耐心等 90 秒 ——这不是卡住,是 Lightsail 在后台执行:创建 EC2 实例 → 挂载 EBS 卷 → 安装 OS → 运行初始化脚本 → 启动 Apache/MySQL → 生成 SSL 证书。90 秒后状态变绿,表示就绪。

3.3 首次连接与环境验证:绕过所有“连接失败”陷阱

实例状态变绿后,别急着打开浏览器。先做三步验证:

第一步:确认公网 IP 和 SSH 可达性
在实例详情页,找到 “IPv4 address”(如 192.0.2.123 )。打开终端,执行:

ping -c 3 192.0.2.123
# 如果 ping 不通,不是网络问题,是 Lightsail 防火墙没开 ICMP —— 正常!
# 接着测 SSH 端口:
nc -zv 192.0.2.123 22
# 输出 "Connection to 192.0.2.123 port 22 [tcp/ssh] succeeded!" 才算成功

第二步:用控制台内置终端连接(最稳妥)
点击实例页的 “Connect” 按钮,选择 “Connect using browser-based SSH client”。这会打开一个网页版终端,自动加载你的密钥,无需本地配置。登录后,立即执行:

# 查看系统资源,确认没被偷跑
free -h && df -h
# 检查 Apache 是否运行
sudo systemctl status apache2
# 检查 MySQL 是否运行
sudo systemctl status mysql
# 查看 WordPress 安装路径
ls -la /var/www/html/
# 输出应包含 wp-config.php, wp-admin/, wp-includes/ 等标准目录

第三步:浏览器访问,触发 SSL 证书生成
在浏览器输入 http://192.0.2.123 。首次访问会跳转到 https://192.0.2.123 ,并显示 “Your connection is not private” 警告(因为 Let’s Encrypt 证书是针对域名签发的,不是 IP)。 这是正常现象 。点击 “Advanced” → “Proceed to 192.0.2.123 (unsafe)”,你会看到 WordPress 安装向导页面。此时 Lightsail 后台已静默完成:

  • 为该 IP 生成临时自签名证书(用于 HTTPS 重定向)
  • 初始化 MySQL 数据库表结构
  • 创建默认管理员账户(用户名 admin ,密码在 /home/ubuntu/wordpress-install.log 中)

注意:这个临时证书仅用于首次安装。安装完成后,你必须绑定域名,才能获得真正的 Let’s Encrypt 证书。否则,所有 HTTPS 访问都会显示不安全警告。

3.4 绑定域名与启用 HTTPS:从 IP 访问到专业站点

现在你的 WordPress 能跑了,但用 IP 访问既不专业,也无法获得有效 SSL 证书。绑定域名只需三步:

第一步:在 Lightsail 控制台添加静态 IP
实例详情页 → “Networking” 标签 → “Create static IP”。命名如 wp-blog-static-ip ,关联到你的实例。 这步必须做 !否则实例重启后 IP 会变,你的域名就指向了空地址。静态 IP 是免费的(只要绑定着实例就不收费)。

第二步:配置 DNS 解析
登录你的域名注册商(如 GoDaddy、Namecheap),添加两条记录:

  • A 记录 :主机名 @ ,值 192.0.2.123 (你的静态 IP)
  • CNAME 记录 :主机名 www ,值 yourdomain.com. (注意末尾的点)
    DNS 生效时间通常 1–24 小时。用 dig yourdomain.com A 命令检查是否已解析到正确 IP。

第三步:在 WordPress 中启用 HTTPS 并强制跳转
等 DNS 生效后,访问 http://yourdomain.com 。Lightsail 会自动检测到域名,触发 Let’s Encrypt 证书申请(约 2 分钟)。成功后:

  1. 登录 WordPress 后台( https://yourdomain.com/wp-admin
  2. 进入 “Settings” → “General”
  3. 将 “WordPress Address (URL)” 和 “Site Address (URL)” 全部改为 https://yourdomain.com (必须带 https)
  4. 保存更改

此时,所有 HTTP 请求会 301 重定向到 HTTPS,浏览器地址栏显示绿色锁图标。Lightsail 的 SSL 管理是全自动的:证书 90 天到期前 30 天,后台自动续签,无需人工干预。

4. 进阶实战:部署自定义 Node.js 应用与数据库联动

4.1 从零构建 Node.js 环境:超越蓝图的灵活性

WordPress 蓝图省事,但你的创业项目可能是 Express.js API 或 Next.js 前端。这时选 “OS only” + Ubuntu 更合适。创建实例后,按以下步骤构建生产级 Node.js 环境:

第一步:安装 Node.js 与 PM2 进程管理器

# 使用 NodeSource 仓库安装最新 LTS 版(当前 20.x)
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs

# 安装 PM2(进程守护,自动重启崩溃应用)
sudo npm install -g pm2

# 验证安装
node --version && npm --version && pm2 --version

第二步:上传代码与依赖安装
假设你的代码在 GitHub 仓库 https://github.com/yourname/my-api

# 进入网站根目录
cd /var/www/html

# 克隆代码(推荐用 deploy key,比密码安全)
git clone https://github.com/yourname/my-api.git .

# 安装依赖(--production 只装生产依赖,省空间)
npm install --production

# 创建 .env 文件(敏感配置)
cat > .env << 'EOF'
NODE_ENV=production
PORT=3000
DB_HOST=your-db-name.xxxxxx.us-east-1.rds.amazonaws.com
DB_USER=lightsail_db_user
DB_PASSWORD=your_secure_password
EOF

第三步:配置 Nginx 反向代理(关键!)
Node.js 默认监听 localhost:3000 ,不能直接暴露给公网。必须用 Nginx 做反向代理:

# 安装 Nginx
sudo apt install nginx -y

# 创建站点配置文件
sudo tee /etc/nginx/sites-available/my-api << 'EOF'
server {
    listen 80;
    server_name yourdomain.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
EOF

# 启用配置
sudo ln -sf /etc/nginx/sites-available/my-api /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

第四步:用 PM2 启动应用并开机自启

# 启动应用(--name 指定进程名,方便管理)
pm2 start app.js --name "my-api" --env production

# 保存进程列表,实现开机自启
pm2 startup systemd
pm2 save

# 查看进程状态
pm2 status
# 输出应显示 "online" 状态

此时访问 http://yourdomain.com ,Nginx 会将请求转发给 localhost:3000 的 Node.js 进程。所有错误日志可通过 pm2 logs my-api 实时查看。

4.2 连接 Lightsail 托管数据库:安全、高效、免运维

你的 Node.js 应用需要数据库。Lightsail 提供的 MySQL 数据库服务,比自己在 EC2 上搭 MySQL 省心十倍:

创建数据库实例
控制台 → “Databases” → “Create database”。选择:

  • Engine: MySQL
  • Plan: $15/month(1GB RAM + 40GB SSD,足够中小应用)
  • Master username: dbadmin (不要用 root)
  • Publicly accessible: Uncheck (默认私有,更安全)

创建后,你会得到:

  • Endpoint: my-db.xxxxxx.us-east-1.rds.amazonaws.com
  • Port: 3306
  • Master username: dbadmin
  • Password: (你设置的密码)

在 Node.js 中安全连接

// config/database.js
const mysql = require('mysql2/promise');

const pool = mysql.createPool({
  host: process.env.DB_HOST, // 从 .env 读取
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: 'myapp_db',
  waitForConnections: true,
  connectionLimit: 10,
  queueLimit: 0
});

module.exports = pool;

关键安全实践

  • 绝不硬编码密码 :始终通过 .env 文件或 Lightsail 实例的 User Data 注入环境变量
  • 创建专用数据库用户 :不要用 dbadmin 连接应用。登录数据库后执行:
    CREATE DATABASE myapp_db;
    CREATE USER 'myapp_user'@'%' IDENTIFIED BY 'strong_password_here';
    GRANT SELECT, INSERT, UPDATE, DELETE ON myapp_db.* TO 'myapp_user'@'%';
    FLUSH PRIVILEGES;
    
  • 利用 Lightsail 的私有网络 :你的 Node.js 实例和数据库实例在同一区域时,连接走 AWS 内网,不经过公网,延迟 < 1ms,且无需配置安全组放行——AWS 已在后台打通。

4.3 自动化部署流水线:从代码提交到线上生效

每次改一行代码都要手动 git pull、npm install、pm2 restart?太原始。用 Lightsail 的 “Instance Snapshots” + “Launch script” 实现一键部署:

第一步:创建部署脚本
在实例上创建 /home/ubuntu/deploy.sh

#!/bin/bash
cd /var/www/html
git pull origin main
npm install --production
pm2 reload my-api
echo "Deploy completed at $(date)" >> /var/log/deploy.log

第二步:制作可复用的快照
控制台 → 实例页 → “Snapshots” → “Create snapshot”。命名 nodejs-prod-base-202406 。这个快照包含:

  • Ubuntu 22.04 系统
  • Node.js 20.x + PM2 + Nginx 环境
  • 预配置的 Nginx 反向代理规则
  • 部署脚本 /home/ubuntu/deploy.sh

第三步:用快照快速克隆新环境
当需要测试新功能时:

  • 用快照 nodejs-prod-base-202406 创建新实例
  • 修改新实例的 Nginx 配置,指向测试域名 test.yourdomain.com
  • 运行 bash /home/ubuntu/deploy.sh 即可拉取测试分支代码
  • 无需重复安装环境,5 分钟内获得全新隔离环境

这就是 Lightsail 的威力:快照不是备份,而是 环境模板 。你维护一个黄金镜像,所有新实例都从此诞生,彻底消灭 “在我机器上是好的” 这类问题。

5. 真实踩坑记录:那些文档里不会写的排错技巧

5.1 “Connection refused” 的 5 种真相与速查表

SSH 连接报 “Connection refused”,新手第一反应是密钥错了。其实 90% 的情况是其他原因。我整理了一份速查表,按发生概率排序:

现象 最可能原因 快速验证命令 解决方案
ssh: connect to host 192.0.2.123 port 22: Connection refused 实例未完全启动(状态是 “Starting” 但控制台显示 “Running”) nc -zv 192.0.2.123 22 (多次执行,间隔 10 秒) 等待 2–3 分钟,Lightsail 初始化耗时长于显示状态
ssh: connect to host 192.0.2.123 port 22: Connection refused 防火墙规则未生效(刚创建实例后立即测试) 控制台 → 实例 → “Networking” → 检查 “SSH” 规则是否勾选并显示 “Active” 点击规则右侧 “⋮” → “Edit” → 保存一次,强制刷新
ssh: connect to host 192.0.2.123 port 22: Connection refused 实例被意外停止(如误点 “Stop”) 控制台 → 实例状态是否为 “Stopped” 点击 “Start” 按钮,等待状态变绿
ssh: connect to host 192.0.2.123 port 22: Connection refused SSH 服务崩溃(Ubuntu 系统更新后常见) 用控制台内置终端连接(无需 SSH)→ sudo systemctl status ssh sudo systemctl restart ssh
ssh: connect to host 192.0.2.123 port 22: Connection refused 密钥权限错误(Mac/Linux) ls -l ~/Downloads/your-key.pem chmod 400 ~/Downloads/your-key.pem

实操心得:我给自己定了个铁律——任何连接问题,先用控制台内置终端连一次。如果内置终端能连,说明实例活着,问题出在本地网络或密钥;如果内置终端也连不上,说明实例本身有问题,立刻检查状态和防火墙。

5.2 WordPress 白屏、500 错误、数据库连接失败的根因分析

WordPress 部署后出现白屏,不是代码问题,而是环境配置失配。以下是高频原因及修复命令:

问题 1:白屏(空白页面,无错误)

  • 根因 :PHP 内存限制不足(WordPress 至少需 128MB)
  • 验证 sudo nano /etc/php/*/apache2/php.ini ,搜索 memory_limit
  • 修复 :改为 memory_limit = 256M ,然后 sudo systemctl restart apache2

问题 2:500 Internal Server Error

  • 根因 .htaccess 文件权限错误或 Apache rewrite 模块未启用
  • 验证 sudo a2enmod rewrite sudo systemctl restart apache2
  • 修复 sudo chown www-data:www-data /var/www/html/.htaccess

问题 3:“Error establishing a database connection”

  • 根因 :MySQL 服务未启动,或 WordPress 配置的数据库名/用户错误
  • 验证 sudo systemctl status mysql sudo mysql -u dbadmin -p -e "SHOW DATABASES;"
  • 修复 :检查 /var/www/html/wp-config.php 中的 DB_NAME , DB_USER , DB_PASSWORD 是否与数据库实例一致;若密码含特殊字符(如 @ , $ ),需在 wp-config.php 中用 \ 转义

问题 4:后台上传图片失败(HTTP 错误)

  • 根因 :PHP 上传限制过小
  • 验证 php -i | grep -E "upload_max_filesize|post_max_size"
  • 修复 :编辑 /etc/php/*/apache2/php.ini ,设 upload_max_filesize = 64M post_max_size = 64M max_execution_time = 300 ,重启 Apache

5.3 流量突增应对:从监控告警到自动扩容

Lightsail 实例流量突增(如文章被大号转发),CPU 100%、网站打不开。别慌,按步骤处理:

第一步:实时监控定位瓶颈
控制台 → 实例页 → “Metrics” 标签:

  • 查看 CPUUtilization 曲线:持续 > 90% 表示 CPU 瓶颈
  • 查看 NetworkIn/Out :对比 1TB 配额,确认是否接近用尽
  • 查看 DiskReadOps/DiskWriteOps :IOPS 高说明磁盘慢(如大量图片读取)

第二步:紧急扩容(垂直升级)

  • 控制台 → 实例页 → “Manage” → “Change instance plan”
  • 选择更高套餐(如从 $5 → $10)→ “Save”
  • Lightsail 会自动:停止实例 → 创建新规格实例 → 挂载原 EBS 卷 → 启动
  • 全程约 3–5 分钟,网站短暂中断(< 30 秒)

第三步:预防性优化(永久解决)

  • 启用 OPcache sudo phpenmod opcache ,编辑 /etc/php/*/apache2/conf.d/10-opcache.ini ,设 opcache.enable=1
  • 添加 Redis 缓存 sudo apt install redis-server ,WordPress 安装 “Redis Object Cache” 插件
  • CDN 加速 :控制台 → “Networking” → “Create load balancer”,关联实例后,CDN 地址自动生效

注意:Lightsail 的垂直升级是“停机升级”,不是热升级。所以重要业务,建议在低峰期操作,或提前用快照创建备用实例,升级失败时秒级回滚。

6. 从 Lightsail 到 EC2:平滑过渡的迁移路径与决策树

Lightsail 终究有边界:当你的应用需要 VPC 对等连接、跨账户资源共享、精细的 IAM 权限控制、或混合云架构时,就必须迁移到 EC2。但迁移不是推倒重来,而是能力升级。我总结了一套决策树和实操路径:

6.1 什么信号表明该迁移了?——

更多推荐