文章目录
  1. 1. 第一步 明确配置什么
  2. 2. 第二步 找清依赖
  3. 3. 第三步 逐个安装,逐步验证
    1. 3.1. 安装 PHP
      1. 3.1.1. 测试PHP
    2. 3.2. MariaDB
      1. 3.2.1. 测试 MariaDB
      2. 3.2.2. 测试PHP和MariaDB协同工作
    3. 3.3. 安装Caddy
  4. 4. 第四步 遇到问题,理清组件职责
  5. 5. 第五部 集成测试,优化配置

当我们开始学习一门新技术的时候,我们往往是从配置开发环境开始的,而也就是这一步,总有些难迈过。我们配置环境时,往往不熟悉这门技术,所以才要去配置环境来开发学习。所以这个配置的过程,总是会带有稀里糊涂“折腾”的成分。

折腾有时是乐趣,有时却是沮丧。所以折腾不一定必要,为了避免不必要的折腾,我总结了一些配置开发环境的经验,以供参考。

第一步 明确配置什么

配置wordpress的主题开发环境。

第一步很简单,但是要明确,避免你配置环境时,配着配着,因为某些问题越走越远。

第二步 找清依赖

配置环境,其实就是配置依赖。 你在用别人开发好的工具或者库时你要明确,你要用的技术到底依赖哪些工具和库。这一步最好看官方文档。wordpress 是基于php开发的,所以肯定需要php,那还需要什么呢?wordpress 是一个web程序,所以我们需要一个server。还有呢?

根据文档我们需要以下几个组件:

  • PHP解释器

  • Web Server

  • Database

知道要什么组件后,但是方案有很多种类。 由于每个人对某个领域的经验不一样,配好后要用在的环境不一样,所以技术上选择的粒度控制会不一样
比如PHP, 安装时需不需要关注PHP版本,用PHP5.6 还是PHP7.0,有没有什么PHP的plugin需要安装? 所以这个没有统一的答案。

但是技术选择的基线要搞清楚,防止自己犯低级错误。比如wordpress 4.9 对PHP的最低的版本要求是多少?database选择Mysql的最低版本多少?选择MariaDB作为wordpress数据库,有特别要注意的地方吗?

而且不同组件之间的关系要搞清楚,他们是怎么协同工作的,怎么通信。比如PHP 和 Web Server 是怎么协同工作的?都装上去就行吗?

我准备安装wordpress的当前最新版本4.9.4,查看文档发现wordpress对环境的兼容性很好, 所以对各个组件的版本要求很低,并且他有推荐的配置。

所以安装组件最低要求是:

  • PHP 5.2.4以上

  • MySQL 5.6 以上或者 MariaDB 10.0 以上

  • 推荐使用Apache 和 Nginx

由于我有配置Apache 和Nginx的经验,我感到这两个软件,配置时还不够方便,所以我选择了使用足够简单的且稳定的Caddy。而且我要配置的是本地开发环境,对稳定性要求没那么高,所以我会倾向于选择较新的配置,这样可以使用较新的软件特性。

我的配置是:

  • PHP 7.0

  • MariaDB 10.0

  • Caddy 最新版

我是在macOS下开发,有一个好用的程序管理器是很有必要的比如homebrew这个类似于Ubuntu下apt的管理程序软件。

没有安装homebrew的运行下面的命令来安装

1
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

第三步 逐个安装,逐步验证

好,开始正题

安装 PHP

1
brew install php70 --with-fpm

–with-fpm 是什么稍后解释。

测试PHP

1
php -v

MariaDB

1
brew install mariadb

测试 MariaDB

1
2
mysql.server start
mysql -u root -p

也可以用brew services,像使用linux中的systemctl一样方便开启服务

1
brew services start mariadb

测试PHP和MariaDB协同工作

创建数据库

1
2
3
4
mysql -u root -p
mysql
>CREATE DATABASE wordpress;
>quit

