阿里云(ecs)服务器搭建lnmp(linux+nginx+mysql+php)环境并部署workpress个人博客网站)
linux version:Rocky linux 9.7nginx version: nginx/1.20.1mysql Ver 8.0.46 for Linux on x86_64 (MySQL Community Server - GPL)php version:PHP 8.0.30一、环境准备与连接1. 使用 FinalShell 连接ecs服务器打开 FinalShell,点击新建 SSH 连接填写:名称(随意)、主机(服务器公网 IP)、端口 22、用户名root、密码点击连接,进入终端2. 更新系统bashdnf update -y一般建议在新部署服务器时先执行一次全面更新,之后根据安全公告和实际需要定期更新。dnf update -y中的-y自动确认,适合在非交互脚本中使用,但生产环境更新前最好先备份或建立快照。二、安装 Nginxbashdnf install -y nginx systemctl enable nginx systemctl start nginx验证:浏览器访问http://服务器IP,能看到 Nginx 欢迎页即成功。三、安装 MySQL 8.0(官方仓库)1. 添加 MySQL Yum 仓库bashdnf install -y https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm2. 安装 MySQL 服务器bashdnf install -y mysql-community-server3. 启动并设置开机自启bashsystemctl enable mysqld systemctl start mysqld4. 获取临时密码bashgrep temporary password /var/log/mysqld.log复制输出的临时密码。5. 修改 root 密码bashmysql -u root -p输入临时密码登录,然后执行:sqlALTER USER root@localhost IDENTIFIED BY 你的强密码; FLUSH PRIVILEGES; EXIT;ps:这里改完退出MySQL模式后,可改密码策略:1. 使用临时密码登录 MySQLbashmysql -u root -p输入临时密码。2.查看当前密码策略sqlSHOW VARIABLES LIKE validate_password%;输出类似:text+--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password.check_user_name | ON | | validate_password.dictionary_file | | | validate_password.length | 8 | | validate_password.mixed_case_count | 1 | | validate_password.number_count | 1 | | validate_password.policy | MEDIUM | | validate_password.special_char_count | 1 | +--------------------------------------+--------+3. 调整密码策略为最低要求(或直接禁用)可以降低策略等级和长度要求:sqlSET GLOBAL validate_password.policy = LOW; SET GLOBAL validate_password.length = 4; SET GLOBAL validate_password.mixed_case_count = 0; SET GLOBAL validate_password.number_count = 0; SET GLOBAL validate_password.special_char_count = 0;policy = LOW只检查长度;length = 4允许密码长度至少 4 位,123456有 6 位,满足;将大小写、数字、特殊字符数量要求都设为 0,则不再强制包含这些字符。注意:在 MySQL 8.0 中,变量名使用点号(.),如validate_password.policy,而非旧版的下划线(validate_password_policy)。4. 修改 root 密码为 123456sqlALTER USER root@localhost IDENTIFIED BY 123456; FLUSH PRIVILEGES;5. 验证退出后重新登录测试:bashmysql -u root -p1234566. 让设置永久生效(可选)上述设置仅在 MySQL 运行期间有效,重启后会恢复默认。若希望永久生效,可以在 MySQL 配置文件/etc/my.cnf的[mysqld]段添加:inivalidate_password.policy=LOW validate_password.length=4 validate_password.mixed_case_count=0 validate_password.number_count=0 validate_password.special_char_count=0保存后重启 MySQL 服务:bashsystemctl restart mysqld⚠️ 安全警告将数据库 root 密码设为123456极其危险,强烈不建议在生产环境使用。即使只是个人测试服务器,也建议使用复杂密码并妥善保管。如果坚持使用简单密码,请务必确保服务器防火墙和安全组已限制 MySQL 端口(3306)仅本机访问,不要对公网开放。6. 创建 WordPress 数据库和用户bashmysql -u root -p输入新密码,执行:sqlCREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER wpuser@localhost IDENTIFIED BY 你的数据库用户密码; GRANT ALL PRIVILEGES ON wordpress.* TO wpuser@localhost; FLUSH PRIVILEGES; EXIT;若以后 PHP 连接 MySQL 报认证错误,可执行:sqlALTER USER wpuser@localhost IDENTIFIED WITH mysql_native_password BY 你的数据库用户密码;四、安装 PHP 8 及扩展bashdnf install -y php php-fpm php-mysqlnd php-gd php-xml php-mbstring php-json php-curl php-zip php-intl systemctl enable php-fpm systemctl start php-fpm使用 FinalShell 修改 PHP-FPM 运行用户在 FinalShell 左侧文件管理器中,导航到/etc/php-fpm.d/右键www.conf,选择编辑找到:textuser = apache group = apache修改为:textuser = nginx group = nginx保存文件(Ctrl+S)回到终端执行:bashsystemctl restart php-fpm五、配置 Nginx 虚拟主机1. 创建站点目录bashmkdir -p /var/www/wordpress2. 使用 FinalShell 创建并编辑配置文件在 FinalShell 文件管理器中,进入/etc/nginx/conf.d/右键空白处 新建文件,命名为wordpress.conf右键该文件 编辑,粘贴以下内容(将server_name改为你的域名或 IP,若没有域名写_):nginxserver { listen 80; server_name _; root /var/www/wordpress; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires max; log_not_found off; } location ~ /\.ht { deny all; } }保存文件3. 测试并重载 Nginxbashnginx -t systemctl reload nginx六、下载并配置 WordPress1. 下载 WordPressbashcd /var/www/wordpress wget https://wordpress.org/latest.tar.gz tar -xzf latest.tar.gz --strip-components=1 rm -f latest.tar.gz2. 设置权限bashchown -R nginx:nginx /var/www/wordpress find /var/www/wordpress -type d -exec chmod 755 {} \; find /var/www/wordpress -type f -exec chmod 644 {} \;3. 使用 FinalShell 配置 wp-config.php1. 进入 WordPress 目录在终端中执行:bashcd /var/www/wordpress2.复制配置文件bashcp wp-config-sample.php wp-config.php3. 使用 vi 编辑器修改配置文件执行:bashvi wp-config.php这时会进入vi编辑器,全程键盘操作。vi 基本操作:按/键进入搜索模式,输入DB_NAME然后回车,光标会跳到第一个匹配处。按n键跳转到下一个匹配项,直到定位到define( DB_NAME, database_name_here );这一行。按i键进入插入模式(屏幕底部会出现-- INSERT --)。使用方向键移动光标,将database_name_here修改为wordpress。按Esc键退出插入模式。重复上述步骤修改DB_USER和DB_PASSWORD:搜索DB_USER,将username_here改为wpuser。搜索DB_PASSWORD,将password_here改为您的数据库用户密码(例如你的强密码)。同样修改DB_HOST为localhost(通常默认已是,但确认一下)。按Esc确保退出插入模式。输入:wq然后按回车,保存并退出。4. 替换安全密钥(可选但强烈建议)ps:为什么要替换?具体作用:加密 Cookie:当用户登录 WordPress 后,服务器会生成一个包含用户身份信息的 Cookie。这些密钥用于对该 Cookie 进行哈希和加密,确保 Cookie 无法被篡改或伪造。防止会话劫持:如果没有这些随机密钥,攻击者可能更容易猜测或构造有效的登录 Cookie,从而冒充已登录用户。增强密码存储安全性:虽然 WordPress 密码本身使用哈希存储,但密钥用于生成更复杂的认证令牌,间接提升了整体安全性。为什么必须更换默认的占位符?WordPress 默认配置文件中的密钥是空占位符(如put your unique phrase here),如果保持原样,所有使用该默认配置的站点将共享相同的密钥,这使得攻击者可以轻易伪造 Cookie 并入侵任何未修改密钥的站点。更换为随机、唯一的密钥后,你的站点就拥有了独立的加密指纹,大幅提高安全性。其他好处:强制用户重新登录:如果网站曾经被入侵或怀疑 Cookie 泄露,更换密钥会使所有现有登录 Cookie 失效,用户必须重新登录,从而切断攻击者的会话。总结:更换安全密钥是 WordPress 安全配置的基本步骤,确保你的站点使用独一无二的加密密钥,防止 Cookie 伪造和会话劫持。强烈建议在安装时或首次配置时完成这一步。您可以继续使用 vi 替换密钥,但更简单的方法是使用命令行直接生成并替换。在终端执行以下命令(会自动从 WordPress 官方获取密钥并替换到配置文件中):bashcurl -s https://api.wordpress.org/secret-key/1.1/salt/ wp-config.php但这样会把密钥追加到文件末尾,并非替换原有占位符。更好的做法是先用 vi 删除原有的密钥占位行(通常是 8 行define(AUTH_KEY, put your unique phrase here);等),然后执行上述命令追加。或者使用 sed 命令替换,但比较复杂。简单起见,您可以手动用 vi 编辑:搜索AUTH_KEY,逐行删除占位内容并粘贴从网页复制的新密钥。不过既然要求全键盘,我们可以通过以下命令自动完成替换(利用curl和sed):bash# 备份原文件 cp wp-config.php wp-config.php.bak # 下载密钥并存储到临时文件 curl -s https://api.wordpress.org/secret-key/1.1/salt/ /tmp/salt.txt # 使用 sed 删除原有的 8 行密钥定义,并在相同位置插入新密钥 sed -i /AUTH_KEY/d; /SECURE_AUTH_KEY/d; /LOGGED_IN_KEY/d; /NONCE_KEY/d; /AUTH_SALT/d; /SECURE_AUTH_SALT/d; /LOGGED_IN_SALT/d; /NONCE_SALT/d wp-config.php sed -i /define( DB_COLLATE, );/r /tmp/salt.txt wp-config.php以上命令会删除所有旧密钥行,并在DB_COLLATE行之后插入新的密钥行。完成后可查看确认:bashgrep -E AUTH_KEY|SECURE_AUTH_KEY|LOGGED_IN_KEY|NONCE_KEY|AUTH_SALT|SECURE_AUTH_SALT|LOGGED_IN_SALT|NONCE_SALT wp-config.php5. 验证文件权限确保配置文件的属主和权限正确:bashchown nginx:nginx wp-config.php chmod 640 wp-config.php通过以上纯命令行操作,您已经完全避免了鼠标,成功配置了wp-config.php。如果后续还需要编辑其他文件,同样可以使用vi或nano(更简单的编辑器,使用Ctrl+O保存,Ctrl+X退出)。七、配置 SELinux 和防火墙bash# SELinux 设置 setsebool -P httpd_can_network_connect 1 setsebool -P httpd_can_network_connect_db 1 restorecon -Rv /var/www/wordpress # 防火墙开放端口 ps: 这里可能没安装防火墙:解决方案:1. 检查 firewalld 是否安装bashrpm -q firewalld如果未安装,先安装:bashdnf install -y firewalld2. 启动 firewalld 并设置开机自启bashsystemctl start firewalld systemctl enable firewalld3. 重新添加端口规则bashfirewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload4. 验证规则bashfirewall-cmd --list-services应该能看到http和https。补充说明:为什么 firewalld 没有运行?可能在系统安装时没有启用,或者被其他防火墙工具(如 iptables)替代。Rocky Linux 9 默认使用 firewalld,但可能被禁用。如果不想使用 firewalld,可以跳过这一步,因为阿里云安全组已经提供了网络层过滤,只要安全组放行了 80/443 端口,外部就能访问。但系统防火墙(firewalld)建议保持开启,以增加一层防护。如果已经开启了 firewalld 但仍然无法访问,请检查阿里云安全组规则是否放行 80/443 端口。 firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload别忘了在阿里云控制台的安全组中放行 80 和 443 端口。八、完成 WordPress 安装浏览器访问http://你的服务器IP或域名,按照向导填写:站点标题管理员用户名密码邮箱点击安装 WordPress即可。九、后续优化建议启用 HTTPS:使用 Certbot 申请免费 SSL 证书。定期备份:备份数据库和网站文件。安全加固:修改 SSH 端口、禁用密码登录、限制登录 IP 等。现在,您的 WordPress 个人博客已成功运行在阿里云 Rocky Linux 9.7 服务器上,数据库使用 MySQL,Web 服务器使用 Nginx,PHP 采用 PHP-FPM。FinalShell 让文件编辑和命令执行变得非常便捷,祝您使用愉快!