LNMP + WordPress建站

个人博客搭建流程

搭建的前置准备

  • 一台有公网IP地址的服务器

流程图示意如下:

个人博客搭建硬件准备软件准备服务准备服务器NginxApache域名和DNS解析WordPressMySQL

搭建的知识准备

当一个用户请求浏览一个网站时,简化过程如下:

发起请求DNS解析TCP握手服务器返回要访问的资源

所以当我们有了一个服务器后,要考虑的问题就有两个:

  1. 在用户想访问服务器上的一个网页资源时,我们如何使其在茫茫的网络大海中准确找到我们的服务器。
  2. 服务器如何实现返回用户所请求的网页资源。

做到了这两点,不考虑细节的实现问题,至少整个访问过程的逻辑就走通了。

第一点显然是个简单的问题,IP地址就是为了解决这个问题而生的。当然,现在一般的做法是使用域名,也就是常看到的xxx。xxx,加上如http、https这种网络协议,就成了URL

第二点也不难,实际上,一种简单的实现方式就是在服务器上跑一个python脚本,python脚本监听某些端口下的资源访问请求,脚本循环运行,一旦监听到请求,就按一定规则返回请求的资源,用户得到资源文件后在自己的浏览器上解析,就完成了一次访问。这完全可行,可实在是太过简陋。不过我们都知道,这种基础的东西早就有成熟的服务了,它们就是Nginx和Apache。其中,Nginx是基于事件驱动,所有请求以事件的形式在一个线程中被处理,而Apache则是多线程的,每有一个请求都会为其多开一个线程。所以,Nginx更适合处理静态网站和高并发,而Apache则更适合处理动态网站和一些花里胡哨的效果,不过,一般来说Nginx和Apache会被同时使用。

搭建过程

注: 视为已经做好基础准备,只记录关键步骤

免密配置

ssh-keygen生成密钥对,公钥上传至服务器,文件名:authorized_keys

安装LNMP(Linux + Nginx + MySQL + PHP)

由于LNMP的组合极为常用,所以已经有整合好的安装脚本,按指示下载解压安装接口,参考连接如:https://lnmp.org/download.html

下载命令:wget https://soft.lnmp.com/lnmp/lnmp2.1.tar.gz -cO lnmp2.1.tar.gz

其中,-c为断点续传, -O为将输出输入到指定文件

解压命令:tar zxf lnmp2.1.tar.gz && cd lnmp2.1 && ./install.sh lnmp

其中,z表示对-gz压缩格式进行解压, x表示提取归档内容, f指定要操作的文件名

安装命令: cd lnmp2.1 && ./install.sh lnmp

安装过程中会出现很多选项,一路回车使用默认配置即可。

安装完成后默认路径

  • Nginx 配置路径: /usr/local/nginx/
  • MySQL 数据路径: /usr/local/mysql/
  • PHP 配置路径: /usr/local/php/
  • 网站根目录: /home/wwwroot/default/image-20241117174452345

Nginx配置

使用命令cat /usr/local/nginx/conf/nginx.conf查看nginx配置文件

则网站根目录为/home/wwwroot/default

使用http://ip即可访问网站示例

安装WordPress

WordPress是使用PHP语言开发的博客平台,也就是一个博客框架。

  1. 使用wget https://cn.wordpress.org/latest-zh_CN.zip && unzip latest-zh_CN.zip -d /home/wwwroot将wordpress安装包下载并解压
  2. 登录MySQL,创建wordpress表,创建完成后输入exit退出。
mysql -u root -p
MySQL > create database wordpress;
  1. 修改nginx配置文件,修改网站根目录为wordpress
  2. nginx -t 检查是否有配置错误, 启动nginx进程时需要使用sudo权限。
  3. 修改wordpress目录的权限cd /home/wwwroot && chown -R www wordpress/ && chgrp -R www wordpress/

计划有变

试了半天一键安装脚本总是有各种问题,不如chatgpt,以下是chatgpt给出的过程。

以下是完整的步骤,用于在 Linux 系统(如 Ubuntu 20.04)上安装 MySQL、Nginx、PHP,并配置 WordPress 建站。


1. 更新系统软件包

bash复制代码sudo apt update
sudo apt upgrade -y

2. 安装 Nginx

安装并启动 Nginx:

bash复制代码sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx

验证 Nginx 是否运行:

bash


复制代码
sudo systemctl status nginx

在浏览器访问 http://your_server_ip,应该看到默认的 Nginx 页面。


3. 安装 MySQL

安装并启动 MySQL:

bash复制代码sudo apt install mysql-server -y
sudo systemctl start mysql
sudo systemctl enable mysql

为 MySQL 设置 root 密码和安全配置:

bash


复制代码
sudo mysql_secure_installation

进入 MySQL 创建数据库和用户:

bash