使用PHP测试脚本连接数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
# Fill our vars and run on cli
# $ php -f db-connect-test.php
$dbname = 'wordpress';
$dbuser = 'root';
$dbpass = '';
$dbhost = 'localhost';
$link = mysqli_connect($dbhost, $dbuser, $dbpass) or die("Unable to Connect to '$dbhost'");
mysqli_select_db($link, $dbname) or die("Could not open the db '$dbname'");
$test_query = "SHOW TABLES FROM $dbname";
$result = mysqli_query($link, $test_query);
$tblCnt = 0;
while($tbl = mysqli_fetch_array($result)) {
$tblCnt++;
#echo $tbl[0]."<br />\n";
}
if (!$tblCnt) {
echo "There are no tables<br />\n";
} else {
echo "There are $tblCnt tables<br />\n";
}

安装Caddy

Caddy的安装很简单,甚至不需要安装,只需要下载即可。下载时选择操作系统,插件和License,下载Caddy的zip文件,解压之后,里面有个caddy的binary文件,这个binary文件就是Caddy的全部,这也是使用它的简单之处。

你有两种方式使用这个caddy binary

  1. 把caddy放到系统的PATH目录下,这样可以全局访问到这个binary
  2. 放到项目的文件夹下直接使用。

我选择2。

第四步 遇到问题,理清组件职责

进行到这一步大部分软件都安装完了,但是wordpress还是没办法工作。有很多问题缠绕着我们?而且主要是出在Caddy的配置上。我们先把问题理清楚列出来。理清组件的职责,是要调整哪些组件,哪些组件时无关的。

  1. wordprss代码放在哪里?
  2. 用Caddy怎么配置wordpress?

一个一个解决:

  1. wordpress代码放在哪儿?

    这个很简单,直接建folder就行

    1
    2
    3
    4
    5
    mkdir wordpress-caddy-template # 假设是wordpress-caddy-template你的工作目录s
    cd wordpress-caddy-template
    wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.zip
    unzip wordpress-4.9.4-zh_CN.zip
    rm wordpress-4.9.4-zh_CN.zip

    这时wordpress就在 wordpress-caddy-template/wordpress 下面。

  2. 用Caddy怎么配置wordpress?

    要回答这个问题,还得往下分析,得想清楚Caddy是干什么的。

    1. 接收url请求(我们的网站url是什么?)
    2. 根据url请求找到PHP代码的。(PHP代码在哪里?)
    3. 运行PHP代码(Caddy怎么运行PHP?)
    4. 返回PHP代码的运行结果

Caddy的配置只需要一个文件,如下的Caddyfile可以解决上述1 和 2:

1
2
localhost:9998
root wordpress/

对于3,Caddy怎么运行PHP代码?Caddy并不能直接运行PHP代码,Caddy通过PHP-FPM和PHP解释器进行进程间通信,Caddy把PHP代码通过PHP-FPM发给PHP解释器,PHP解释器解释好PHP代码后,把解释的结果通过PHP—FPM再发给Caddy。所以要安装PHP-FPM

默认PHP-FPM是和PHP一起安装,如果你像我一样安装到一半才意识到没有安装PHP-FPM,可以先卸载php70,再重新安装带PHP-FPM的php70

1
2
3
4
brew uninstall php70
rm -rf /usr/local/etc/php/7.0
brew doctor # 查看是否有问题
brew install php70 --with-fpm

安装好后,开启php-fpm后台运行

1
brew services start php@7.0

进程间通信可以通过socket通信,也可以通过端口通信. 那macOS系统下PHP-FPM的默认方式时是什么呢? PHP-FPM的配置文件是/usr/local/etc/php/7.0/php-fpm.d/www.conf,它的相关配置如下

1
listen = 127.0.0.1:9000

所以加上了PHP-FPM的Caddyfile配置如下

1
2
3
localhost:9998
root wordpress/
fastcgi / 127.0.0.1:9000 php

