18.1 本地开发环境

18.1.1 本地开发环境的概念


开发环境,顾名思义就是程序员专门开发程序时使用的实验环境,配置方面可以比较随意,为了开发调试方便,一般打开全部错误报告。比开发环境更进一步的是测试环境,一般情况下会克隆一份生产环境的配置;如果一个程序在测试环境下工作不正常,那么接下来我们肯定不能把它发布到生产环境上。

一个网站所使用的CMS,在正式上线运行前,都需要进行测试;然后我们根据测试结果,来对正式上线时使用的CMS和线上的正式生产环境进行调整。

我们的标题里面,多了一个词“本地”,也就是说,我们将用个人的计算机搭建出一个CMS运行的实验环境。它的主要目的,是为了降低我们的学习难度,避免我们浪费过多时间,节省整体的学习费用,尽快上手熟悉我们将要介绍的CMS——WordPress。

后面大部分内容里的操作,基本上都可以在我们搭建的本地开发环境里进行练习。练习完毕以后,我们就可以直接使用正式的线上生产环境,重新用WordPress搭建出我们想要打造出的漂亮好用的网站。我们之前在国内的云计算服务商比如阿里云里购买的服务器,都需要进行备案,备案时间大致在一个星期至一个月不等;如果备案花了七天,阿里云就会赔偿七天使用时长。在网站备案期间,我们完全可以在我们的本地开发环境里先进行练习。

当然,我们也可以直接用服务器搭建一个线上的开发环境,只不过在未备案的情况下只能使用公网IP访问;不过为了避免搜索引擎收录致使我们服务器的公网IP暴露,以及一些其他情况的出现,我们建议别轻易使用生产环境用的服务器去搭建开发环境进行练习。

大多数人的个人计算机的系统基本都是Windows,所以我们必须找一个能在Windows系统下使用的本地开发环境集成软件包。通常情况下,我们会搜索出以下几个常用的集成软件包——WampServer、XAMPP、phpStudy、宝塔等等。前两个集成软件包是国外人士开发的,软件的原生界面不包含中文,新手使用起来会有一定上手难度;后两个集成软件包是国内人士开发的,上手不会有太大难度,而且软件官方有丰富的教程,基本能覆盖到学习过程中的每一个细节。

前面介绍的四个集成软件包中,有一个有点不太一样,那就是——宝塔。宝塔是服务器上使用的集成软件包,功能非常强大,我们可以把它的Windows服务器版本下载下来并安装到我们的个人计算机上,作为本地开发环境使用。不过我们只是用来学习上手,并不需要这么强大的软件,所以我们这里只简单讲一下phpStudy。

拓展知识:
WampServe 官方英文站点 http://www.wampserver.com/
XAMPP官方中文站点 https://www.apachefriends.org/zh_cn/index.html
phpStudy官方中文站点 http://www.phpstudy.net/
宝塔官方中文站点 http://www.bt.cn/

18.1.2 安装本地开发环境


本书的写作时间是2017年,所以phpStudy官方给出的软件版本为2017,如图18-1所示,其下载链接为http://www.phpstudy.net/phpstudy/phpStudy2017.zip。我们将集成软件包的压缩包下载下来以后,只需要解压出其中的phpStudySetup.exe文件,放到我们的个人计算机的桌面上。
3-1-1-1-1920×720.png
图18-1 phpStudy官方网站

我们双击这个可执行文件,然后软件会提示我们,它的默认安装目录为C:\phpStudy,我们按照个人的使用习惯,将安装目录改到D盘,即修改后的安装目录为D:\phpStudy。这里需要记住的是,千万不要把软件安装在D:\Program Files,至于个中原因,我们在这里就不细说了。我们修改完成以后,点击确定开始安装,它会被自动安装完成,接下来的不用管。

安装完成后,软件会自动打开主界面,如图18-2所示。如果phpStudy没有启动,我们点击“启动”即可,然后用鼠标点击一下“其他选项菜单”,再点击弹出的选项菜单最上方的“My HomePage”,此时我们会看到浏览器打开一个URL为http://localhost/index.php的本地网页,网页上显示“Hello World”字样(也有可能是一个PHP探针页面),说明我们的phpStudy已经安装成功。
3-1-2-1-400×330.png
图18-2 phpStudy软件主界面

18.1.3 开始配置并使用本地开发环境


我们先将phpStudy中的Apache和MySQL这两项服务启动,运行模式保持为默认的“非服务模式”即可。我们点击“其他选项菜单”,如图18-3所示,再点击弹出的选项菜单中的“网站根目录”,进入路径为D:\phpStudy\PHPTutorial\WWW的本地网站目录。我们在这个目录下,创建一个名为“example.com”的文件夹,如图18-4所示。
3-1-3-1-550×550.png
图18-3 点击其他选项菜单中的“网站根目录”

