利用VPS+LNMP1.5+WordPress搭建个人网站

利用VPS+LNMP1.5+WordPress搭建个人网站

一、摘要

本文写于2018年1月20日,使用的搭建环境与软件是CentOS 6 + LNMP1.5beta + WordpPress4.9.2,根据本文步骤操作,你可以架设出自己的个人网站。本文主要内容如下:

  • 购买到一个VPS服务器、一个域名,并建立域名解析;
  • 安装LNMP一键安装包,完成其中Nginx、Mysql、PHP的配置;
  • 部署WordPress到VPS上,实现基本的个人网站功能;
  • 实现WordPress主题、插件一键安装功能;
  • 通过重定向强制使用SSL传输,全站启用https
  • 推荐了几个常用的插件

(2019.5.6更新备注: WordPress安装的部分,将全站的http重定向后会导致网络证书无法通过http进行验证,进而导致证书过期。解决方法是,网站证书过期以后,将重定向取消掉,重启Nginx。然后手动通过acme.sh进行证书更新,然后回复重定向,重启Nginx使设置生效)

二、VPS和域名的购买与配置

1、VPS的购买与配置

虚拟专用服务器(Virtual Private Server),是将一台服务器分成多个虚拟专属服务器。实现VPS的技术分为容器技术和虚拟机技术 。在容器或虚拟机中,每个VPS都可分配独立公网IP地址、独立的操作系统。

目前,国内热度较高的VPS服务商有:linode、vultr、bandwagon(搬瓦工)等,按价格降序排列。由于linode较贵,因此从后二者中选择,选择时主要考虑两个因素:延时(ping)、丢包率和稳定性。

Vultr每月需要$2.5,拥有日本机房,延迟较低,但是随着vultr用户增加,其延迟和丢包率开始日趋上升;而老牌服务商搬瓦工只有美西机房,但是可选CN2线路,对于电信有良好的加成作用,分为$19.99包年的套餐(不用CN2线路有550G流量,使用CN2则*0.33=182G)和$29.99包年的套餐(只有CN2线路500G),内存512MB,单核CPU,1Gbit/s的带宽。对于一般用户,使用19.99的套餐即可。

由于家里使用的是电信,因此我选择了搬瓦工19.99套餐,19.99购买地址29.99购买地址

若缺货(19.99容易脱销)或者网站被墙,请依照关键词搜索最新的消息。下面以19.99为例简单说一下。

首先我们可以看到年费为$19.99,下面是机房选择,建议选择洛杉矶的机房,DC2_QNET或者DC4_MCOM均可。DC2因为号称亚洲IP优化,所以用户量较大;DC4则因为用户量较小,网络条件也不见得差。因为该套餐可以自由更换机房,所以用着不合适再换也没关系。

接着点击Add to Cart进入清单界面,这里可以输入优惠码,我在网上搜了一个6%减免的BWH1ZBPVK,可以看到,输入后更新了价格,此时点击Check out进入下一步。

接下来会创建你的搬瓦工账号,注意,姓名和地址可以虚假,但是联系方式需要填写真实的以进行VPS管理,国家一定要填对,否则IP对不上可能会被后台判定为诈骗订单!所以,这一步要用真实IP进行!

(有人想,能不能提前注册,答案是不能。因为,直接注册需要验证码,但是验证码被墙了加载不出来。先选购再注册则不需要验证码。)

通过支付宝完成支付后就可以进行管理了,在Service->Client里面,点击KiviVM Control Panel,进入控制面板。

在控制面板里,Install new OS安装新系统,这里我们选择CentOS-6-x86-64-bbr,其中的bbr是谷歌提出的一种拥塞控制方法,能够优化网络,感兴趣的同学可以查相关文献;Migrate to another datacenter则是更换机房,以后有需要可以在这里换。

至此,VPS已经开始运行了,你可以通过IP地址+SSH协议(Sercure Shell)在控制台操作VPS了。这里本来想推荐以前物理实验室用的SSH Secure Shell的,结果发现这个是古董了,现在改成了新产品Putty,我们安装Windows (64-bit)的。

