当前位置: 首页 > news >正文

在Ubuntu 16.04上使用LEMP安装WordPress的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

简介

WordPress 是互联网上最流行的 CMS(内容管理系统)。它允许您在 MySQL 后端和 PHP 处理的基础上轻松设置灵活的博客和网站。WordPress 已经被广泛采用,并且是快速搭建网站的绝佳选择。设置完成后,几乎所有管理工作都可以通过 Web 前端完成。

在本指南中,我们将专注于在 Ubuntu 16.04 服务器上使用 LEMP 栈(Linux、Nginx、MySQL 和 PHP)设置 WordPress 实例。

先决条件

要完成本教程,您需要访问 Ubuntu 16.04 服务器。

在开始本指南之前,您需要执行以下任务:

  • 在服务器上创建一个 sudo 用户:我们将使用具有 sudo 权限的非根用户完成本指南中的步骤。您可以按照我们的 Ubuntu 16.04 初始服务器设置指南创建一个具有 sudo 权限的用户。
  • 安装 LEMP 栈:WordPress 需要一个 Web 服务器、一个数据库和 PHP 才能正确运行。设置 LEMP 栈(Linux、Nginx、MySQL 和 PHP)可以满足所有这些要求。按照本指南安装和配置这些软件。
  • 使用 SSL 保护您的站点:WordPress 提供动态内容并处理用户身份验证和授权。TLS/SSL 是一种技术,可以让您加密站点的流量,使您的连接更加安全。设置 SSL 的方式将取决于您是否拥有站点的域名。
    • 如果您拥有域名… 保护您的站点最简单的方式是使用 Let’s Encrypt,它提供免费的受信任证书。按照我们的 Let’s Encrypt 指南为 Nginx 设置这个。
    • 如果您没有域名… 并且您只是用这个配置进行测试或个人使用,您可以使用自签名证书。这提供了相同类型的加密,但没有域名验证。按照我们的 Nginx 自签名 SSL 指南进行设置。

完成设置步骤后,以您的 sudo 用户登录到服务器并继续以下步骤。

步骤 1:为 WordPress 创建 MySQL 数据库和用户

我们将采取的第一步是一个准备工作。WordPress 使用 MySQL 来管理和存储站点和用户信息。我们已经安装了 MySQL,但我们需要为 WordPress 创建一个数据库和一个用户。

首先,通过发出以下命令登录到 MySQL root(管理)帐户:

mysql -u root -p

输入您在安装软件时为 MySQL root 帐户设置的密码。

首先,我们可以创建一个 WordPress 可以控制的单独数据库。您可以随意命名它,但为了简单起见,我们将在本指南中使用 wordpress。您可以通过输入以下命令为 WordPress 创建数据库:

CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

接下来,我们将创建一个单独的 MySQL 用户帐户,我们将专门用于操作我们的新数据库。从管理和安全的角度来看,创建单一功能的数据库和帐户是一个好主意。在本指南中,我们将使用名称 wordpressuser。如果您愿意,可以随意更改此名称。

我们将创建此帐户,设置密码,并授予我们创建的数据库访问权限。您可以通过输入以下命令来执行此操作。请记住为您的数据库用户选择一个强密码:

GRANT ALL ON wordpress.* TO 'wordpressuser'@'localhost' IDENTIFIED BY 'password';

现在您已经拥有了一个专门为 WordPress 创建的数据库和用户帐户。我们需要刷新权限,以便当前的 MySQL 实例知道我们所做的最近更改:

FLUSH PRIVILEGES;

通过输入以下命令退出 MySQL:

EXIT;

步骤 2:调整 Nginx 的配置以正确处理 WordPress

接下来,我们将对 Nginx 服务器块文件进行一些微小的调整。

首先,使用 sudo 权限打开默认的服务器块文件:

sudo nano /etc/nginx/sites-available/default

在主 server 块内,我们需要添加一些 location 块。

首先,为对 /favicon.ico/robots.txt 的请求创建精确匹配的 location 块,我们不希望记录这些请求。

我们将使用正则表达式 location 来匹配任何静态文件的请求。我们将再次关闭这些请求的日志记录,并将它们标记为高度可缓存,因为这些通常是昂贵的资源。您可以调整此静态文件列表,以包含站点可能使用的任何其他文件扩展名:

server {. . .location = /favicon.ico { log_not_found off; access_log off; }location = /robots.txt { log_not_found off; access_log off; allow all; }location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {expires max;log_not_found off;}. . .
}

在现有的 location / 块内,我们需要调整 try_files 列表,以便在默认选项返回 404 错误的地方,将控制传递给带有请求参数的 index.php 文件。

这应该看起来像这样:

server {. . .location / {#try_files $uri $uri/ =404;try_files $uri $uri/ /index.php$is_args$args;}. . .
}

完成后,保存并关闭文件。

现在,通过输入以下命令检查我们的配置是否存在语法错误:

sudo nginx -t

如果没有报告错误,则通过输入以下命令重新加载 Nginx:

sudo systemctl reload nginx

步骤 3:安装额外的 PHP 扩展

在设置 LEMP 栈时,我们只需要一个非常基本的扩展集合,以便让 PHP 能够与 MySQL 进行通信。WordPress 和许多插件利用了额外的 PHP 扩展。

我们可以通过以下命令下载并安装一些最受欢迎的用于 WordPress 的 PHP 扩展:

sudo apt-get update
sudo apt-get install php-curl php-gd php-mbstring php-mcrypt php-xml php-xmlrpc

安装完扩展后,重新启动 PHP-FPM 进程,以便运行的 PHP 处理器可以利用新安装的功能:

sudo systemctl restart php7.0-fpm

步骤 4:下载 WordPress

现在我们的服务器软件已配置好,可以下载并设置 WordPress。出于安全原因,建议始终从其官网获取最新版本的 WordPress。

切换到可写目录,然后通过以下命令下载压缩版本:

cd /tmp
curl -O https://wordpress.org/latest.tar.gz

解压缩文件以创建 WordPress 目录结构:

tar xzvf latest.tar.gz

我们将很快将这些文件移动到我们的文档根目录。在这之前,我们可以将示例配置文件复制到 WordPress 实际读取的文件名:

cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php

我们还可以创建 upgrade 目录,这样 WordPress 在更新软件后就不会遇到权限问题:

mkdir /tmp/wordpress/wp-content/upgrade

现在,我们可以将整个目录的内容复制到我们的文档根目录。我们使用 -a 标志来确保权限得到维持。我们在源目录的末尾使用一个点来指示应该复制目录中的所有内容,包括任何隐藏文件:

sudo cp -a /tmp/wordpress/. /var/www/html

步骤 5:配置 WordPress 目录

在进行基于 Web 的 WordPress 设置之前,我们需要调整 WordPress 目录中的一些项目。

调整所有权和权限

我们需要完成的重要任务之一是设置合理的文件权限和所有权。我们需要能够以普通用户身份写入这些文件,并且我们需要 Web 服务器也能够访问和调整某些文件和目录以正确运行。

首先,我们将所有文件的所有权分配给我们的用户名。在本指南中,我们将使用 sammy 作为我们的用户名,但您应该将其更改为与您的 sudo 用户匹配的用户名。我们将分配 www-data 组所有权:

sudo chown -R sammy:www-data /var/www/html

接下来,我们将在文档根目录中的每个目录上设置 setgid 位。这会导致在这些目录中创建的新文件继承父目录的组(我们刚刚设置为 www-data)而不是创建用户的主要组。这只是确保无论我们在命令行中的目录中创建文件时,Web 服务器仍然拥有组所有权。

我们可以通过输入以下命令在我们的 WordPress 安装中的每个目录上设置 setgid 位:

sudo find /var/www/html -type d -exec chmod g+s {} \;

我们将调整一些其他细粒度的权限。首先,我们将给 wp-content 目录分配组写权限,以便 Web 界面可以进行主题和插件更改:

sudo chmod g+w /var/www/html/wp-content

作为此过程的一部分,我们将给 Web 服务器写权限以访问这两个目录中的所有内容:

sudo chmod -R g+w /var/www/html/wp-content/themes
sudo chmod -R g+w /var/www/html/wp-content/plugins

这应该是一个合理的权限设置。某些插件和程序可能需要额外的调整。

设置 WordPress 配置文件

现在,我们需要对主 WordPress 配置文件进行一些更改。

打开文件后,我们首先要做的是调整一些密钥,以提供安装的安全性。WordPress 提供了一个安全的生成器,用于生成这些值,因此您无需自己想出好的值。这些值仅在内部使用,因此在这里使用复杂的安全值不会影响可用性。

要从 WordPress 密钥生成器获取安全值,请输入:

curl -s https://api.wordpress.org/secret-key/1.1/salt/

您将收到类似以下内容的唯一值:


define('AUTH_KEY',         '1jl/vqfs<XhdXoAPz9 请勿复制这些值 c_j{iwqD^<+c9.k<J@4H');
define('SECURE_AUTH_KEY',  'E2N-h2]Dcvp+aS/p7X 请勿复制这些值 {Ka(f;rv?Pxf})CgLi-3');
define('LOGGED_IN_KEY',    'W(50,{W^,OPB%PB<JF 请勿复制这些值 2;y&,2m%3]R6DUth[;88');
define('NONCE_KEY',        'll,4UC)7ua+8<!4VM+ 请勿复制这些值 #`DXF+[$atzM7 o^-C7g');
define('AUTH_SALT',        'koMrurzOA+|L_lG}kf 请勿复制这些值  07VC*Lj*lD&?3w!BT#-');
define('SECURE_AUTH_SALT', 'p32*p,]z%LZ+pAu:VY 请勿复制这些值 C-?y+K0DK_+F|0h{!_xY');
define('LOGGED_IN_SALT',   'i^/G2W7!-1H2OQ+t$3 请勿复制这些值 t6**bRVFSD[Hi])-qS`|');
define('NONCE_SALT',       'Q6]U:K?j4L%Z]}h^q7 请勿复制这些值 1% ^qUswWgn+6&xqHN&%');

这些是我们可以直接粘贴到配置文件中的配置行,以设置安全密钥。现在复制您收到的输出。

接下来,打开 WordPress 配置文件:

nano /var/www/html/wp-config.php

找到包含这些设置的虚拟值的部分。它看起来类似于:


. . .define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');
define('NONCE_KEY',        'put your unique phrase here');
define('AUTH_SALT',        'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT',   'put your unique phrase here');
define('NONCE_SALT',       'put your unique phrase here');. . .

删除这些行,并粘贴从命令行复制的值:


. . .define('AUTH_KEY',         '从命令行复制的值');
define('SECURE_AUTH_KEY',  '从命令行复制的值');
define('LOGGED_IN_KEY',    '从命令行复制的值');
define('NONCE_KEY',        '从命令行复制的值');
define('AUTH_SALT',        '从命令行复制的值');
define('SECURE_AUTH_SALT', '从命令行复制的值');
define('LOGGED_IN_SALT',   '从命令行复制的值');
define('NONCE_SALT',       '从命令行复制的值');. . .

接下来,我们需要修改文件开头的一些数据库连接设置。您需要调整数据库名称、数据库用户以及我们在 MySQL 中配置的相关密码。

我们需要进行的另一个更改是设置 WordPress 应该使用的文件系统写入方法。由于我们已经给予 Web 服务器在需要时写入的权限,因此我们可以明确地将文件系统方法设置为“direct”。如果不使用当前设置进行此设置,WordPress 在执行某些操作时会提示输入 FTP 凭据。

此设置可以添加到文件中的数据库连接设置下方,或者添加到文件的任何其他位置:


. . .define('DB_NAME', 'wordpress');/** MySQL database username */
define('DB_USER', 'wordpressuser');/** MySQL database password */
define('DB_PASSWORD', 'password');. . .define('FS_METHOD', 'direct');

完成后保存并关闭文件。

步骤 6:通过 Web 界面完成安装

现在服务器配置已经完成,我们可以通过 Web 界面完成安装。

在您的 Web 浏览器中,导航至服务器的域名或公共 IP 地址:

http://server_domain_or_IP

选择您想要使用的语言:

!WordPress 语言选择

接下来,您将进入主要设置页面。

为您的 WordPress 网站选择一个名称并选择一个用户名(出于安全考虑,建议不要选择类似 “admin” 的用户名)。系统会自动生成一个强密码。请保存此密码或选择其他强密码。

输入您的电子邮件地址,并选择是否希望阻止搜索引擎索引您的网站:

!WordPress 设置安装

当您点击继续后,将会进入登录页面:

!WordPress 登录提示

登录后,您将进入 WordPress 管理面板:

!WordPress 登录提示

升级 WordPress

随着 WordPress 升级的推出,您将无法通过当前权限在界面上安装它们。

我们在这里选择的权限旨在在升级之间的 99% 的时间内提供安全性和可用性之间的良好平衡。然而,它们对于软件自动应用更新来说有些过于限制。

当有更新可用时,请以您的 sudo 用户身份重新登录到服务器。临时将 Web 服务器进程访问整个文档根目录:

sudo chown -R www-data /var/www/html

现在,返回 WordPress 管理面板并应用更新。

完成后,出于安全考虑再次锁定权限:

sudo chown -R sammy /var/www/html

这只在应用 WordPress 升级时才需要进行。

结论

WordPress 应该已经安装并准备就绪!一些常见的下一步是为您的文章选择永久链接设置(可以在 设置 > 永久链接 中找到)或选择一个新主题(在 外观 > 主题 中)。如果这是您第一次使用 WordPress,请稍微探索一下界面,以熟悉您的新 CMS。

相关文章:

在Ubuntu 16.04上使用LEMP安装WordPress的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 WordPress 是互联网上最流行的 CMS&#xff08;内容管理系统&#xff09;。它允许您在 MySQL 后端和 PHP 处理的基础上轻松设置灵…...

显示器放大后,大漠识图识色坐标偏移解决方法

原因分析&#xff1a; 显示器分辨率较高&#xff0c;DPI设置放大125% or 150% or 200%&#xff0c;游戏打开时也会默认会根据显示器的放大比例自行放大&#xff0c;但是大漠综合管理工具抓图不会放大&#xff1b; 解决方法&#xff1a; 1、大漠综合管理…...

C++容器之list基本使用

目录 前言 一、list的介绍&#xff1f; 二、使用 1.list的构造 2.list iterator的使用 3.list capacity &#x1f947; empty &#x1f947;size 4.list element access &#x1f947; front &#x1f947; back 5.list modifiers &#x1f947; push_front &#x1f947; po…...

Redis-哨兵

概念 Redis Sentinel 相关名词解释 注意: 哨兵机制不负责存储数据,只是对其它的redis-server进程起到监控的作用哨兵节点,也会搞一个集合,防止一个挂了 ⼈⼯恢复主节点故障 用户监控: 实际开发中,对于服务器后端开发,监控程序,是很重要的 服务器长期运行,总会有一些意外,…...

Pikachu-Sql-Inject - 基于时间的盲注

基于时间的盲注&#xff1a; 就是前端的基于time 的盲注&#xff0c;什么错误信息都看不到&#xff0c;但是还可以通过特定的输入&#xff0c;判断后台的执行时间&#xff0c;从而确定注入。 mysql 里函数sleep() 是延时的意思&#xff0c;sleep(10)就是数据库延时10 秒返回内…...

JAVA开源项目 旅游管理系统 计算机毕业设计

本文项目编号 T 063 &#xff0c;文末自助获取源码 \color{red}{T063&#xff0c;文末自助获取源码} T063&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…...

景联文科技入选《2024中国AI大模型产业图谱2.0版》数据集代表厂商

近日&#xff0c;大数据产业领域头部媒体数据猿携手上海大数据联盟联合发布了备受瞩目的《2024中国AI大模型产业图谱2.0版》。以大数据与AI为代表的智能技术为主要视角&#xff0c;聚焦全产业链&#xff0c;为业内提供更为专业直观的行业指导。 景联文科技凭借高质量数据集&…...

【C语言】内存函数的使用和模拟实现

文章目录 一、memcpy的使用和模拟实现二、memmove的使用和模拟实现三、memset的使用四、memcmp的使用 一、memcpy的使用和模拟实现 在之前我们学习了使用和模拟实现strncpy函数&#xff0c;它是一个字符串函数&#xff0c;用来按照给定的字节个数来拷贝字符串&#xff0c;那么问…...

在WPF中实现多语言切换的四种方式

在WPF中有多种方式可以实现多语言&#xff0c;这里提供几种常用的方式。 一、使用XML实现多语言切换 使用XML实现多语言的思路就是使用XML作为绑定的数据源。主要用到XmlDataProvider类. 使用XmlDataProvider.Source属性指定XML文件的路径或通过XmlDataProvider.Document指定…...

30min 的OpenCV learning Note

1.安装python和pycharm与环境搭配 打开Windows终端&#xff1a;&#xff08;winR&#xff09;&#xff08;一般使用清华镜像网站安装库比较快&#xff09; pip install opencv-contrib-python -i https://pypi.mirrors.ustc.edu.cn/simple 或者 python -m pip install open…...

C--编译和链接见解

欢迎各位看官&#xff01;如果您觉得这篇文章对您有帮助的话 欢迎您分享给更多人哦 感谢大家的点赞收藏评论 感谢各位看官的支持&#xff01;&#xff01;&#xff01; 一&#xff1a;翻译环境和运行环境 在ANSIIC的任何一种实现中&#xff0c;存在两个不同的环境1&#xff0c;…...

【QT Quick】基础语法:基础类与控件

QML 的基础类和控件中&#xff0c;我们可以看到主要的几个分类&#xff1a;基础控件类、窗口类以及组件类。以下是对这些控件及其属性、继承关系等的详细讲解&#xff1a; 控件关系总结 QtObject 是所有 QML 对象的基类。它定义了基础属性&#xff0c;主要用于逻辑和数据封装…...

使用 SSH 连接 Docker 服务器:IntelliJ IDEA 高效配置与操作指南

使用 SSH 连接 Docker 服务器&#xff1a;IntelliJ IDEA 高效配置与操作指南 本文详细介绍了如何在 2375 端口未开放的情况下&#xff0c;通过 SSH 连接 Docker 服务器并在 Idea 中进行开发。通过修改用户权限、生成密钥对以及配置 SSH 访问&#xff0c;用户可以安全地远程操作…...

Gas费用是什么?

Gas费用是什么? 每5个Byte 需要1个GasGasLimit 用来限制合约最多执行多少次运算GasPrice 每次计算需要支付的费用在Web3的语境中,尤其是在以太坊(Ethereum)这样的区块链平台上,Gas费是一个核心概念。以下是关于Gas费的详细解释: 1. 定义 Gas是以太坊网络上的计算单位,…...

大语言模型(LLM)的子模块拆拆分进行联邦学习;大语言模型按照多头(Multi-Head)拆分进行联邦学习

目录 大语言模型(LLM)的子模块拆拆分进行联邦学习 方式概述 简单示例 大语言模型按照多头(Multi-Head)拆分进行联邦学习 场景设定 多头拆分与联邦学习 示例说明 大语言模型(LLM)的子模块拆拆分进行联邦学习 大语言模型(LLM)的子模块拆分进行联邦学习,主要涉及…...

Qt 概述

1. Qlabel HelloWorld 程序 使用纯代码实现 // widget.cpp Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);// 给当前这个lable对象&#xff0c;指定一个父对象QLabel* label new QLabel(this);// C语言风格的字符串可以直接…...

移动应用的界面配置-手机银行APP

设置登录界面为线性布局&#xff0c;组件垂直居中排列设置主页为滚动模式&#xff0c;包括布局、添加背景图片设置按钮样式&#xff0c;包括形状、边框线的宽度和颜色 设置登录界面 设置界面为线性布局&#xff0c;组件垂直居中排列 --android:gravity"center_vertical…...

微服务nginx解析部署使用全流程

目录 1、nginx介绍 1、简介 2、反向代理 3、负载均衡 2、安装nginx 1、下载nginx 2、解压nginx安装包 3、安装nginx​编辑 1、执行configure命令 2、执行make命令 4、启动nginx 1、查找nginx位置并启动 2、常用命令 3、反向代理 1、介绍反向代理配置 1、基础配置…...

华硕天选笔记本外接音箱没有声音

系列文章目录 文章目录 系列文章目录一.前言二.解决方法第一种方法第二种方法 一.前言 华硕天选笔记本外接音箱没有声音&#xff0c;在插上外接音箱时&#xff0c;系统会自动弹出下图窗口 二.解决方法 第一种方法 在我的电脑上选择 Headphone Speaker Out Headset 这三个选项…...

Unity中Socket_TCP异步连接,加入断线检测以及重连功能

1、服务端 using System; using System.Collections.Generic; using System.Text; #region 命名空间 using System.Net; using System.Net.Sockets; using System.Threading; using UnityEngine; #endregionnamespace AsynServerConsole {/// <summary>/// Tcp协议异步通…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...