3-1-4-1-650×250.png
图18-4 创建名为“example.com”的文件夹

然后我们点击“其他选项菜单”,再点击弹出的选项菜单中的“打开host”,在文件中写入如图18-5所示的配置,写入完成后点击保存,关闭文件即可。这里需要注意一下,如果以后不再使用phpStudy进行学习,记得把这里的配置还原,或者在其前面加上一个#号注释掉。
3-1-5-1-245×45.png
图18-5 在HOST文件中写入配置

我们继续点击“其他选项菜单”,再点击弹出的选项菜单中的“站点域名管理”,在如图18-6所示的软件界面中填入相应的配置;网站目录应该为D:\phpStudy\PHPTutorial\WWW\example.com。配置填写完成以后我们点击“新增”,接着点击“保存设置并生成配置文件”,完成基本的站点域名配置工作。
3-1-6-1-543×500.png
图18-6 站点域名管理配置

接下来,我们点击“其他选项菜单”,然后再点击弹出的选项菜单中的“phpMyAdmin”,打开phpMyAdmin的登录界面。由于phpStudy里的phpMyAdmin的用户名和密码都为root,所以我们这里的登录密码为root;因为我们只是在本地进行测试,为了方便操作,所以使用一些弱智密码是完全没有问题的。

成功登录phpMyAdmin以后,我们先点击“用户”,然后点击“添加用户”。在弹出的“添加用户”软件界面中,按照如图18-7所示的提示信息,依次选择和输入相关配置,完成以后点击“添加用户”即可;这里的密码可以随意输一个自己喜欢的,比如我们这里的密码为“demodb”,然后再重新输入一次。
3-1-7-1-1920×780.png
图18-7 在数据库中添加新用户

以上的步骤操作完成以后,一个适合WordPress运行的本地开发环境基本上搭建完成。我们从WordPress中文官网下载一份当前最新的软件压缩包,下载到本地计算机的桌面,然后我们将压缩包里的WordPress文件夹下的所有文件正确解压到D:\phpStudy\PHPTutorial\WWW\example.com中,如图18-8所示。
3-1-8-1-800×400.png
图18-8 将WordPress正确解压到相关文件夹中

接着,我们在浏览器中输入http://www.example.com,WordPress会自动跳到其数据库信息配置界面,其地址为http://www.example.com/wp-admin/setup-config.php,如图18-9所示。
3-1-9-1-800×600.png
图18-9 WordPress安装时的数据库信息配置界面

我们点击如图18-9中所示的“现在就开始!”,跳转到配置文件调整界面,如图18-10所示。图18-10中的五个输入框,只需要修改前三个的配置,其他的可以先不管;前三个输入框的配置,按顺序应为“demo”、“demo”、“demodb”。
3-1-10-1-900×560.png
图18-10 WordPress安装时的数据库连接信息配置界面

输入完成以后我们点击“提交”,WordPress会告诉我们“已经可以连接数据库了”,于是继续点击“进行安装”,跳转到欢迎界面,如图18-11所示。我们在“站点标题”的输入框里面,输入“demo 的本地测试站点”;“用户名”的输入框里,输入“admin”。当然,为了安全起见,在正式的站点里我们不能用这么简单常见的用户名;为了省事,我们也把密码设置成了弱智的“admin”。不过我们要是真使用这样的弱智密码,WordPress会询问我们是否“确认使用弱密码”,我们将它勾选上就能够正常安装;电子邮件的输入框中,我们使用的是“admin@example.com”,一个并不存在的邮件地址。在正式的站点中,我们必须使用安全度比较高的正式邮箱,来作为 WordPress 搭建的网站里的超级管理员的管理邮箱;接下来的“对搜索引擎的可见性”,我们可以不用理会。不过需要注意的是,如果在安装正式站点时,我们勾选了这个选项,百度、谷歌等搜索引擎将会被我们的站点屏蔽。最后,我们点击“安装WordPress”,等待几秒以后,会出现提示安装成功的界面;我们点击界面上的“登录”,会跳转到地址为http://www.example.com/wp-login.php的后台登陆界面。
3-1-11-1-100×850.png
图18-11 WordPress安装时的站点信息配置界面

我们输入用户名“admin”和密码“admin”,勾选上“记住我的登录信息”,然后点击“登录”,我们将成功登录 WordPress 站点的后台,其后台地址为http://www.example.com/wp-admin/,具体如图18-12所示。
3-1-12-1-1920×950.png
图18-12 WordPress站点管理后台

18.2 线上生产环境

18.2.1

线上生产环境的概念
所谓生产环境,与前面的开发环境和测试环境相呼应,是开发**→测试→生产**这一基本的产品发布流程中的最后一环的基础。

上面标题中的“线上”概念,意味着产品是对大众开放的,并且部署在拥有公网IP的服务器上,对其可靠性有较高要求的正式服务;而不是放在自己家里的个人计算机上的,自娱自乐的可以随意处置的小玩意儿。

