如何在 Ubuntu 18.04 上使用 LEMP 安装 WordPress
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
简介
WordPress 是互联网上最流行的 CMS(内容管理系统)。它允许您在 MySQL 后端和 PHP 处理的基础上轻松设置灵活的博客和网站。WordPress 受到了广泛的采用,是快速搭建网站的绝佳选择。设置完成后,几乎所有管理工作都可以通过 Web 前端完成。
在本指南中,我们将专注于在 Ubuntu 18.04 服务器上使用 LEMP 栈(Linux、Nginx、MySQL 和 PHP)设置 WordPress 实例。
先决条件
要完成本教程,您需要访问 Ubuntu 18.04 服务器。
在开始本指南之前,您需要执行以下任务:
- 在服务器上创建一个
sudo用户:我们将使用具有sudo权限的非根用户完成本指南中的步骤。您可以按照我们的 Ubuntu 18.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 配置为使用 auth_socket 认证插件(默认情况下),您可以使用 sudo 登录到 MySQL 管理帐户:
sudo mysql
如果您更改了 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;
MySQL 会话将退出,将您返回到常规的 Linux shell。
步骤 2 —— 安装额外的 PHP 扩展
在设置我们的 LEMP 栈时,我们只需要一个非常基本的扩展集合,以便让 PHP 与 MySQL 通信。WordPress 和许多插件利用额外的 PHP 扩展。
我们可以通过输入以下命令下载并安装一些最受欢迎的用于 WordPress 的 PHP 扩展:
sudo apt update
sudo apt install php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip
安装扩展完成后,重新启动 PHP-FPM 进程,以便正在运行的 PHP 处理器可以利用新安装的功能:
sudo systemctl restart php7.2-fpm
现在,服务器上已安装了所有必需的 PHP 扩展。
第三步 — 配置 Nginx
接下来,我们将对 Nginx 服务器块文件进行一些微小的调整。根据先决条件教程,你应该已经在 /etc/nginx/sites-available/ 目录中为你的站点配置了一个配置文件,以响应服务器的域名或 IP 地址,并受到 TLS/SSL 证书的保护。我们将以 /etc/apache2/sites-available/wordpress 为例,但你应该根据需要替换你的配置文件路径。
此外,我们将使用 /var/www/wordpress 作为我们的 WordPress 安装的根目录。你应该使用你自己配置中指定的网站根目录。
使用 sudo 权限打开你的站点服务器块文件开始:
sudo nano /etc/nginx/sites-available/wordpress
在主 server 块内,我们需要添加一些 location 块。
首先创建精确匹配的位置块,用于处理 /favicon.ico 和 /robots.txt 的请求,这两者我们都不希望记录请求。
我们将使用正则表达式位置来匹配任何静态文件的请求。我们将再次关闭这些请求的日志记录,并将它们标记为高度可缓存,因为这些通常是昂贵的资源。你可以调整这些静态文件列表,以包含你的站点可能使用的任何其他文件扩展名:
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 列表,以便将控制权传递给带有请求参数的 index.php 文件,而不是将 404 错误作为默认选项返回。
这应该看起来像这样:
server {. . .location / {#try_files $uri $uri/ =404;try_files $uri $uri/ /index.php$is_args$args;}. . .
}
完成后,保存并关闭文件。
现在,我们可以通过输入以下命令来检查我们的配置是否存在语法错误:
sudo nginx -t
如果没有报告错误,则通过输入以下命令重新加载 Nginx:
sudo systemctl reload nginx
接下来,我们将下载并设置 WordPress 本身。
第四步 — 下载 WordPress
现在我们的服务器软件已配置好,我们可以下载并设置 WordPress。出于安全原因,特别建议从他们的网站获取最新版本的 WordPress。
切换到可写目录,然后输入以下命令下载压缩版本:
cd /tmp
curl -LO 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
现在,我们可以将整个目录的内容复制到我们的文档根目录。我们使用 -a 标志来确保我们的权限得到保留。我们在源目录的末尾使用一个点来指示应该复制目录中的所有内容,包括任何隐藏文件:
sudo cp -a /tmp/wordpress/. /var/www/wordpress
现在我们的文件已经就位,我们将把它们分配给 www-data 用户和组。这是 Nginx 运行的用户和组,Nginx 需要能够读取和写入 WordPress 文件,以便提供网站并执行自动更新。
sudo chown -R www-data:www-data /var/www/wordpress
我们的文件现在位于服务器的文档根目录,并具有正确的所有权,但我们仍然需要完成一些其他配置。
第五步 — 设置 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@4F');
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 配置文件:
sudo nano /var/www/wordpress/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,请稍微探索一下界面,以熟悉您的新 CMS。
相关文章:
如何在 Ubuntu 18.04 上使用 LEMP 安装 WordPress
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 WordPress 是互联网上最流行的 CMS(内容管理系统)。它允许您在 MySQL 后端和 PHP 处理的基础上轻松设置灵…...
shadcn-vue 快速入门(2)
components.json 关于项目配置 components.json 文件保存了项目的配置信息。 我们使用该文件了解项目的基本设定,并生成定制化的组件以适应项目需求。 注意:components.json 文件是可选的,仅在使用 CLI 向项目添加组件时才需要。如果使用复…...
Oracle数据恢复—异常断电导致Oracle数据库报错的数据恢复案例
Oracle数据库故障: 机房异常断电后,Oracle数据库启库报错:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。数据库没有备份,归档日志不连续。用户方提供了Oracle数据库的在线文件,需要恢复zxf…...
数据结构-4.1.特殊矩阵的压缩存储
一.一维数组的存储结构: 1.知道一维数组的起始地址,就可以求出任意下标对应的元素所在的地址; 2.注:如果数组下标从1开始,上述公式的i就要改为i-1; 3.数组里的元素类型相同,因此所占空间也相同…...
Hive数仓操作(十四)
一、Hive的DDL语句 在 Hive 中,DDL(数据定义语言)语句用于数据库和表的创建、修改、删除等操作。以下是一些重要的 DDL 语句: 1. 创建数据库和表 创建数据库 CREATE DATABASE IF NOT EXISTS database_name;创建表 CREATE TABLE …...
SpringBoot技术:实现古典舞在线交流平台的秘诀
摘 要 随着互联网技术的发展,各类网站应运而生,网站具有新颖、展现全面的特点。因此,为了满足用户古典舞在线交流的需求,特开发了本古典舞在线交流平台。 本古典舞在线交流平台应用Java技术,MYSQL数据库存储数据&#…...
自动驾驶系列—全面解析自动驾驶线控制动技术:智能驾驶的关键执行器
🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…...
YOLO11改进|卷积篇|引入可变核卷积AKConv
目录 一、AKConv卷积1.1AKConv卷积介绍1.2AKConv核心代码 五、添加MLCA注意力机制5.1STEP15.2STEP25.3STEP35.4STEP4 六、yaml文件与运行6.1yaml文件6.2运行成功截图 一、AKConv卷积 1.1AKConv卷积介绍 AKConv允许卷积参数的数量以线性方式增加或减少,而不是传统的…...
推荐 uniapp 相对好用的海报生成插件
插件地址:自定义canvas样式海报 - DCloud 插件市场 兼容性也是不错的:...
MySQL表操作(进阶)
一、数据库约束 1、约束类型 NOT NULL - 指示某列不能存储 NULL 值 UNIQUE - 保证某列的每行必须有唯一的值 DEFAULT - 规定没有给列赋值时的默认值 PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标 识ÿ…...
【设计模式】软件设计原则——接口隔离迪米特
接口隔离原则引出 接口隔离原则 定义:用多个专门的接口,不使用单一的总接口,客户端不应该依赖它不需要的接口; 一个类对另一个类的依赖,应该建立在最小接口上;如果有一个大接口,里面有很多方法,如果使用一个类实现该接口,所有的类都要实现,导致代码冗余;…...
【C++】——list的介绍和模拟实现
P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 博主主页:Yan. yan. …...
B树系列解析
我最近开了几个专栏,诚信互三! > |||《算法专栏》::刷题教程来自网站《代码随想录》。||| > |||《C专栏》::记录我学习C的经历,看完你一定会有收获。||| > |||《Linux专栏》࿱…...
docker 部署 WEB IDE
简介 问题描述:GitCode 的 Web IDE 不满足个人使用需求 如何解决:在本机或云服务器部署 Web IDE 如何解决 拉取容器镜像 docker pull coder/code-server 运行 docker run -d --name vscode -p 8080:8080 -p 8443:8443 -e PASSWORD"123456&quo…...
【Android】数据存储
本章介绍Android五种主要存储方式的用法,包括共享参数SharedPreferences、数据库SQLite、SD卡文件、App的全局内存,另外介绍重要组件之一的应用Application的基本概念与常见用法,以及四大组件之一的内容提供器ContentProvider的基本概念与常见…...
个人网络安全的几个重点与防御
1 浏览器 firefox 这是第一选择 如果你真的不明白可以找找各个浏览器漏洞 mail 的危险的 来自与代理和漏洞 浏览器溢出漏洞 实时注意更新就可以 2 防火墙 大家都用windows 只需在 gpedit.msc 设置 但有什么未知漏洞就不得而知了 因为美国的计划问题 网络端口溢出漏洞 但…...
python爬虫 - 初识爬虫
🌈个人主页:https://blog.csdn.net/2401_86688088?typeblog 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、爬虫的关键概念 (一)HTTP请求与响应 ࿰…...
tomcat版本升级导致的umask问题
文章目录 1、问题背景2、问题分析3、深入研究4、umask4.1、umask的工作原理4.2、umask的计算方式4.3、示例4.4、如何设置umask4.5、注意事项 1、问题背景 我们的java服务是打成war包放在tomcat容器里运行的,有一天我像往常一样去查看服务的日志文件,却提…...
Golang | Leetcode Golang题解之第455题分发饼干
题目: 题解: func findContentChildren(g []int, s []int) (ans int) {sort.Ints(g)sort.Ints(s)m, n : len(g), len(s)for i, j : 0, 0; i < m && j < n; i {for j < n && g[i] > s[j] {j}if j < n {ansj}}return }...
vscode+stfp插件,实现远程自动同步文件代码
概述 远程同步代码,将本地代码实时保存到同一局域网内的另一台电脑(linux系统),这里的本地代码也可以是远程服务上的代码,即从一个远程ip同步到另一台远程ip服务器。 工具 vscode,SFTP插件 安装 vscod…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
