在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协议异步通…...
VLC技术重构:模块化架构深度解析与跨平台媒体处理突破
VLC技术重构:模块化架构深度解析与跨平台媒体处理突破 【免费下载链接】vlc VLC media player - All pull requests are ignored, please use MRs on https://code.videolan.org/videolan/vlc 项目地址: https://gitcode.com/gh_mirrors/vl/vlc 技术洞察&…...
命令行与IM桥接工具:适配器模式实现统一消息通知
1. 项目概述与核心价值最近在折腾一个挺有意思的东西,一个叫tmwgsicp/im-cli-bridge的项目。光看这个名字,可能有点摸不着头脑,我来拆解一下。tmwgsicp大概率是作者的用户名或者组织名,im-cli-bridge才是核心。im是即时通讯&#…...
多云配置管理工具MCP:统一编排AWS、GCP等云资源的实战指南
1. 项目概述:一个高效的多云配置管理工具 最近在梳理团队的基础设施配置时,发现了一个挺有意思的开源项目,叫 malminhas/mcp 。乍一看这个名字,你可能会有点懵,这缩写代表什么?其实,MCP 在这里…...
保姆级教程:手把手教你用Wireshark诊断Ubuntu apt update的‘NOSPLIT’网络认证问题
深度解析Ubuntu apt update的NOSPLIT错误:从网络抓包到安全协议的全链路诊断 当你在Ubuntu终端中满怀期待地输入apt update,却看到一串刺眼的"NOSPLIT"错误时,那种挫败感每个Linux用户都深有体会。这个看似简单的网络错误背后&…...
Taotoken账单详情页功能体验,让每一分Token消耗都清晰可溯
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken账单详情页功能体验,让每一分Token消耗都清晰可溯 对于任何将大模型API集成到产品开发或日常工作中的团队与个…...
Shell脚本错误处理实战:用sh-guard提升Bash脚本健壮性
1. 项目概述:一个为Shell脚本穿上“防护服”的守护者在Linux运维、自动化部署乃至日常的系统管理工作中,Shell脚本是我们最得力的助手。从简单的日志清理到复杂的CI/CD流水线,Shell脚本无处不在。然而,脚本的健壮性却常常被忽视。…...
哔哩下载姬DownKyi:B站视频下载的终极免费解决方案
哔哩下载姬DownKyi:B站视频下载的终极免费解决方案 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等ÿ…...
AI编程助手集成飞书MCP:零依赖单文件实现工作流自动化
1. 项目概述:连接AI编程助手与飞书工作流 如果你和我一样,每天的工作流都离不开飞书(Lark)——写文档、拉群沟通、排会议日程、更新多维表格,然后在IDE和浏览器之间来回切换,那么你一定会对这个项目感兴趣…...
GPU资源利用率监测与优化实战指南
1. GPU资源利用率监测基础解析在超算中心和AI训练集群中,GPU资源利用率(GPU_UTIL)是衡量计算效率的核心指标。这个看似简单的百分比背后,实际上反映了GPU内部多个执行单元的综合活跃状态。通过NVIDIA的DCGM(Data Cente…...
电光非线性计算加速Transformer注意力机制
1. 电光非线性计算加速Transformer注意力机制的技术背景Transformer架构已经成为当前自然语言处理和计算机视觉领域的主导性神经网络结构,其核心组件——注意力机制依赖于Softmax等非线性运算。虽然这些非线性操作仅占模型总计算量的不到1%,但由于现代GP…...