复制代码
sudo mysql -u root -p

在 MySQL Shell 中执行以下命令:

sql复制代码CREATE DATABASE wordpress_db;
CREATE USER 'wordpress_user'@'localhost' IDENTIFIED BY 'secure_password';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wordpress_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

4. 安装 PHP

安装 PHP 及其常用扩展:

bash


复制代码
sudo apt install php-fpm php-mysql -y

确认 PHP 安装版本:

bash


复制代码
php --version

5. 下载并配置 WordPress

下载最新版本的 WordPress:

bash复制代码cd /tmp
curl -O https://wordpress.org/latest.tar.gz
tar -xvzf latest.tar.gz
sudo mv wordpress /var/www/html/

配置 WordPress 文件夹的权限:

bash复制代码sudo chown -R www-data:www-data /var/www/html/wordpress
sudo chmod -R 755 /var/www/html/wordpress

复制默认配置文件并编辑:

bash复制代码cp /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php
sudo nano /var/www/html/wordpress/wp-config.php

修改以下内容,替换为你的数据库信息:

php复制代码define('DB_NAME', 'wordpress_db');
define('DB_USER', 'wordpress_user');
define('DB_PASSWORD', 'secure_password');
define('DB_HOST', 'localhost');

6. 配置 Nginx 为 WordPress 提供服务

创建 Nginx 配置文件:

bash


复制代码
sudo nano /etc/nginx/sites-available/wordpress

添加以下内容:

nginx复制代码server {
  listen 80;
  server_name your_server_ip;
  root /var/www/html/wordpress;

  index index.php index.html index.htm;

  location / {
      try_files $uri $uri/ /index.php?$args;
  }

  location ~ \.php$ {
      include snippets/fastcgi-php.conf;
      fastcgi_pass unix:/var/run/php/php-fpm.sock;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
  }

  location ~ /\.ht {
      deny all;
  }
}

启用配置并重新加载 Nginx:

bash复制代码sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

7. 访问 WordPress 网站

  1. 在浏览器访问 http://your_server_ip
  2. 按照页面提示完成 WordPress 设置,选择语言、创建管理员账号等。

8. 可选配置

安装 SSL 证书(Let’s Encrypt)

如果你有域名,可以用 Let’s Encrypt 添加 SSL:

bash复制代码sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain

证书安装成功后,Certbot 会自动更新 Nginx 配置。


验证网站运行状态

确保所有服务正常运行:

bash复制代码sudo systemctl status nginx
sudo systemctl status mysql
sudo systemctl status php7.4-fpm

完成后,你的 WordPress 网站应该已经可以正常运行。🎉

当你通过浏览器访问服务器的 IP 地址时,Nginx 会根据其配置文件来决定如何处理请求并将其导引到 WordPress。以下是详细的工作流程:


1. 接收到请求

当你访问 http://your_server_ip

  • 浏览器发送一个 HTTP 请求到服务器的 IP 地址。
  • Nginx 监听端口(默认是 80)并接收到该请求。

2. Nginx 查找对应的配置

Nginx 会检查其配置文件,尝试找到与请求匹配的 server 块。 在你的 wordpress 配置文件(位于 /etc/nginx/sites-enabled/wordpress)中定义了如下内容:

nginx复制代码server {
  listen 80;
  server_name your_server_ip;
  root /var/www/html/wordpress;

  index index.php index.html index.htm;

  location / {
      try_files $uri $uri/ /index.php?$args;
  }

  location ~ \.php$ {
      include snippets/fastcgi-php.conf;
      fastcgi_pass unix:/var/run/php/php-fpm.sock;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
  }
}

关键字段解析:

  • listen 80:Nginx 监听端口 80(HTTP 默认端口)。
  • server_name your_server_ip:指定匹配的请求域名(或 IP)。当请求 IP 与配置匹配时,这个 server 块生效。
  • root /var/www/html/wordpress:设置站点的根目录。WordPress 的文件就在此目录中。
  • index index.php ...:指定默认首页文件,优先加载 index.php

3. Nginx 路由逻辑

(1) / 路径的处理

浏览器请求 /,进入如下块:

nginx复制代码location / {
  try_files $uri $uri/ /index.php?$args;
}
  • try_files $uri:尝试找到用户请求的静态文件。如果用户访问 /image.jpg,Nginx 会检查是否存在 /var/www/html/wordpress/image.jpg
  • $uri/:尝试找到匹配的目录。
  • /index.php?$args:如果前两步都找不到,Nginx 会将请求转发给 index.php,并附带查询参数。

最终,WordPress 的 index.php 文件接管请求。


(2) .php 文件的处理

当请求被转发给 index.php 或其他 PHP 文件时:

