作者: Marce

  • 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

  • 世界,您好!

    欢迎使用 WordPress。这是您的第一篇文章。编辑或删除它,然后开始写作吧!