官方下载地址

原始账号是root,密码在你的邮箱,端口和IP在邮箱和控制面板都有。

2、域名注册与DNS解析

现在我们需要一个域名,这样就可以通过域名而不是ip链接到自己的主机了。服务商可以选择godaddy, namecheap, namesilo等。这里推荐namesilo,它具有免费的隐私保护服务,注册域名后,广播到网上的域名所有者信息会被它的信息替代。现在在做活动,注册domain.com的价格是第一年$5.99,续费是$8.99,市面最低。这里以zhouyongyi为例进行域名购买。

(为什么不选择国内的域名注册服务商?因为国内的服务商需要备案,手续流程非常麻烦,你懂的。如果需要,可以搜索关键词:阿里云万网、腾讯云域名注册、百度云域名注册)

我们搜索zhouyongyi,可以看它的.com后缀被注册了,其他后缀未被注册,这里我选择了.net后缀然后进入下一步的清单界面。

接下来我们选择不自动续费,使用WHOIS隐私保护,然后还有意愿注册年份。注意,这个是“意愿”,不是实际计费的年份,据说高一些可以增加搜索权重。因为首年是优惠的,订单只能支付首年价格,续费注册成功后进行。填写优惠码 goodprice 可以优惠$1。

接下来又是注册和支付宝支付,和搬瓦工一样,就不说了。由于使用了WHOIS隐私保护,所以这里不用担心信息被广播到全网。

注册成功后,下一步就是管理DNS域名解析了。点击网站右上角的Manage My Domains,进入域名管理面板。选择www.zhouyonogyi.com那个一行的options里的蓝色球,Manage DNS for this domain。

第一次进入,可能会要求你设置安全问题,安全问题会在敏感操作时验证。你可以设置一个或者多个安全问题,下图是验证界面示例。

接下来你看到如下界面,域名商会默认帮你添加了好几个DNS解析,我们现在将它们全都删除,并简单了解两个名词:

  • A    用于建立域名IPv4地址的对应关系
  • CNAME 用于建立域名域名的对应关系

这里选择添加一个空host和一个www host的A地址就行,IP填你的VPS的,TTL是数据包的生命周期,一般使用3600即可(图中的CNAME和MX是我用来建立域名邮箱site@zhouyongyi.com的,如有兴趣请进入qq邮箱-设置-体验室-域名邮箱,按提示进行操作即可)。

接下来就要等待DNS解析递归的传播出去了,这个过程会需要几十分钟,之后你就能ping通你的域名了。这个时间内,我们使用SSH连接上VPS,部署我们的服务器。

三、安装LNMP一键包并配置虚拟主机vhost

1、安装LNMP

