一、相关资料
- CentOS是免费的、开源的、可以重新分发的开源操作系统 ,CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一。CentOS Linux发行版是一个稳定的,可预测的,可管理的和可复现的平台,源于Red Hat Enterprise Linux(RHEL)依照开放源代码(大部分是GPL开源协议)规定释出的源码所编译而成。CentOS 8 主要改动和 RedHat Enterprise Linux 8 是一致的,基于 Fedora 28 和内核版本 4.18, 为用户提供一个稳定的、安全的、一致的基础,跨越混合云部署,支持传统和新兴的工作负载所需的工具。详细改动说明
- LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python。
- Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
- MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB。 MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自Michael Widenius的女儿Maria的名字。
- PHP(PHP: Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法学习了C语言,吸纳Java和Perl多个语言的特色发展出自己的特色语法,并根据它们的长项持续改进提升自己,例如java的面向对象编程,该语言当初创建的主要目标是让开发人员快速编写出优质的web网站。PHP同时支持面向对象和面向过程的开发,使用上非常灵活。
二、服务器准备
1.购买服务器
阿里云购入服务器一台,2核2G,选择centos8.2系统,尝试过8.4和阿里云的系统,均出现不同问题或者安装源不全的问题,故选择centos8.2,全程使用dnf来管理包,文末附购买链接,新用户券后88一年
2.配置安全组
加入规则
三、安装Nginx
1.更新服务器软件
dnf -y update
2.安装Nginx(本文过程采用稳定版)
稳定版:
dnf -y install nginx #稳定版本
最新版:
a. 创建yum源
vim /etc/yum.repos.d/nginx.repo #创建yum源
b.将下列内容加入刚才创建的文件中:
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/releasever/basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/releasever/basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
c.使用命令安装:
dnf clean all
dnf makecache
dnf -y install nginx
3. 防火墙开放端口
# http协议需要开启80端口,https协议需要开启443端口。本文只使用http协议
#格式:firewall-cmd --zone=public --add-port=[端口号]/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent # 开放80端口
firewall-cmd --reload # 刷新防火墙
使用云服务器,须在其管理界面上放行对应端口。以阿里云为例,需要在云服务器的控制台的网络与安全组配置中添加安全组的入方向的安全组配置,放行对应端口:
本文开始部分已做开放80端口访问,如需https还需开放443端口
4. 配置Nginx
使用vim打开主配置文件
vim /etc/nginx/nginx.conf
将“include /etc/nginx/conf.d/*.conf;”一行注释掉,换成我自己的配置文件,使其不适用默认的配置文件 ,如下:
#include /etc/nginx/conf.d/*.conf;
include /etc/nginx/conf.d/myNginx.conf;
创建新配置文件并编辑
cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/myNginx.conf
vim /etc/nginx/conf.d/myNginx.conf
本文cp时发现目录下并无default.conf,使用touch命令创建,并编辑
touch /etc/nginx/conf.d/myNginx.conf #创建主配置文件
vim /etc/nginx/conf.d/myNginx.conf #打开主配置文件
将以下配置内容黏贴进去
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php{
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
进行修改
第2行是网页端口(默认80),第9、19行后面是网页文件的位置,你可以修改为自己想放的位置。在这里,我使用默认的位置,不作修改。以下的修改很重要:
1. 将第30-36行(含36行)前面表示注释的“#”号去掉(除非您不想使用PHP)。
2. 将第34行的/scripts
改为$document_root
。
3. 将31行的root路径改成与第9行的root路径一致。
4. 在第10行前加入index.php(除非您不想使用PHP)
5. 在第10行下插入try_files uriuri/ /index.php?$args;
,以支持伪静态
6. (可选)第二行可以控制Nginx服务使用的端口。
7. (可选)将第9行修改为网页文件的位置(否则使用默认/usr/share/nginx/html)。注意,第31行也应随之更改。
8. 如果您有域名,将第3行改为网站的域名。
9. 将32行的“fastcgi_pass”后改为“unix:/run/php-fpm/www.sock;”
保存退出后,启动nginx
systemctl enable nginx # 将Nginx设置为开机自启
systemctl start nginx # 启动Nginx
systemctl status nginx # 查看Nginx状态
如果出现绿色的active(running),就说明Nginx安装完成,并成功运行。
如果出现红色的failed,可能是配置文件出了问题,需要仔细检查。
5.浏览器测试nginx服务是否正常运行
在浏览器中,输入服务器的IP地址(如果非默认80端口,需要在ip后面加上冒号再加端口号。例如你设置了1234端口,IP是123.123.123.123,你可以这么访问:123.123.123.123:1234),观察网页。如果看到了以下图片或类似测试页,说明Nginx配置完全成功。
四、安装PHP
1.推荐安装PHP7.3及以上版本的PHP并安装一些依赖的模块(本文安装过程使用PHP7.3版本)
sudo dnf install epel-release
sudo dnf update epel-release
dnf clean all
sudo dnf makecache
sudo dnf module enable php:7.3 # 使用PHP7.3版本,如使用更高版本,需安装remi源,使用下面两句
#rpm -Uvh https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-8.rpm # 安装remi源(若使用更高版本再执行)
#dnf module enable php:remi-7.4 #使用remi安装PHP7.4版本
(若使用更高版本再执行此)
dnf install php php-curl php-dom php-exif php-fileinfo php-fpm php-gd php-hash php-json php-mbstring php-mysqli php-openssl php-pcre php-xml php-zip libsodium # 必须安装组件
dnf install php-filter php-iconv php-simplexml php-xmlreader php-zlib php-pecl-imagick # 推荐安装的组件(使用7.3版本的可以删掉最后一个php-pecl-imagick,否则会报错)
2.启动PHP服务
systemctl enable php-fpm # 设为开机启动
systemctl start php-fpm # 启动
systemctl status php-fpm # 查看服务状态
3.测试PHP服务
sudo systemctl enable php-fpm # 设为开机启动
sudo systemctl start php-fpm # 启动
systemctl status php-fpm # 查看服务状态
4.本文安装时完成上述步,使用systemctl restart nginx重启nginx服务时却出现错误,使用systemctl status nginx,发现问题在/etc/nginx/default.d/php.conf文件(重启无问题可以跳过此步)
vim /etc/nginx/default.d/php.conf #编辑nginx的PHP配置文件
#发现有一行并未更改成功,将php.conf文件修改如下(核对不一致行)
index index.php index.html index.htm;
location ~ \.(php|phar)(/.*)?$ {
fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;
fastcgi_intercept_errors on;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/run/php-fpm/www.sock;
}
#保存退出后
systemctl restart nginx #重启nginx服务
成功重启服务
5.测试PHP服务
#cd [网页路径] 之前在myNginx.conf设置路径。若没修改,则使用默认路径/usr/share/nginx/html
cd /usr/share/nginx/html
touch test.php
vim test.php # 使用vim创建test.php测试文件
#输入
<?php
phpinfo();
?>
然后在浏览器中输入:[主机ip][:端口]/test.php(使用默认端口,可省略“:端口”的内容
123.123.123.123/test.php
或
123.123.123.123:[指定的nginx服务端口]/test.php
若出现类似下图的界面,说明安装成功。
6.删除测试文件
cd /usr/share/nginx/html
rm test.php
五、安装MariaDB
1. 安装MariaDB
CentOS 8默认采用MariaDB 10.3,可以通过下面的方法直接安装:
dnf install mariadb-server
systemctl enable mariadb
systemctl start mariadb
systemctl status mariadb
安装成功后,如果出现绿色的active(running),说明安装成功。
启动MariaDB的一个安全脚本:
sudo mysql_secure_installation
出现对话:
In order to log into MariaDB to secure it, we’ll need the current password for the root user. If you’ve just installed MariaDB, and you haven’t set the root password yet, the password will be blank, so you should just press enter here.
输入已有root密码,没设过密码敲回车即可。
Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation.
是否设置root密码?(Y,并输入密码)
Set root password? [Y/n]
By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment.
默认情况下,MariaDB安装有一个匿名用户,允许任何人登录MariaDB而不必为他们创建用户帐户。这仅用于测试,并使安装更顺利。在进入生产环境之前,应该先删除它们。
Remove anonymous users? [Y/n]
删除匿名用户?(根据需要选择,本文选Y)
Normally, root should only be allowed to connect from ‘localhost’. This ensures that someone cannot guess at the root password from the network.
通常,只允许root用户从“localhost”连接。这可以确保有人无法从网络猜出root密码。
Disallow root login remotely? [Y/n]
不允许远程root登录?(根据需要选择,本文选Y)
By default, MariaDB comes with a database named ‘test’ that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment.
默认情况下,MariaDB附带一个名为“test”的数据库,任何人都可以访问该数据库。这也仅用于测试,在进入生产环境之前应该删除。
Remove test database and access to it? [Y/n]
删除test数据库和对它的访问权限?(根据需要选择,本文选Y)
Reloading the privilege tables will ensure that all changes made so far will take effect immediately.
是否需要刷新权限表?( 本文选Y )
Reload privilege tables now? [Y/n]
至此,MariaDB已经搭建完成,如需安装WordPress,还要配置相关的用户和数据表。
2. WordPress相关用户与数据库配置
a.登录数据库
mysql -u root -p
b.创建Wordpress专用数据库用户,并创建对应数据库。注意,这个用户的账户和密码会以明文写在Wordpress配置文件中,因此不能使用root用户。
CREATE DATABASE [WordPress数据库名];
CREATE USER [访问WordPress用户名]@localhost IDENTIFIED BY '[WordPress数据库用户的密码]';
GRANT ALL PRIVILEGES ON [数据库名].* TO [访问WordPress用户名]@localhost IDENTIFIED BY '[WordPress数据库用户的密码]';
FLUSH PRIVILEGES; # 刷新数据库设置
EXIT; # 退出数据库
例如:
CREATE DATABASE wordpress; # 创建一个名为wordpress的数据库
CREATE USER wpUser@localhost IDENTIFIED BY '123456'; # 创建用户名为wpUser,密码为123456的用户
GRANT ALL PRIVILEGES ON wordpress.* TO wpUser@localhost IDENTIFIED BY '123456'; # 赋予wpUser访问wordpress数据库的权限
FLUSH PRIVILEGES; # 刷新数据库设置
EXIT;
六、安装wordpress
1. WordPress的下载与解压
进入Nginx配置的网页路径的上一级文件夹。例如我的网页是默认路径/usr/share/nginx/html
cd /usr/share/nginx/
2.将路径的最后一级文件夹删掉(为接下来使用WordPress替代)
rm -rf ./html
3.下载并解压WordPress,然后重命名为网页最后一级目录
wget https://cn.wordpress.org/latest-zh_CN.tar.gz #下载最新中文版安装包
tar -zxvf latest.tar.gz # 解压tar.gz包
mv wordpress html #解压出的wordpress文件夹更名为html
4.文件权限设置
cd /usr/share/nginx/
sudo chown -R nginx:nginx html
sudo chmod 0755 html
5.然后在浏览器中输入:[主机ip][:端口](使用默认端口,可省略“:端口的内容)。如能看到WordPress的安装界面,或者是选择语言的界面,说配置成功。
123.123.123.123:[端口]
接下来,输入数据库的配置信息。根据创建MariaDB时配置的WordPress用户名、密码、数据库填写。
以配置MariaDB时的配置为例如下填写:
然后单击提交->安装后,配置Wordpress管理员用户。
至此,全部内容搭建完成
本文所涉及到的资源以及参考资料链接
百度百科:https://baike.baidu.com/
CentOS8说明:https://blog.csdn.net/qq_37960324/article/details/103006947
Nginx: Linux packages http://nginx.org/en/linux_packages.html#RHEL-CentOS
WordPress 官方文档对PHP的要求 https://make.wordpress.org/hosting/handbook/handbook/server-environment/#php-extensions
快速建立LNMP环境:https://blog.51cto.com/u_11694088/2456888