nginx复制代码location ~ \.php$ {
  include snippets/fastcgi-php.conf;
  fastcgi_pass unix:/var/run/php/php-fpm.sock;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include fastcgi_params;
}
  • PHP 解析器:Nginx 将请求转发给 PHP-FPM(通过 fastcgi_pass),PHP-FPM 处理动态内容并生成 HTML。
  • $document_root$fastcgi_script_name:告诉 PHP-FPM 具体要执行的文件。

4. WordPress 处理请求

  • WordPress 的核心文件 index.php 接收请求。
  • WordPress 解析路径、查询数据库(通过 MySQL)并生成 HTML。
  • 最终 HTML 响应被返回给 Nginx。

将整个 WordPress 网站迁移到另一台服务器涉及以下步骤,包括文件和数据库的转移、配置调整以及验证。以下是详细的迁移流程:


1. 准备工作

在源服务器:

  • 确保网站运行正常,没有数据丢失或未备份的更新。
  • 检查 WordPress 版本和插件,确保目标服务器也满足运行要求。

在目标服务器:

  • 安装并配置 LEMP/LAMP 环境(Linux、Nginx/Apache、MySQL、PHP)。
  • 为 WordPress 创建一个新的数据库。

2. 备份源服务器

(1) 备份 WordPress 文件

使用以下命令将 WordPress 文件打包:

bash


复制代码
tar -czvf wordpress-files.tar.gz /var/www/html/wordpress

此命令将 /var/www/html/wordpress 中的所有文件(主题、插件、上传文件等)压缩到 wordpress-files.tar.gz

将该文件复制到本地或目标服务器:

bash


复制代码
scp wordpress-files.tar.gz user@target_server_ip:/path/to/destination/

(2) 备份数据库

导出 WordPress 的 MySQL 数据库:

bash


复制代码
mysqldump -u root -p wordpress_db > wordpress_db.sql

将备份文件复制到目标服务器:

bash


复制代码
scp wordpress_db.sql user@target_server_ip:/path/to/destination/

3. 在目标服务器还原

(1) 解压 WordPress 文件

在目标服务器上,将压缩文件解压到目标目录(例如 /var/www/html/wordpress):

bash


复制代码
tar -xzvf /path/to/destination/wordpress-files.tar.gz -C /var/www/html/

(2) 导入数据库

登录 MySQL 并创建一个新的数据库:

bash


复制代码
mysql -u root -p

在 MySQL 提示符下执行:

sql复制代码CREATE DATABASE wordpress_db;
EXIT;

导入数据库备份:

bash


复制代码
mysql -u root -p wordpress_db < /path/to/destination/wordpress_db.sql

4. 配置 WordPress

编辑 WordPress 的配置文件(/var/www/html/wordpress/wp-config.php),修改数据库连接信息:

php复制代码define('DB_NAME', 'wordpress_db');      // 新数据库名称
define('DB_USER', 'root'); // 数据库用户名
define('DB_PASSWORD', 'your_password');// 数据库密码
define('DB_HOST', 'localhost'); // 数据库主机

5. 配置 Nginx 或 Apache

Nginx 配置

更新 Nginx 配置文件:

bash


复制代码
sudo nano /etc/nginx/sites-available/wordpress

确保 root 指向 /var/www/html/wordpress

nginx复制代码server {
  listen 80;
  server_name your_target_server_ip;

  root /var/www/html/wordpress;
  index index.php index.html index.htm;

  location / {
      try_files $uri $uri/ /index.php?$args;
  }

  location ~ \.php$ {
      include snippets/fastcgi-php.conf;
      fastcgi_pass unix:/var/run/php/php-fpm.sock;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
  }
}

启用配置并重启 Nginx:

bash复制代码sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

6. 检查和测试

  1. 修改主机文件(如有需要) 如果域名未解析到新服务器,可以通过修改本地 hosts 文件来测试:
bash


复制代码
sudo nano /etc/hosts

添加一行:

复制代码
your_target_server_ip yourdomain.com
  1. 测试站点 通过浏览器访问新服务器的 IP 或域名,确保网站正常运行。
  2. 更新 WordPress 配置(如需要) 如果域名或路径发生变化,登录 WordPress 后台更新:
  • 设置 → 常规 → 修改 WordPress 地址和站点地址。

7. 额外步骤

  • 权限设置:确保 WordPress 文件的权限正确:bash复制代码sudo chown -R www-data:www-data /var/www/html/wordpress
    sudo chmod -R 755 /var/www/html/wordpress
  • 更新 DNS:将域名解析记录更新到新服务器的 IP 地址。

完成迁移

迁移完成后,确认所有功能正常,包括插件、主题和多媒体内容。如果发现问题,可以检查以下日志:

  • Nginx 错误日志:/var/log/nginx/error.log
  • PHP 错误日志:/var/log/php-fpm.log
  • WordPress 调试日志(如启用):wp-content/debug.log

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注