在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的方法
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 WordPress 是互联网上最流行的 CMS(内容管理系统)。它允许您在 MySQL 后端和 PHP 处理的基础上轻松设置灵…...
显示器放大后,大漠识图识色坐标偏移解决方法
原因分析: 显示器分辨率较高,DPI设置放大125% or 150% or 200%,游戏打开时也会默认会根据显示器的放大比例自行放大,但是大漠综合管理工具抓图不会放大; 解决方法: 1、大漠综合管理…...

C++容器之list基本使用
目录 前言 一、list的介绍? 二、使用 1.list的构造 2.list iterator的使用 3.list capacity 🥇 empty 🥇size 4.list element access 🥇 front 🥇 back 5.list modifiers 🥇 push_front 🥇 po…...

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

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

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

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

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

在WPF中实现多语言切换的四种方式
在WPF中有多种方式可以实现多语言,这里提供几种常用的方式。 一、使用XML实现多语言切换 使用XML实现多语言的思路就是使用XML作为绑定的数据源。主要用到XmlDataProvider类. 使用XmlDataProvider.Source属性指定XML文件的路径或通过XmlDataProvider.Document指定…...
30min 的OpenCV learning Note
1.安装python和pycharm与环境搭配 打开Windows终端:(winR)(一般使用清华镜像网站安装库比较快) pip install opencv-contrib-python -i https://pypi.mirrors.ustc.edu.cn/simple 或者 python -m pip install open…...

C--编译和链接见解
欢迎各位看官!如果您觉得这篇文章对您有帮助的话 欢迎您分享给更多人哦 感谢大家的点赞收藏评论 感谢各位看官的支持!!! 一:翻译环境和运行环境 在ANSIIC的任何一种实现中,存在两个不同的环境1,…...
【QT Quick】基础语法:基础类与控件
QML 的基础类和控件中,我们可以看到主要的几个分类:基础控件类、窗口类以及组件类。以下是对这些控件及其属性、继承关系等的详细讲解: 控件关系总结 QtObject 是所有 QML 对象的基类。它定义了基础属性,主要用于逻辑和数据封装…...

使用 SSH 连接 Docker 服务器:IntelliJ IDEA 高效配置与操作指南
使用 SSH 连接 Docker 服务器:IntelliJ IDEA 高效配置与操作指南 本文详细介绍了如何在 2375 端口未开放的情况下,通过 SSH 连接 Docker 服务器并在 Idea 中进行开发。通过修改用户权限、生成密钥对以及配置 SSH 访问,用户可以安全地远程操作…...
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对象,指定一个父对象QLabel* label new QLabel(this);// C语言风格的字符串可以直接…...

移动应用的界面配置-手机银行APP
设置登录界面为线性布局,组件垂直居中排列设置主页为滚动模式,包括布局、添加背景图片设置按钮样式,包括形状、边框线的宽度和颜色 设置登录界面 设置界面为线性布局,组件垂直居中排列 --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、基础配置…...

华硕天选笔记本外接音箱没有声音
系列文章目录 文章目录 系列文章目录一.前言二.解决方法第一种方法第二种方法 一.前言 华硕天选笔记本外接音箱没有声音,在插上外接音箱时,系统会自动弹出下图窗口 二.解决方法 第一种方法 在我的电脑上选择 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协议异步通…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...