18.2.2

线上生产环境的选择
无论是我们这本书中介绍的WordPress,还是其他的CMS,基本上都可以使用以下三种线上生产环境——云虚拟主机云服务器物理服务器

这三个名词的概念,大家可以通过百度来了解其具体含义,不过大家可能搞不清楚它们之间的区别。下面我们来简单解释一下:这三种线上生产环境,最明显的不同在于控制和调度服务器的资源的权限大小。

其中,云虚拟主机**<云服务器<物理服务器

云虚拟主机,它没有控制和调度服务器的资源的权限。因为它不能使用SSH服务(当然也有很多其他服务不能使用),当云服务厂商的系统分配的固定资源消耗过多后,不能自行手动释放一些不必要的服务的资源,只能通知云服务厂商来手动释放,导致使用体验很差。

云服务器,也可以叫做VPS,不过它是VPS的进化版。因为可以使用SSH服务,所以它可以比较自由地控制、调度服务器资源。由于各个云服务厂商采用的虚拟化技术如KVM、Xen、OpenVZ等不同,所以其虚拟出来的云服务器的性能也有很大差异。其中要以使用OpenVZ技术虚拟出来的云服务器的性能最差,因为用它可以虚拟出远超过其母机性能的云服务器,也就是说商家可以很方便地超售来赚取更多的利润;而且虚拟出来的云服务器的资源管控不严。如果别人使用的资源多了,我们使用的资源就会减少,有时候会达不到云服务厂商所承诺的标准(不过要是优化得不错,使用OpenVZ技术虚拟出来的云服务器的性能也还可以)。

物理服务器,也就是云服务器的母机;当然现在的云服务器的母机,不是只有一台,而是有很多很多台。这样做的好处,就是当母机集群中的某一台母机发生了故障,云服务厂商可以迅速地把这台故障母机上的云服务器转移到其他的正常的母机上,使得客户基本感知不到发生了故障,从而保证其服务的高可靠性。

关于这三种线上生产环境的权限,我们再使用一个生活中的形象例子来解释一下:
云虚拟主机,就是我们找某一个房东租用的某一套房子中的某一间房间。我们可以在里面睡觉,但是不能改动里面的陈设,也不能在墙上画画,否则就要赔钱。如果运气不好,我们碰到的房东是个黑心的二房东,他租给我们的房间名义上是一间房,但实际使用时,我们就会发现这个房间是用客厅隔出来的;云服务器,就是我们的有五十年产权的房产证的一套商品房。我们可以自由改动房间陈设,也可以做一些其他我们喜欢的事情。不过,如果我们妨碍到了周围的邻居,可能会被物业处罚,抑或是被邻居上门投诉外加泼漆;物理服务器**,不仅有房子的产权证,还有这套房子下的土地的所有权。也就是说,我们的这套房子,是一个独门独户的高档别墅型的房子。我们高兴的话,可以在外面的草坪上种种菜、养养鸡,自由自在、无忧无虑地生活。如果这套别墅是在山里面,周围没有其他邻居,那么基本上就是天高皇帝远,不用担心邻居的投诉,想怎么玩就怎么玩了。

现在,我们要说到它们的价格和体验之间的平衡点——也就是我们常说的性价比了。我们先不谈这三种房子的具体价格是多少,就只告诉一点——它们之间的价格没有现实生活中那么大差距,我们一般会选择哪一种房子呢?没错,就是买一套小区里的商品房。也就是说,我们应该选择云服务器,来作为我们的线上生产环境;当然,这套房子是一个毛坯房,需要我们自行设计改造。

接下来,我们将展示云虚拟主机、云服务器和物理服务器的使用价格,让大家直观感受一下它们之间的价格差距,如图18-13、图18-14和图18-15所示
3-1-13-1-1180×580.png
图18-13 云虚拟主机的标准使用价格

3-1-14-1-999×888.png
图18-14 云服务器的标准使用价格

3-1-15-1-999×777.png
图18-15 物理服务器的标准托管价格(服务器需要自行采购)

需要特别说明一下,上面的图18-14中的云服务器的价格,在特别活动期间,其价格基本接近于图18-13中的云虚拟主机,只比云虚拟主机的价格稍微高一些。而规格为1U的物理服务器,跟前面两种就完全没有可比性了;因为它基本算是一个超大面积的独门独栋的别墅,可以说是豪宅了。不过,跟房子有所不同的是,这些东西完全是一个买方市场,各家云服务厂商之间的竞争十分激烈,有时候白送都不一定会有人要。

18.2.3

