努力
加油

使用阿里云ECS Ubuntu服务器部署LNMP和WordPress的完整步骤是什么?

在阿里云 ECS 上跑 Ubuntu + LNMP (Linux, Nginx, MySQL/MariaDB, PHP) + WordPress,是互联网建站最经典、也最稳妥的组合之一。Ubuntu 的包管理 apt 比 CentOS 的 yum 更直观,Nginx 在高并发下的表现也比 Apache 更轻盈。

下面是一份经过实战验证的操作指南,按逻辑顺序执行即可。假设你已经通过 SSH 登录到了服务器(root 用户或具有 sudo 权限的用户)。

第一阶段:环境准备与系统更新

不要直接装软件,先确保系统是最新的,避免依赖冲突。

# 更新软件源列表
sudo apt update

# 升级已安装的软件包
sudo apt upgrade -y

# 安装必要的构建工具和基础组件
sudo apt install -y build-essential libssl-dev zlib1g-dev

第二阶段:安装 Nginx

Nginx 作为反向XX和静态资源服务器。

# 安装 Nginx
sudo apt install nginx -y

# 启动并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx

# 检查状态
sudo systemctl status nginx

关键点:
此时浏览器访问你的 ECS 公网 IP,应该能看到 Nginx 的欢迎页面。如果看不到,请检查阿里云安全组是否放行了 80 和 443 端口。

第三阶段:安装 MariaDB (MySQL 分支)

MariaDB 是 MySQL 的一个开源分支,性能更好,且完全兼容 MySQL 命令。WordPress 推荐用 MySQL 5.7+ 或 8.0+。

# 安装 MariaDB 服务器
sudo apt install mariadb-server mariadb-client -y

# 启动服务
sudo systemctl start mariadb
sudo systemctl enable mariadb

# 运行安全脚本(强烈建议执行)
sudo mysql_secure_installation

执行 mysql_secure_installation 时:

  1. 输入当前 root 密码(首次安装通常为空,直接回车)。
  2. Set root password? [Y/n] -> 输入 y,设置一个强密码。
  3. Remove anonymous users? [Y/n] -> 输入 y。
  4. Disallow root login remotely? [Y/n] -> 输入 y(禁止远程 root 登录,安全)。
  5. Remove test database and access to it? [Y/n] -> 输入 y。
  6. Reload privilege tables now? [Y/n] -> 输入 y。

创建 WordPress 数据库和用户:

# 登录数据库
sudo mysql

# 在 MariaDB 命令行中执行以下 SQL:
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'YourStrongPassword123!';
GRANT ALL ON wordpress.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

注意:将 YourStrongPassword123! 替换为你自己的复杂密码。

第四阶段:安装 PHP 及必要扩展

Ubuntu 默认的 PHP 版本可能较老,建议安装 PHP 8.1 或 8.2(目前主流稳定版)。

# 添加 Ondrej PHP PPA 源(获取最新 PHP 版本的关键步骤)
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update

# 安装 PHP 8.2 及常用扩展
sudo apt install php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd php8.2-mbstring php8.2-xml php8.2-xmlrpc php8.2-soap php8.2-zip php8.2-intl -y

配置 PHP-FPM 以配合 Nginx:

编辑 /etc/php/8.2/fpm/pool.d/www.conf,确保 user 和 group 设置为 www-data(默认通常就是,但需确认):

user = www-data
group = www-data

重启 PHP-FPM 服务:

sudo systemctl restart php8.2-fpm

第五阶段:配置 Nginx 虚拟主机

