1.安装操作系统与挂载数据盘
①安装操作系统
我喜欢使用纯净版的镜像,这里以CentOS7.6为例,直接选择安装官方镜像即可。
②挂载数据盘
在控制台挂载数据盘,使用fdisk -l命令可以看到你的数据盘,阿里云为/dev/xvdb(腾讯云主机为/dev/vdb,下同)
(1)格式化
格式化挂载数据硬盘分区,这里使用ext4文件系统
mkfs.ext4 /dev/vdb
(2)设为开机启动自动挂载
新建目录用于挂载分区,我这里是挂载到/blog目录下。
首先创建目录:
mkdir -p /blog
使用echo '/dev/vdb /yasin ext4 defaults 0 0'>> /etc/fstab命令写入新分区信息,然后使用cat /etc/fstab命令查看信息是否写入成功,这个命令是设置分区挂载及开机自动挂载。使用mount -a命令挂载新分区,用df -h查看是否挂载成功。
2.Apache的安装与配置
①安装
更新软件源
yum -y update
然后安装apache
yum -y install httpd
②设置开机启动
将httpd服务设为开机启动
systemctl enable httpd
查看开机启动的服务
systemctl list-unit-files|grep enabled
这时后再查看开机启动的服务已经有httpd了。
其实启用和禁用服务就是在当前“runlevel”的配置文件目录(/etc/systemd/system/multi-user.target.wants/
)里,建立/usr/lib/systemd/system
里面对应服务配置文件的软链接;禁用开机启动就是删除此软链接。
③开启服务
启动Apache
systemctl start httpd
查看服务状态为running即是正常启动
systemctl status httpd
在浏览器中打开主机IP地址,这时候就可以看到Apache的测试网页,证明apache安装成功。
3.编译安装PHP7.3
安装PHP7.3是最曲折的,一开始采用源安装,先是缺少libphp7.so
,与apache
无法交互。
然后搞定这个问题后运行wordpress又是提示Your PHP installation appears to be missing the MySQL extension which is required by WordPress
.,原因是没有mysqli模块,与mysql又无法交互。
研究半天后决定还是不要浪费时间,最终采用编译源码安装。
下面的安装来自多个网络上面的资料总结,进行了合并与修改,避免了很多坑。
文章采用顺序描述,如果需要查看遇到错误分析过程的话可以自行去网上搜索其他文章。
①安装编译工具
(1)安装gcc,gcc-c++,kernel-devel
yum -y install gcc gcc-c++ kernel-devel
(2)安装php需要的依赖库
yum -y install wget pcre pcre-devel openssl openssl-devel libicu-devel autoconf libjpeg libjpeg-devel \
libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel \
glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn libidn-devel openldap \
openldap-devel nss_ldap jemalloc-devel cmake boost-devel bison automake libevent libevent-devel \
gd gd-devel libtool* libmcrypt libmcrypt-devel mcrypt mhash libxslt libxslt-devel readline \
readline-devel gmp gmp-devel libcurl libcurl-devel openjpeg-devel
(3)安装 gdbm-devel
yum -y install gdbm-devel
②编译libzip
因为编译过程在需要使用到这个库,所以编译php前先进行libzip的编译。
但是编译libzip需要先使用到cmake,所以先对cmake进行更新。
(1)删除自带低版本cmake
yum -y remove cmake
(2)下载cmake源码
打开下载链接:https://cmake.org/download/
,我这里下载但是3.15.4版本。
或者直接使用下面的链接:
wget https://github.com/Kitware/CMake/releases/download/v3.15.4/cmake-3.15.4.tar.gz
(3)编译并安装cmake
tar -xvf cmake-3.15.4.tar.gz
cd cmake-3.15.4
./bootstrap && make -j4 && make install
(4)下载libzip源码
打开下载链接:https://libzip.org/download/
,下载的是1.5.2版本。
或者直接使用下面的链接:
wget https://libzip.org/download/libzip-1.5.2.tar.gz
(5)编译并安装libzip
tar -xvf libzip-1.5.2.tar.gz
cd libzip-1.5.2
mkdir build && cd build && cmake .. && make -j4 && make install
③复制和配置编译文件
(1)拷贝库文件
cp -frp /usr/lib64/libldap* /usr/lib/
(2)修改链接库查找
vim /etc/ld.so.conf
添加如下几行:
/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64
使之生效:
ldconfig -v
④安装httpd-devel
yum -y install httpd-devel
这一步非常重要,不安装这个,后面没有办法加--with-apxs2
参数的,这个参数用于生成libphp7.so
并安装至httpd,也就是apache的指定目录。
注意,这里的--with-apxs2是指apxs程序所在的路径,并不是生成*.so文件的存放路径。有的文章使用这个路径--with-apxs2=/usr/local/apache2/bin/apxs
,代表apache在编译时就让apache自带apxs程序。
⑤编译PHP7
(1)下载php源码
打开下载链接:https://www.php.net/downloads.php
,我这里下载的是7.3.10(高于7.3就可以)。
或者直接使用下面的链接:
wget https://www.php.net/distributions/php-7.3.10.tar.gz
(2)解压
tar -xvzf php-7.3.10.tar.gz
cd php-7.3.10
(3)预编译
./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/conf \
--with-fpm-user=apache \
--with-fpm-group=apache \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-iconv-dir \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir \
--with-ldap=shared \
--with-gdbm \
--with-pear \
--with-gettext \
--with-curl \
--with-xmlrpc \
--with-openssl \
--with-mhash \
--with-gd \
--with-apxs2=/usr/bin/apxs \
--enable-fpm \
--enable-mysqlnd \
--enable-mysqlnd-compression-support \
--enable-xml \
--enable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--enable-mbregex \
--enable-mbstring \
--enable-intl \
--enable-ftp \
--enable-gd-jis-conv \
--enable-pcntl \
--enable-sockets \
--enable-zip \
--enable-soap \
--enable-fileinfo \
--enable-opcache \
--enable-maintainer-zts \
具体的参数含义可以自行查找,主要注意的是prefix指定了你相应安装的目录,这个可以自行设定。
(4)编译和安装
make -j4 && make install
⑤添加环境变量
将php的路径添加至环境变量。
vim /etc/profile
添加以下内容到最后:
PATH=$PATH:/usr/local/php/bin
export PATH
刷新环境变量:
source /etc/profile
⑥编辑配置文件
mkdir -p /usr/local/php/conf/
cp php.ini-production /usr/local/php/conf/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
⑦设置开机启动和验证服务
cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/php-fpm.service
systemctl start php-fpm.service
systemctl enable php-fpm.service
服务是否成功启动:netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
有9000端口就是成功了。
⑧配置apapche让其支持php-fpm
(1)查看apache模块配置
检查/etc/httpd/conf.modules.d
目录下的00-proxy.conf
配置信息,要确保mod_proxy.so
和mod_proxy_fcgi.so
已被apache成功加载。
(2)修改apache配置
这一步非常重要,不正确配置的话apache还是无法启动PHP7
vim /etc/httpd/conf/httpd.conf
如果php-fpm使用的是TCP socket,那么在httpd.conf
末尾加上:
SetHandler "proxy:fcgi://127.0.0.1:9000"
如果用的是unix socket,那么httpd.conf末尾加上:
ProxySet disablereuse=off
SetHandler proxy:fcgi://php-fpm
⑨验证PHP版本
查看 PHP版本,验证一下是否安装成功:
php -v
PHP 7.3.10 (cli) (built: Oct 19 2019 14:53:20) ( ZTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.10, Copyright (c) 1998-2018 Zend Technologies
⑩验证PHP在apache上能否运行
因为云主机上准备不止搭建一个网站,所以需要配置根据域名的多网站,即输入不同的域名能访问不同的网站。
打开Apache的配置文件vim /etc/httpd/conf/httpd.conf
翻到最后可以看到IncludeOptional conf.d/*.conf
,
意思/etc/httpd/conf.d
目录下所有以.conf结尾的文件都可以用被导入最终的配置,这样可以使主配置文件更简洁,降低修改配置后异常不能恢复的风险。
这时候可以在/etc/httpd/conf.d
目录下新建一个virtualhost.conf
的文件,用于配置虚拟主机。
输入以下命令,指定域名和主目录:
ServerName www.shangyexin.com
DocumentRoot "/home/php"
DirectoryIndex index.html index.php
Options -Indexes +FollowSymlinks
AllowOverride All
Require all granted
我们去指定目录先创一个php版本测试文件:
cd /home/php
vim index.php
写入下面的内容:
重启httpd服务器:
systemctl restart httpd
这时候如果能够看到下面这样的PHP版本信息,则代表PHP安装完成且同apache配置完毕!
OK后记得删除virtualhost.conf配置文件,防止与后面的配置冲突
4.mysql数据库的安装与配置
CentOS7的yum源中默认好像是没有mysql的,所有我们采用从官方下载的方式进行安装。
为了节省时间,下面的步骤参考网络上的教程,根据最新情况进行了修改。
①卸载Mariadb
1)查看mariadb数据库:
rpm -qa | grep mariadb
2)卸载mariadb数据库:
rpm -e --nodeps mariadb文件名
3)删除etc目录下的myblog.cnf
文件:
rm /etc/myblog.cnf
如果提示没有该文件,忽略该提示,是因为步骤2中已经自动删除,此操作为了防止残留。
②下载5.7的mysql
打开5.7版本的下载链接,最新的版本为5.7.28,https://dev.mysql.com/downloads/mysql/5.7.html#downloads
,系统选择Red Hat Enterprise
版本即可,选择bundle捆绑包进行下载。
或者直接使用下面的命令:
wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
③解压
将下载的mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
包复制到指定目录,进入该目录后解压包。
tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar # 解压文件,解压出一系列rpm 文件
④安装rpm包
按照指定顺序安装rpm包,这几个文件是存在依赖关系的,所以在安装时有对应的优先级,需要按顺序安装:
rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.28-1.el7.x86_64.rpm
所以之前不下载总包,只下载下面这几个包应该也行。
我实际按照此步骤操作时,安装server会失败,提示:libnuma.so.1()(64bit) is needed by mysql-community-server-5.7.28-1.el7.x86_64。
这里需要安装numactl
yum -y install numactl
再执行rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
即可。
⑤启动mysql服务
安装成功后,开启 mysql 服务:
systemctl start mysqld
设置为开机启动:
systemctl enable mysqld
查看 3306 端口是否开启:
netstat -ln | grep 3306
⑥修改 myblog.cnf
配置文件
需要找到 myblog.cnf
文件。myblog.cnf
文件的默认路径为/etc/my.cnf
。
编辑myblog.cnf
:
vim /etc/my.cnf
插入以下代码:
validate_password=off
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci
注:validate_password=off
的意思是关闭密码验证插件(这一句必须加上,因为在修改密码的时候如果不加上会非常的麻烦)。
重启 mysql 服务:
systemctl restart mysqld
⑦ 重置密码
mysql5.7初始化后,会产生一个临时登录密码,前面在 my.cnf 文件中配置的日志路径是log-error=/var/log/mysqld.log
, 查看此路径下面的mysqld.log
日志, 可以找到临时密码。
示例行:A temporary password is generated for root@localhost: Xk.6:/1gYjfh
这里Xk.6:/1gYjfh
就是临时密码。
接下来登录重置密码:
mysql -u root -p
mysql> set password=password('新密码');
mysql> flush privileges;
mysql> exit;
这时候你可以使用mysql -u root -p
重新使用新密码登录,验证有无修改成功。
⑧添加远程访问权限
#登录mysql
mysql> use mysql
mysql> update user set host='%' where user='root';
mysql> select host,user from user;
mysql> flush privileges;
#退出mysql,重启mysql服务生效
5.WordPress的安装与配置
①下载最新安装包
打开官方网站下载:https://cn.wordpress.org/download/
或者使用下的链接:
wget https://cn.wordpress.org/latest-zh_CN.tar.gz
②解压
将下载的压缩包解压,解压后的文件夹路径比如为/home/wordpress
,最好同apache配置文件里已配置好的路径,这样不用修改。
这里顺便修改文件夹权限,防止后面http服务器没有权限创建和修改文件。
chown apache:apache /home/wordpress -R
③预置数据库表
使用root用户登录:
mysql -u root -p
为用户创建一个数据库(wordpress):
mysql> create database wordpress;
创建wordpress用户并授予上面创建的wordpress数据库所有权限:
mysql> grant all on wordpress.* to wordpress@localhost Identified by "19921111Yasin#$";
mysql> flush privileges;
grant 权限 on 数据库.* to 用户名@登录主机 identified by “密码”
④修改apache配置
增加wordpress配置文件:
vim /etc/httpd/conf.d/wordprss.conf
添加下面的配置:
ServerName www.shangyexin.com
DocumentRoot "/yasin/blog/wordpress"
DirectoryIndex index.html index.php
Options -Indexes +FollowSymlinks
AllowOverride All
Require all granted
重启apache服务器:
systemctl restart httpd
⑤打开网页配置wordpress
现在你应该能看到下面这样的界面:
接着开始配置数据库信息,填入上一步中填写的用户名和密码:
这里需要注意的是数据库主机需要填写为127.0.0.1,而不是localhost,不然无法登陆,会提示“ 建立数据库连接时出错”这个错误。
如果数据库配置正确的话你可以看到下面的这个界面:
点击现在安装,设定你的站点信息:
点击安装WordPress,会自动跳转到登陆界面,这时候可以先不登陆,直接输入域名查看你的主页,如果看到下面的页面:
好了,至此wordpress的主要流程就已经全部完成。
6.Nginx的安装与配置
从这部分开始,下面的流程属于我自己习惯的一些配置,可以选择你感兴趣的部分进行操作。
一开始说了,使用的是LANMP部署方案,怎么能少了Nginx呢。
LANMP的主要优点是实现动静态分离以及负载均衡。
①添加 yum 源
Nginx 不在默认的 yum 源中,可以使用 epel 或者官网的 yum 源,下面使用官网的 yum 源。
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
查看源没有没有添加成功:
yum repolist
②安装
yum -y install nginx
③修改Apache默认端口
因为都默认使用80端口,这里如果不修改的话,因为80端口被Apache占用,会启动失败。
vim /etc/httpd/conf/httpd.conf
将Listen 80
改为Listen 8080
,保存退出。
将wordpress文件夹Apache配置文件也同步修改。
vim /etc/httpd/conf.d/wordpress.conf
将Listen 80
改为Listen 8080
,保存退出。
重启Apache服务:
systemctl restart httpd
④设置开机启动并启动Nginx服务
systemctl enable nginx
systemctl start nginx
这时候打开网址IP应该能看到Welcome to nginx!欢迎页面,证明Nginx安装成功。
⑤设置反向代理
这时候外面还不能访问我们的wordpress页面,因为Nginx还没有把访问请求转发到Apache监听的端口。
添加wordpress配置文件:
vim /etc/nginx/conf.d/wordpress.conf
添加下面的内容:
server {
listen 80;
server_name www.shangyexin.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
}
}
添加完成后重启Nginx服务:
systemctl restart nginx
这时候再打开你wordpress的域名发现又可以访问了。
6.配置HTTPS与开启CDN加速
①配置HTTPS
(1)申请HTTPS证书
首先你要有HTTPS证书,可以使用Let's Encrypt
,或者去阿里云或者腾讯云申请免费一年的DV证书,这里以腾讯云为例。
具体的申请流程不再详细叙述,申请完成后我们下载证书文件,解压后进入Apache文件夹,可以看到下面三个文件:
ls
1_root_bundle.crt 2_www.shangyexin.com.crt 3_www.shangyexin.com.key
(2)安装ssl模块
yum -y install mod_ssl
(3)修改Apache配置文件
vim /etc/httpd/conf.d/wordpress.conf
添加下面的配置:
ServerName www.shangyexin.com
DocumentRoot "/yasin/blog/wordpress"
DirectoryIndex index.html index.php
SSLEngine on
SSLCertificateFile /yasin/ssl/www.shangyexin.com/2_www.shangyexin.com.crt
SSLCertificateKeyFile /yasin/ssl/www.shangyexin.com/3_www.shangyexin.com.key
SSLCertificateChainFile /yasin/ssl/www.shangyexin.com/1_root_bundle.crt
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
ServerName shangyexin.com
Redirect permanent / https://www.shangyexin.com/
(4)修改Nginx配置文件
因为使用的Nginx反向代理,所以Nginx配置文件需要同步修改,我们将所有http全部重定向成https链接。
vim /etc/nginx/conf.d/wordpress.conf
修改为下面的配置:
server {
server_name www.shangyexin.com shangyexin.com;
return 301 $scheme://www.shangyexin.com$request_uri;
}
(5)修改WordPress地址
在后台将你的WordPress地址修改为https链接:
(6)重启服务器
systemctl restart httpd
systemctl restart nginx
这时候如果一切配置正确的话你就可以使用https访问你的wordpress了。
②开启CDN加速
因为将博客迁移到腾讯云,而且腾讯云的CDN加速有免费额度,所以下面以腾讯为例。
(1)添加域名
点击产品-CND与加速-内容分发网络
。
进去后点击域名管理-添加域名,输入我们要加速的域名,比如www.druglover.cn。
源站设置,填写你的服务器IP地址,因为我们还是使用了HTTPS,所以记得加上端口号,比如111.229.47.96,配置完成后点击提交。
(2)部署证书
因为我们使用了HTTPS,所以CDN上面也需要有我们的证书文件。
点击左侧的证书管理,配置我们的证书,因为证书也是在腾讯上面申请的免费DV证书,所以可以直接选择腾讯云托管证书,回源方式记得选择跟随协议。
(3)域名解析添加CNAME解析
执行完上面的步骤,腾讯云端的配置就已经全部完毕,还差最后一步,就是添加CNAME解析,也就是我们访问www.shangyexin.com域名时,以前会自动解析到我们的服务器IP,现在需要将域名解析到我们配置的CDN上面。
将A记录修改为CNAME,记录值填写为腾讯云CDN为你分配的值:
8.安装phpMyAdmin
一般来说,安装phpMyAdmin时为了方便通过浏览器远程管理数据库。
①下载安装包
打开官网下地址:
http://www.phpmyadmin.net/downloads
或者wget命令下载:
wget https://files.phpmyadmin.net/phpMyAdmin/4.9.1/phpMyAdmin-4.9.1-all-languages.tar.gz
②解压
cd /home
tar -xvf phpMyAdmin-4.9.1-all-languages.tar.gz
# 重命名
mv phpMyAdmin-4.9.1-all-languages phpMyAdmin
③配置
cd phpMyAdmin
cp config.sample.inc.php config.inc.php
vim config.inc.php
将fg['Servers'][$i]['host'] = 'localhost';
改成fg['Servers'][$i]['host'] = '127.0.0.1';
这里如果不修改的话会报phpmyadmin mysqli_real_connect(): (HY000/2002): No such file or directory
错误。
④添加Nginx配置
我们使用8688端口来访问phpMyAdmin
,记得在云主机安全组中放通该端口。
添加phpMyAdmin配置文件:
vim /etc/nginx/cond.d/phpmyadmin.conf
加入下面的内容:
server {
listen 8688;
server_name localhost;
access_log /var/log/nginx/phpmyadmin-access.log main;
location / {
root /yasin/phpMyAdmin;
index index.php;
}
location ~ \.php$ {
root /yasin/phpMyAdmin;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
配置完成后使用重启Nginx:
systemctl restart nginx
这时候打开网页输入http://你设置的IP:8688,即可通过phpMyAdmin管理你的数据库!
⑤添加访问开关脚本
一般来说,直接将自己的数据库权限暴露在外网是很危险的,但有时候又需要通过网页来直接管理,毕竟这样毕竟方便。
所以可以写一个shell脚本,作为访问的开关,需要的时候打开配置,直接通过网页即可修改数据库,使用完成后再关闭开关,提高安全系数。
这是我写的一个简单的脚本phpmyadmin.sh,仅供参考。
#!/bin/bash
# author: yasin
function enable_phpmyadmin(){
mv /etc/nginx/conf.d/phpmyadmin.conf_bak /etc/nginx/conf.d/phpmyadmin.conf
systemctl restart nginx
echo "enable phpmyadmin success."
}
function disable_phpmyadmin(){
mv /etc/nginx/conf.d/phpmyadmin.conf /etc/nginx/conf.d/phpmyadmin.conf_bak
systemctl restart nginx
echo "disable phpmyadmin success."
}
case $1 in
enable)
enable_phpmyadmin;;
disable)
disable_phpmyadmin;;
*)
echo "Usage:`basename $0` {enable|disable}";;
esac
打开访问开关:./phpmyadmin.sh enable
关闭访问开关:./phpmyadmin.sh disable