这就是Caddy的配置了,最基本的只需要三行。

第五部 集成测试,优化配置

目前整个项目的目录如下

1
2
3
-rw-r--r-- 1 fosteryin staff 59 Apr 5 16:18 Caddyfile
-rwxr-xr-x 1 fosteryin staff 16737696 Apr 5 15:34 caddy
drwxr-xr-x 21 fosteryin staff 672 Feb 8 12:53 wordpress

运行起来也很简单

1
./caddy

由于我想开发wordpress主题,所以我关心的只是主题的代码,所以我想把自己的代码和wordpress框架隔离,但是默认情况下主题代码是放在wordpress/wp-content/themes下的,这样每次找都不方便。而且我想用git来对代码进行版本管理,这个时候把自己的代码放在 wordpress文件夹下的子文件夹就更不方便了。

所以我在最外层目录新建了我的主题文件夹,并且把它软链接到wordpress的的主题文件夹中。

1
2
3
mkdir example-theme
cd wordpress/wp-content/themes
ln -s ../../../example-theme

使用git管理文件,并设置.gitignore 来隔离自己的代码和wordpress的代码。

1
2
3
4
cd ../../..
git init
touch .gitignore
open .gitignore

我ignore掉wordpress和caddy这个binary,caddy这种大一点binary也不适合放在git中管理。.gitignore 文件内容如下:

1
2
wordpress/
caddy

现在工作目录下所有文件为:

1
2
3
4
5
6
7
8
9
10
drwxr-xr-x 10 fosteryin staff 320 Apr 5 16:33 .
drwxr-xr-x 5 fosteryin staff 160 Apr 5 15:34 ..
-rw-r--r-- 1 fosteryin staff 6148 Apr 5 16:22 .DS_Store
drwxr-xr-x 9 fosteryin staff 288 Apr 5 16:35 .git
-rw-r--r-- 1 fosteryin staff 16 Apr 5 16:33 .gitignore
drwxr-xr-x 3 fosteryin staff 96 Apr 5 16:25 .idea
-rw-r--r-- 1 fosteryin staff 59 Apr 5 16:18 Caddyfile
-rwxr-xr-x 1 fosteryin staff 16737696 Apr 5 15:34 caddy
drwxr-xr-x 2 fosteryin staff 64 Apr 5 16:30 example-theme
drwxr-xr-x 21 fosteryin staff 672 Feb 8 12:53 wordpress

这样一个基本的wordpress开发环境就搭建成功了。

下面给Caddyfile添加一些log设置和wordpress常用的permalinks。

1
2
3
4
5
6
7
8
9
10
localhost:9998
root wordpress/
fastcgi / 127.0.0.1:9000 php
rewrite {
if {path} not_match ^\/wp-admin
to {path} {path}/ /index.php?{query}
}
errors errors.log

.gitignore改为

1
2
3
wordpress/
caddy
*.log

使用Caddy是不是很简单? 所有代码在github上, 有兴趣可以下载wordpress-caddy-template。真正配置环境时,不一定需要这么一板一眼的分析配置,大家搜索一下教程,然后不停的运行命令就可以了。然而当大家真的遇到问题,遇到教程里没讲到的问题时,这上面的分析思路就很有用了,只有定位到问题本身才能解决问题,而我们往往看到的是问题的表象。

文章目录
  1. 1. 第一步 明确配置什么
  2. 2. 第二步 找清依赖
  3. 3. 第三步 逐个安装,逐步验证
    1. 3.1. 安装 PHP
      1. 3.1.1. 测试PHP
    2. 3.2. MariaDB
      1. 3.2.1. 测试 MariaDB
      2. 3.2.2. 测试PHP和MariaDB协同工作
    3. 3.3. 安装Caddy
  4. 4. 第四步 遇到问题,理清组件职责
  5. 5. 第五部 集成测试,优化配置