开始配置并使用线上生产环境
如果我们选择的是云服务器,那么我们接下来需要考虑搭建一个适合WordPress正常运行的网站应用运行环境,我们应该优先选择LAMP或者LAEMP架构,当然选择LEMP或者LEMH架构也是可以的。只不过由于历史原因,WordPress更适合在LAMP架构下运行;我们为了兼顾稳定性与灵活性,综合比较之下,选择一个折中方案——LAEMP架构。关于如何快速搭建一个LAEMP架构的网站应用运行环境,我们已经在前面的第11章节中说过,大家可以回过头去仔细阅读。

接下来,我们只需要处理一些小问题,把一些边边角角的事情做完就可以了。

首先,我们使用root身份登录云服务器,输入cd oneinstack命令进入名为“oneinstack”的目录,接着输入./vhost.sh命令回车执行,正式进入虚拟主机配置界面,如图18-16所示。使用OneinStack一键工具配置虚拟主机的操作流程可能会因为版本的升级而有所变动,具体操作流程请以官网的说明文档为准。
3-1-16-1-540×480.png
图18-16 使用OneinStack一键工具配置虚拟主机

如图18-16所示,一开始系统会询问我们是否开启 SSL,一般输入n回车即可。如果我们输入的是y,那么步骤会有些不一样,官网有其详细的说明资料,其地址为https://oneinstack.com/install/;接下来,输入我们的域名www.example.com并回车,系统会要求我们输入一个指定的目录名称。我们在这里可以偷懒不输入,系统将会自动创建一个同名的目录;创建目录完成后,系统会询问我们是否需要添加更多的域名,我们在这里选择输入y,把example.com输入进去。因为一般情况下,不带www的一级域名会和带www的二级域名需要同时使用。这里我们也可以把一级域名当做主域名使用,而不是非得使用www;接下来,系统会询问我们是否把example.com重定向到www.example.com,我们输入y回车确认;接着系统会询问我们是否添加防盗链保护,我们依然选择y;最后两个选项系统是在询问是否开启Nginx日志和Apache日志,我们必须选择y,以备日后不时之需。

以上所有选项都完成以后,系统会生成一份如下面代码块所展示的配置信息;为了方便日后使用,我们最好将这份配置信息保存好。

  1. ####################################################################
  2. # OneinStack for CentOS/RadHat 5+ Debian 6+ and Ubuntu 12+ #
  3. # For more information please visit https://oneinstack.com #
  4. ####################################################################
  5. Your domain: www.example.com
  6. Nginx Virtualhost conf: /usr/local/openresty/nginx/conf/vhost/www.example.com.conf
  7. Apache Virtualhost conf: /usr/local/apache/conf/vhost/www.example.com.conf
  8. Directory of: /data/wwwroot/www.example.com


接下来,我们将为这个虚拟主机的目录分配一个专用的FTP账号。

我们输入./pureftpd_vhost.sh命令,进入FTP账号管理界面,如图18-17所示。输入1回车确认,我们开始创建专用FTP账号;然后输入我们的用户名和密码example(这里是为了演示,实际操作时一定不能使用弱智密码);接着,我们输入刚才创建的虚拟主机目录/data/wwwroot/www.example.com。在输入完成后我们进行确认,系统生成的配置信息可以不用保存、记住就行。以上步骤完成后,我们输入q退出FTP账号管理界面,接着输入exit命令退出服务器。
3-1-17-1-650×380.png
图18-17 为虚拟主机的目录创建一个专用的FTP账号

接着,我们在浏览器中输入127.0.0.1/phpMyAdmin,进入云服务器的phpMyAdmin管理后台(请将127.0.0.1替换成我们的云服务器的公网IP地址)。参考前面的本地开发环境的操作演示,为我们的网站创建一个专用的数据库和数据库账号。创建完成后,记得将默认的URL 127.0.0.1/phpMyAdmin中的“phpMyAdmin”手工更改成我们喜欢的随机字符;具体更改目录为/data/wwwroot/default。如果大家觉得安全非常重要,最好去云服务厂商处购买一个服务器专用的VPN通道,并将这个通道绑定到我们的服务器上,并禁止使用其他IP地址登录操作。

接下来,我们使用专用FTP账号,将我们的WordPress源代码上传到我们的虚拟主机目录了(上传时记得要使用二进制模式上传)。然后,使用A记录解析或者CNAME记录解析,将服务器的公网IP地址与我们所购买的域名绑定。一般几秒、最多几分钟,就会绑定成功;绑定成功以后,可以按照我们前面的本地开发环境的操作演示,来正式安装WordPress。

安装程序时,如果系统反馈报告文件没有权限,那么我们使用root身份执行以下代码块,它的意思是将/data/wwwroot/下的文件为644权限、文件夹为755权限、权限用户和用户组为www。

  1. chown -R www.www /data/wwwroot/
  2. find /data/wwwroot/ -type d -exec chmod 755 {} \;
  3. find /data/wwwroot/ -type f -exec chmod 644 {} \;