LNMP一般来说指的是Linux + Nginx + Mysql + PHP,用这个组合可以快速搭建出轻量级的网站,因此深受喜爱。而LNMP一键安装包(https://lnmp.org/)则是一个集成了安装、配置过程的第三方包,为了快速建站,此处我们选择一键安装包。

  此文写作时,LNMP最新的是1.5beta版本,优化了对SSL的支持,若希望快速完成SSL证书生成+部署到WordPress,使用https协议,建议使用此版本。若您阅读时间距今过久,可以进入LNMP的网站查看最新版本,并替换下面代码中的url。请注意,安装过程需要三十分钟左右。

首先,运行如下代码,通过wget将压缩包下载到本地并解压,并运行install.sh安装。

你需要配置下面的选项,请牢记配置中的数据库root密码

  • 安装的Mysql版本(直接回车选择默认的5.5.58)
  • 设置Mysql的root账户的密码(请使用复杂密码)
  • 是否开启InnoDB,支持并发与表间引用(直接回车默认开启)
  • 安装的PHP版本(直接回车默认选择5.6.33)
  • 是否开启存储分配器(直接回车默认不开启)

接着就是按任意键开始安装了。安装过程需要三十分钟左右。

最后出现小绿字Install lnmp V1.5 completed! enjoy it.安装完毕。我这里出了BUG,安装完毕后不会退出,此时按Ctrl + C 强制退出即可。

到这里,我们需要验证之前的域名解析递归是否完成了,也需要验证lnmp是否真的可以工作了。

首先在命令行里输入

若返回你的IP信息,则说明DNS递归成功,所以接下来IP就不打码了。接下来我们输入域名www.zhouyongyi.com,若安装成功,会出现如下lnmp安装包的欢迎界面:

验证完毕后,我们就可以删除lnmp安装包存放在本地的网页了,删除后,将不会再出现上面的页面。

接着,我们需要修改数据库的访问路径:default目录下的phpmysql文件夹,名字改成一个只有你知道的名字,

改完后,地址栏输入 ip地址/noOneKnows 就可以进入管理界面了。现在里面没有东西,但是以后你的网站信息全都装在里面。

2、配置虚拟主机vhost

虚拟私有服务器VPS和虚拟主机vhost的区别是什么呢?

一个服务器可以被分为多个虚拟主机,每个虚拟主机存放不同网站的数据。

所以,现在我们要做的是,创建一个虚拟主机,用来存放www.zhouyongyi.com网站的数据。

我们需要借助lnmp帮我们进行配置:

你需要配置下面的选项,请牢记配置中的数据库名字、账号、密码

  • 输入你的域名:www.zhouyongyi.com
  • 是否需要输入更多的域名?:zhouyongyi.com  (若不输入,直接回车,则以后需要自己通过301重定向,把没有www的域名定向到www域名)
  • 输入存放网站数据的目录(直接回车,默认是/home/wwwroot/www.zhouyongyi.com)
  • 是否开启rewrite规则?这里输入y,会问你是什么类型的框架,输入wordpress
  • 是否允许phpinfo:我选择y(pathinfo的原理就是将index.php/xxxx/xxx类似的网址当做php来执行)
  • 是否开启数据库日志:虽然日志记录是比较安全、规范的做法,但是会占用大量存储空间,我们的小VPS就不要开启了。
  • 是否为网站创建数据库,并且创建一个和数据库同名的数据库账号:输入y
  • 请输出mysql的root密码(需要root权限才能创建新的数据库和数据库账号,输入正确会说OK,否则会让你重新输入,见图)
  • 输入上上步想要使用的名字:输入wordpress,这样,你的mysql里面名为wordpress的数据库就专门用于存放www.zhouyongyi.com的网站数据了。你可以通过名为wordpress的账号来管理名为wordpress的数据库。
  • 输入想要为新账户设置的密码:用来登录上面创建的新账户
  • 是否使用SSL认证:选择y(我们需要使用https协议,而不是明文传输的http)
  • 使用自己已有的证书还是使用Let’s Encrypt申请一个:选择2使用Let’s Encrypt申请(这个组织已获得Mozilla、微软等主要浏览器厂商的根授信,安全度还是比较高的)。

接着按任意键创建就行了。

四、部署WordPress实现基本功能

1、下载WordPress

网上很多帖子都是将WordPress下载到本地,然后用ftp传输到VPS,这里并不推荐,因为ftp是明文传输的,安全性差。ftp的替代方法有ssh(sftp)或者ftps,前者通过SSH secure shell或者PuTTy实现,而且和SSH配套,不需要安装其他的东西,建议使用前者。

而本文中,下载可以通过wget直接下载到VPS,没必要先下载到自己的计算机再传到VPS。

还记得我们是怎么下载lnmp的吗?这里用同样的方法下载:

解压出来以后,把wordpress文件夹里的东西全都移动到存放网站数据的目录下,然后就可以删掉安装包了。

2、配置WordPress

现在网站数据目录下已经有了一套基本的WordPress部件,我们需要配置WordPress让它和Nginx框架以及Mysql连接起来。WordPress自带了一个配置文件样本wp-config-sample.php,我们直接copy一份再照着改:

接着使用shell下的文本编辑器vi进行编辑。你只需要掌握如下几个基本操作:

  • 按键盘的I键进入编辑模式(若生效,你可以看到shell的左下角有INSERT字样)
  • 编辑完成后,按Esc退出编辑模式
  • 输入 冒号+wq 是“写并退出”,输入冒号+q是“退出”,有时候你需要在末尾加上感叹号!来强制操作(这种情况发生于多个用户同时编辑一个文档),示例如下

那么,我们输入

进入文件进行修改,找到设置中的这部分,把数据库名字、数据库账号名字、数据库密码填入其中:

修改完毕,保存并退出。

3、部署WordPress自动建站

在浏览器输入www.zhouyongyi.com访问域名。若之前的配置信息出错,你将看到Error establishing a database connection,这时候你可以先改wp-config文件,然后重新访问一次。如果还是不行(概率极低),那就先删除vhost虚拟主机,

再删除/home/wwwroot/www.zhouyongyi.com这个目录,然后从“添加vhost”这一章开始,再来一遍,重新配置需要十多分钟这样(别问我怎么知道的)

若配置正确,你将进入WordPress的部署引导界面,

  你需要配置下面的选项,请牢记配置中的管理员账号和密码(这是第三次也是最后一次了)

  • 给你的个人站点起个名字
  • 给你的个人站点创建一个管理员账户
  • 你的E-mail
  • 是否禁止搜索引擎收录,勾上是禁止(建议先勾上,等网站正常运作后再打开收录)

4、将网站数据目录的所有者改为www

现在你的个人网站已经正式上线了,但是如果你尝试安装主题或者安装插件,你可能会发现安装失败,并且向你索要ftp信息,但是,我们不需要安装FTP,我们不需要安装FTP,我们不需要安装FTP。

安装失败的原因是,WordPress无法在/home/wwwroot/www.zhouyongyi.com下进行数据目录的创建和删除,因此尝试使用FTP进行数据操作。我们最好避免这类明文协议安装在我们的服务器上。这时我们只要将目录的所有者改为www,并且增加各用户对此目录的操作权限就行了,-R代表递归操作子目录:

再试试,我相信你可以安装了,本站使用的这款主题是shadower,另外现在用的比较多的一个统计访问插件是WP-Statistics。

五、网站的SSL传输

(2019.5.6更新备注:将全站的http重定向后会导致网络证书无法通过http进行验证,进而导致证书过期。解决方法是,网站证书过期以后,将重定向取消掉,重启Nginx。然后手动通过acme.sh进行证书更新,然后回复重定向,重启Nginx使设置生效)

1、301重定向进行全站https传输

目前,你的个人网站已经实现了基本功能,其他功能可以通过在各种WordPress社区寻找插件来实现了。但是,你的网站目前默认使用的是http明文传输。正如尽量避免ftp一样,我们也应该避免http协议。

如果你输入www.zhouyongyi.com和https://www.zhouyongyi.com,你会发现地址栏上一个是不安全的,一个是带锁的,也就是说我们现在同时支持两种协议,那么接下来我们需要将通过http协议进行的访问请求重定向到https协议访问上。如果你的网站不能进行https访问,请先解决它,不要进行本章操作(一般可能是某个依赖库没安装,安装后通过lnmp ssl add重新申请,或搜索手工配置的技术博客)。

目前使用较多的代理服务器有Nginx和Apache,我们使用的是Nginx。如果你使用的是Apache,请通过关键词搜索其他方案。

为了配置代理服务器,我们需要知道本机的Nginx安装在何处,通过whereis命令执行:

可以看到,目录在/usr/local/nginx,那么我们进入其配置文件:

你会发现目录下有很多.conf文件,这些都是配置信息,那么怎么修改呢?

代理服务器的对一个网站的服务流程可以概述如下:设置一个server,其中设置了监听端口、服务的域名等配置信息,当监听到对应访问时,通过配置信息进行处理。要注意的是,(域名,端口)组合的server应该是独一的,否则会出现冲突。

基于上述理由,我们在添加配置前要先确认,是否已有对应server:若没有,我们可以直接添加;若有,则需要到对应地方修改。用grep命令进行搜索:

这下我们看到了,vhost/www.zhouyongyi.com.conf里存在相关server,我们直接进入修改,实现301重定向的模板如下:

这个模板的意思是:对于www.zhouyongyi.com:80的访问,server的处理方式是直接return 301+ url ,告诉访问者到这个url。80端口是http端口,443是https端口,所以你也可以return www.zhouyongyi.com:443$request_uri。

通过这个模板,你可以实现多个域名映射到同一域名,设置无www域名到有www域名的映射等。你甚至可以重定向到百度。

修改完毕后,我们需要重启Nginx服务使配置生效:

当然也可以使用lnmp一键包将NM重启:lnmp restart

我们可以通过Nginx命令测试配置是否有问题

最后,我们可以输入www.zhouyongyi.com验证,是否已经实现了重定向了。一般来说,验证之前我们应该刷新本机的DNS缓存,并且删除浏览器的缓存,来获取最新的网站信息。要刷新DNS缓存,在你Windows cmd里输入

浏览器缓存的删除就不多说了。

此外,我们还要配置WordPress的相关信息:

  • 令WordPress登录和后台管理强制开启SSL。

我们要修改wp-config.php文件,加入以下两行代码:

  • 通过WordPress后台管理“设置”中“常规”里面把“WordPress地址(URL)”、“站点地址(URL)”两个地址的http修改为https,“设置”中“多媒体”的“文件的完整URL地址”改为https。
  • 你的WordPress可能之前已经生成了许多http链接,那么登录ip/phpMysql,搜索其中的http://www.zhouyongyi.com,改为https。

2、SSL证书的自动续期

lnmp1.5版以后,安装包使用更便捷的acme.sh进行申请SSL证书,而不是certbot(因为certbot需要的依赖包较多。不过现在也有certbot-auto版,能自动安装所需依赖库)。

需要注意的是,SSL证书具有有效期,我们需要按时续期。

  • 如果你是使用certbot手动配置的SSL证书,可以通过设置定时任务,让系统自动续期,由于我未使用过,建议搜索有关的技术博客。其中用到了crontab,这个工具挺有用,这里摘抄了它的用法。Crontab的格式如下:

  • 如果你使用的是acme.sh,它是自动80天续期的,不必操作。
  • 如果你使用的是certbot-auto,可以通过如下命令设置自动续期:

至此,一套完整的使用https访问的个人网站就搭建完成了。

我在学习建站的过程中,参考了很多博客,其中感觉较好的一篇是VPS+LNMP+WordPress搭建个人网站/博客,推荐给大家。

推荐几个好用的插件:

如果你在安装过程中遇到了问题,欢迎留言讨论交流。

Tags:


6 Comments

你好,请问怎么才能设置成中文呢,按你的教程我们装的都是英文版的wordpress

Reply

没记错的话在settings -> language

Reply
36fim7xa@www.bccto.me
2019-01-16 at 13:3519

请问为什么要加这一句呢? chattr -i /home/wwwroot/www.zhouyongyi.com/.user.ini

Reply

如果WordPress在网站目录下安装插件、主题的时候权限不够,那么它会提示需要FTP。
这里的解决办法有两个,一是在VPS上加装FTP,另一个是给WordPress足够的权限使其能够对自己的网络目录进行操作。
而网站目录下.user.ini是加了安全锁的,无法修改权限,此时需要该命令来解锁。

Reply

cd /home/wwwroot/default
[root@wangqian default]# mv phpmysql wangqian
mv: cannot stat ‘phpmysql’: No such file or directory
这个怎么解决啊

Reply

你好,提示的是phpmysql文件夹不存在,我猜是因为lnmp改了这个文件夹的名字(由于我搭建好网站之后也没再重新装过了,不知道具体)。你可以使用ls命令看看目录下有不有类似名字的文件夹,然后把phpmysql替换成那个文件夹的名字进行操作就好。
如果没有类似文件夹,可以试试重新安装一遍。

Reply

Leave a Reply

Your email address will not be published.

*
*
*

Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert