本文记录了使用VMware从零开始搭建WordPress的全过程, 以及过程中可能出现的问题,和相关解决方案。(2021.9.18)
本人小白,如果有什么说的不对的地方,欢迎大家指出!
可能遇到的问题以及解决方案用这种灰色引用块表示,如果没有遇到该问题,则跳过这部分继续按照正文流程操作即可。
这里假设你已经安装好了VMware,并安装了linux(我使用的是CentOS7)
安装完linux之后,有可能出现第一个问题:启动虚拟机时,电脑出现蓝屏报错SYSTEM_SERVICE_EXCEPTION
解决方法为:
1.【可能是驱动冲突,进入虚拟机的配置,删除打印机和声卡】如果不行尝试方法2
2.【如果是win10家庭版】下载该修复文件并解压,地址:https://share.weiyun.com/LVno2Zs2
解压后是Hyper-V.bat,右击,选择“以管理员身份运行”,然后会弹出命令提示符窗口,等待配置成功后按提示输入“Y”,然后会自动重启
重启后,打开“启用或关闭Windows功能”,取消勾选"Hyper-V"点击确定,点立即重启。
重启后移除原来虚拟机,重新创建虚拟机,运行正常
【如果是win10专业版】,不用下载修复文件,直接打开“启用或关闭Windows功能”,取消勾选"Hyper-V"点击确定,点立即重启。
重启后移除原来虚拟机,重新创建虚拟机,运行正常
3.如果以上方法都不行,【直接卸载当前版本的VMware,重新安装VMware16及以上版本】有概率解决该问题,但比较麻烦,需要重新破解、重新创建虚拟机等,有点麻烦,可以试试
搭建WordPress博客首先需要搭建LAMP环境
(LAMP 就是Linux、apache、mysql、php,现在我们已经有了linux,所以接下来安装剩下的三个)
yum install wget -y
每当出现 Complete!时,表示下载成功,以下同理。
apache软件的软件包名称叫做httpd
yum -y install httpd
启动apache服务
systemctl start httpd
关闭防火墙(后文《六、一些小补充》有解释)
systemctl stop firewalld
关闭SElinux
setenforce 0
setenforce 0其实是暂时关闭SElinux,这里再介绍一个可以永久关闭SElinux的方法:输入
vim /etc/selinux/config
(如提示bash vim: command not found,是因为没有安装vim,请将文章向下滑,参考《6、安装mysql-server》中给出的解决方案)
进入SElinux的配置文件,找到SELINUX=enforcing
,将其修改为SELINUX=disabled
修改完成后,需要重启即可生效
要安装PHP 7,首先需要安装并启用EPEL和Remi存储库。
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
然后安装yum-utils,它可以扩展yum的默认功能,用于管理(启用或禁用)yum存储库以及程序包。
yum install yum-utils
yum-utils提供的程序之一是yum-config-manager,可以使用它来启用Remi存储库作为默认存储库,以安装不同的PHP版本。
输入以下指令以启用php7.4版本
yum-config-manager --enable remi-php74
然后使用以下命令安装php7.4和所有必需的模块
yum install php php-cli php-common php-gd php-json php-ldap php-mbstring php-mysqlnd php-pdo php-xml
安装完毕后,输入php -v
来查看当前的php版本,如下图所示,则安装成功
yum -y install php-fpm
yum -y install mysql
顺便提一句,如果看到以下内容:
Installed:
mariadb.x86_64 1:5.5.50-1.el7_2
Dependency Updated:
mariadb-libs.x86_64 1:5.5.50-1.el7_2
Complete!
你可能会纳闷我下载的是mysql呀,为什么install的文件名是mariadb呢
不要慌,你可以理解为,在CentOS7.2版本中,mysql更名为mariadb,所以你安装的依然是mysql
yum -y install mysql-server
执行后,他会返回一个错误,Error: Nothing to do
这是因为CentOS 7 版本中 MySQL数据库已从默认的程序列表中移除了,用mariadb代替了,centos7默认将mariadb视作mysql。此时我们有两种解决办法
方法一:去官网下载mysql-server(推荐)
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
如果这一步出现 unable to resolve host address
wget:无法解析主机地址。说明是DNS解析的问题。
使用root账户登录linux,输入:
sudo vim /etc/resolv.conf
如果输入后成功进入/etc/resolv.conf,则无视以下内容
————————————————————————————
如果输入后出现 bash vim: command not found,说明你没有安装vim,执行以下命令:
rpm -qa|grep vim
查看是否安装完整vim,如果已经正确安装的话,会显示如下三行结果:
vim-enhanced-7.0.109-7.el5
vim-minimal-7.0.109-7.el5
vim-common-7.0.109-7.el5
如果显示的不是这三行,输入
yum -y install vim*
然后等待安装完毕,再次输入
rpm -qa|grep vim
检查内容是否包括以上正确安装的三行结果,如正确,说明安装成功,现在可以使用vim命令了
————————————————————————————
接上条,使用vim命令进入/etc/resolv.conf后,把resolv.conf中的内容修改为以下两行:
nameserver 8.8.8.8
nameserver 8.8.4.4
然后再次输入上面那条下载mysql-server的命令
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
应该就可以成功开始下载了
当提示 Is this ok [y/d/N]: 时,输入y继续,一共会提示两次,下次再继续输入y,最后出现Complete!,下载成功
方法二:直接安装mariadb
yum install -y mariadb
yum -y install php-mysql
到这里,第一部分完成了。
yum -y install httpd-manual mod_ssl mod_perl mod_auth_mysql
yum -y install php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc php-devel
yum -y install mysql-connector-odbc mysql-devel libdbi-dbd-mysql
到这里,LAMP基本的环境都已经安装好了,只需要配置就可以运行了
这一步是为了让apache在虚拟机开机时自动启动,相关指令如下:
启动apache
systemctl start httpd.service
停止apache
systemctl stop httpd.service
重启apache
systemctl restart httpd.service
设置apache开机自启
systemctl enable httpd.service
重启各项服务
service mysqld restart
service php-fpm start
service httpd restart
设置mysql的root账户的密码。目前的版本安装的MySQL会为root账户自动生成一个临时密码,以下操作可以跳过临时密码直接修改密码
1.用root权限进入MySQL配置文件:
vim /etc/my.cnf
2.在文件中找个空行,添加一行:
skip-grant-tables
3.保存并退出,重启MySQL。
service mysqld restart
输入以下指令,此时我们就可以免密登陆MySQL:
mysql -uroot
4.进入mysql后,执行以下命令(mysql的提示符是:mysql> 注意mysql的命令后要加;分号)
首先输入以下,进入系统数据库
mysql>use mysql;
然后修改密码,注意密码必须包含大小写字母、数字和特殊字符,而且长度不能小于8位,否则mysql5.7 密码安全检查插件(validate_password)会提示 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 错误。(我们现在用的是mysql5.6版本)
mysql>update mysql.user set authentication_string='这个引号里写新修改的密码,注意看上方要求' where user='root' and host='localhost';
mysql>flush privileges;
mysql>exit;
执行完毕之后再次进入mysql配置文件中,
vim /etc/my.cnf
将原本添加的skip-grant-tables这一行删除
然后重启mysql
service mysqld restart
此时就可以用新的密码登录数据库了,输入
mysql -uroot -p
提示输入密码,输入刚刚修改的密码即可(输入密码的时候不会显示,正常输入就行,然后回车)
如果还是无法登录的,检查一下你的密码是否输入正确,是否包含了大小写和特殊字符
出现下图就表示成功了,可以用修改密码后的root账户登陆数据库了
然后最重要的一步:删除mysql中的匿名用户(为了保证安全性,谁都可以登录你的mysql是一件非常危险的事情,而且也为了防止匿名用户影响其他用户登录)
输入以下指令查询匿名用户:
mysql> select host,user,password from user;
会出现一个表,可以看到表中user这一列有的行是空的,这就是匿名用户
删除匿名用户
mysql> delete from user where user='';
再次输入:
mysql> select host,user from user;
查询刚刚执行的结果
mysql> flush privileges;
mysql部分完成,退出mysql
mysql> exit;
扩展知识:上文介绍了连接到本地的mysql,那么如何连接到远程主机上的mysql呢?
假设远程主机的IP为:192.0.0.1,用户名为root,密码为123。则键入以下命令:
mysql -h192.0.0.1 -uroot -p123
(注:u和root之间可以不用加空格,其它也一样)
在浏览器地址栏输入你的服务器的ip地址
如果出现下图,说明apache测试成功
部分人到了这一步可能会发现,在地址栏中输入服务器的ip可以正常访问,但是输入localhost或者127.0.0.1却不能访问,(比如我就遇到了这个问题)会怀疑自己是不是哪一步做错了?
以下思路指导感谢 @Cdr_Bowen
其实并没有做错,询问了百度大佬之后得知,“localhost” 和 “127.0.0.1” 指向的都是本机地址,固定指向的是你自己的电脑,而不是你的服务器,你的虚拟机(服务器)和你自己的电脑实际上是两个环境。
我们之前用phpstudy、xampp等软件搭建的环境是以本机作为服务器来用的,所以在本机浏览器输入localhost可以直接访问。而且别人在访问你的网站的时候都是通过ip地址访问的,所以这个“在本机通过localhost不能访问虚拟机里的服务器”问题不大。
大佬的这一句话点醒了我,我直接使用curl指令
curl
可以用来获取页面内容,执行后,会将链接的html内容显示在屏幕上。
当我们不加任何选项使用 curl 时,默认会发送 GET 请求来获取链接内容到标准输出。由于安装linux的时候很多时候是没有安装桌面的,也意味着没有浏览器,因此这个方法也经常用于测试一台服务器是否可以到达一个网站。
curl localhost
出现了以下的结果,和使用ip地址访问出现的页面是一样的,说明我们的服务器是通的,没有任何问题
划重点!!在这里要先配置一下apache,让apache中增加一些对php5支持的模块,才能让apache解析php,不然看到的会是php源码!
进入apache的配置文件httpd.conf
vim /etc/httpd/conf/httpd.conf
LoadModule php7_module modules/libphp7.so
继续找到图中位置,在index.html
后加上 index.php
,然后在下方另起一行,加入以下代码,使得Apache可以解析php文件
<IfModule mod_php7.c>
AddType application/x-httpd-php .php
</IfModule>
最后 重启Apache
service httpd restart
然后我们需要新建一个PHP界面进行测试
在apache的web根目录(默认页面路径) /var/www/html 下新建就可以了
首先进入这个目录
cd /var/www/html
然后新建php文件
touch phpinfotest.php
修改这个文件的内容
vi phpinfotest.php
将内容修改为以下
echo "test ";
phpinfo()
?>
在浏览器地址栏中输入:服务器的ip地址/phpinfotest.php,看到如下结果:
恭喜你成功啦!!
现在服务器已经搭建好并且可以正常工作了,接下来开始搭建WordPress!
在前文安装apache的过程中,没有关闭防火墙之前,我们用服务器搭建的网站是无法访问的,这是因为默认访问网站的端口就是80,我们没有配置防火墙,防火墙上没有放通80端口,所以网站无法访问。后来我们关闭了防火墙,网站就可以访问了。
实际上关闭防火墙就相当于放通了所有端口,很明显这是一种简单粗暴的操作,目前我们为了学习方便可以暂时这样做,但以后在工作中是肯定不能这么做的,因为放通所有端口会大大降低服务器的安全性。
正确的做法是配置防火墙,配置防火墙可以使HTTP流量、HTTPS流量能够顺利通过防火墙,并阻挡其他可疑流量。我们可以只放通一些需要用到的端口,比如网站访问的80、mysql的3306、phpmyadmin的888、用于ftp文件传输的21,ssh的23等等……
操作如下,首先输入以下指令,查看目前防火墙的状态
firewall-cmd --state
开启防火墙
systemctl start firewalld
开放相关端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=8080-8085/tcp
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-port=21/tcp
firewall-cmd --permanent --add-port=888/tcp
firewall-cmd --permanent --add-port=443/tcp
#…………根据自己的需要去添加
查看防火墙的开放的端口
firewall-cmd --permanent --list-ports
修改配置后要重启防火墙
firewall-cmd --reload
使用root账户登录mysql
mysql -u root -p
输入密码之后成功登入,接下来输入以下指令,创建wordpress数据库
CREATE DATABASE wordpressdb;
然后创建wordpress数据库账户和设置密码
CREATE USER 你的用户名@localhost IDENTIFIED BY '密码';
例如CREATE USER wordpress@localhost IDENTIFIED BY '123456';
表示用户名是wordpress,密码是123456
到这里千万不要乱了,比如我刚刚示例的语句表示,现在wordpress的数据库账户名是wordpress,密码是123456,它所管理的数据库名是wordpressdb
然后再输入这条指令,为你刚刚创建的wordpress账户授予权限,让它可以对wordpress数据库进行操作
GRANT ALL PRIVILEGES ON 你刚刚创建的数据库名.* TO 你刚刚创建的用户名@localhost;
例如:GRANT ALL PRIVILEGES ON wordpressdb.* TO wordpress@localhost;
之后刷新数据库缓存
FLUSH PRIVILEGES;
现在输入查询一下用户表,可以看到已经有wordpress了,表示我们成功了
退出数据库
exit;
1.使用wget下载最新wordpress
wget http://wordpress.org/latest.zip
2.下载解压工具zip、unzip
yum install zip unzip
3.解压文件,并且将其复制到/var/www/html目录下
unzip -q latest.zip
4.复制 wordpress文件夹下所有文件到html目录下(html目录是apache的网站默认目录)
cp -rf wordpress/* /var/www/html/
cp命令:常用于复制一个源文件到目标文件(夹)。
-r:表示复制该目录下所有的子目录和文件(复制文件夹一定要加-r)。
5.修改文件夹权限,赋予apache对相关文件夹的权限
chown -R apache:apache /var/www/html/
chmod -R 755 /var/www/html/
mkdir -p /var/www/html/wp-content/uploads
chown -R :apache /var/www/html/wp-content/uploads
6.修改wordpress配置文件
cd /var/www/html
cp wp-config-sample.php wp-config.php
vim wp-config.php
找到define(‘DB_NAME’, ‘database_name_here’);
将 database_name_here 修改为你创建的wordpress数据库名
找到define(‘DB_USER’, ‘username_here’);
将 username_here 修改为你创建的数据库用户名
找到define(‘DB_PASSWORD’, ‘password_here’);
将 password_here 修改你创建数据库用户的密码
输入:wq
保存
重启相关服务
systemctl restart httpd.service
systemctl restart mysqld.service
7.进入Web页面设置
访问http://你的服务器ip地址/wp-admin