这是最容易出错的地方。我们需要告诉 Nginx 如何把 .php 请求交给 PHP-FPM 处理。

  1. 创建网站根目录:

    sudo mkdir -p /var/www/html
    sudo chown -R $USER:$USER /var/www/html
    sudo chmod -R 755 /var/www/html
  2. 创建配置文件:

    sudo nano /etc/nginx/sites-available/wordpress
  3. 粘贴以下内容(请将 your_domain.com 替换为你的域名或 IP):

    server {
        listen 80;
        server_name your_domain.com www.your_domain.com; # 如果是IP,这里写IP或留空
        root /var/www/html;
        index index.php index.html index.htm;
    
        # 日志路径
        access_log /var/log/nginx/wordpress.access.log;
        error_log /var/log/nginx/wordpress.error.log;
    
        client_max_body_size 100M; # 允许上传较大文件,适合媒体库
    
        location / {
            try_files $uri $uri/ /index.php?$args;
        }
    
        # 处理 PHP 文件
        location ~ .php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 注意 sock 路径要与实际一致
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    
        # 禁止访问隐藏文件
        location ~ /. {
            deny all;
        }
    
        # 禁止访问 wp-config.php
        location ~* /wp-config.php {
            deny all;
        }
    }
  4. 启用站点并测试配置:

    sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
    sudo nginx -t

    如果显示 syntax is ok 和 test is successful,则继续。

  5. 重启 Nginx:

    sudo systemctl reload nginx

第六阶段:部署 WordPress

  1. 下载最新版 WordPress:

    cd /tmp
    wget https://wordpress.org/latest.tar.gz
    tar xzvf latest.tar.gz
  2. 移动文件到网站根目录:

    sudo cp -r wordpress/* /var/www/html/
    sudo chown -R www-data:www-data /var/www/html/
    sudo find /var/www/html/ -type d -exec chmod 755 {} ;
    sudo find /var/www/html/ -type f -exec chmod 644 {} ;
  3. 生成密钥(可选,但推荐):
    访问 https://api.wordpress.org/secret-key/1.1/salt/ 复制生成的密钥串。

  4. 打开浏览器,访问 http://你的ECS公网IP 或 http://你的域名。

    • 选择语言。
    • 输入之前创建的数据库名 (wordpress)、用户名 (wp_user)、密码。
    • 主机填 localhost。
    • 点击“提交”,然后“运行安装程序”。
    • 填写站点标题、管理员账号和密码。

第七阶段:后续优化与安全加固(重要)

刚装好的 WordPress 虽然能用,但要上线,还需要做以下几件事:

1. 配置固定链接 (Permalinks)

进入 WordPress 后台 -> 设置 -> 固定链接 -> 选择“文章名” -> 保存。
这会触发 Nginx 重写规则生效。如果你发现刷新页面出现 404,通常是 Nginx 配置中的 try_files 没生效,或者需要重载 Nginx。

2. 安装 SSL 证书 (HTTPS)

使用 Let’s Encrypt 免费证书。

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain.com

按照提示操作,Certbot 会自动修改 Nginx 配置并重定向 HTTP 到 HTTPS。

3. 调整 PHP 内存限制

编辑 /etc/php/8.2/fpm/php.ini:

memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300

重启 PHP-FPM:sudo systemctl restart php8.2-fpm

4. 安装缓存插件

在 WordPress 后台安装 WP Super Cache 或 W3 Total Cache,能显著提升加载速度。

5. 备份策略

  • 数据库备份:可以使用 mysqldump 编写脚本定时备份,或使用宝塔面板等工具(如果你装了的话)。
  • 文件备份:利用阿里云 OSS 或本地定期打包 /var/www/html 和 /etc/nginx。
  • 快照:在阿里云控制台,对 ECS 磁盘创建定期快照,这是最底层的灾难恢复手段。

常见问题排查

  1. 502 Bad Gateway:

    • 检查 PHP-FPM 是否运行:sudo systemctl status php8.2-fpm
    • 检查 Nginx 错误日志:tail -f /var/log/nginx/error.log
    • 常见原因:PHP-FPM 未启动,或 socket 路径不匹配。
  2. 403 Forbidden:

    • 检查文件权限:确保 /var/www/html 下的文件所有者是 www-data。
    • 检查 SELinux(Ubuntu 默认关闭,但如果开了,需要调整上下文)。
  3. 无法上传图片:

    • 检查 wp-content/uploads 目录权限是否为 755 或 775,所有者为 www-data。

这套流程涵盖了从底层系统到应用层的核心步骤。对于生产环境,建议后续再引入 Redis 做对象缓存,并使用云盾或 WAF 进行安全防护。