当我们开始学习一门新技术的时候,我们往往是从配置开发环境开始的,而也就是这一步,总有些难迈过。我们配置环境时,往往不熟悉这门技术,所以才要去配置环境来开发学习。所以这个配置的过程,总是会带有稀里糊涂“折腾”的成分。
折腾有时是乐趣,有时却是沮丧。所以折腾不一定必要,为了避免不必要的折腾,我总结了一些配置开发环境的经验,以供参考。
第一步 明确配置什么
配置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协同工作
创建数据库
mysql -u root -p
mysql
>CREATE DATABASE wordpress;
>quit
使用PHP测试脚本连接数据库
<?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
把caddy放到系统的PATH目录下,这样可以全局访问到这个binary
放到项目的文件夹下直接使用。
我选择2。
第四步 遇到问题,理清组件职责
进行到这一步大部分软件都安装完了,但是wordpress还是没办法工作。有很多问题缠绕着我们?而且主要是出在Caddy的配置上。我们先把问题理清楚列出来。理清组件的职责,是要调整哪些组件,哪些组件时无关的。
wordprss代码放在哪里?
用Caddy怎么配置wordpress?
一个一个解决:
wordpress代码放在哪儿?
这个很简单,直接建folder就行
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 下面。
用Caddy怎么配置wordpress?
要回答这个问题,还得往下分析,得想清楚Caddy是干什么的。
接收url请求(我们的网站url是什么?)
根据url请求找到PHP代码的。(PHP代码在哪里?)
运行PHP代码(Caddy怎么运行PHP?)
返回PHP代码的运行结果
Caddy的配置只需要一个文件,如下的Caddyfile可以解决上述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
brew uninstall php70
rm -rf /usr/local/etc/php/7.0
brew doctor # 查看是否有问题
brew install php70 --with-fpm
安装好后,开启php-fpm后台运行
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配置如下
localhost:9998
root wordpress/
fastcgi / 127.0.0.1:9000 php
这就是Caddy的配置了,最基本的只需要三行。
第五部 集成测试,优化配置
目前整个项目的目录如下
-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的的主题文件夹中。
mkdir example-theme
cd wordpress/wp-content/themes
ln -s ../../../example-theme
使用git管理文件,并设置.gitignore 来隔离自己的代码和wordpress的代码。
cd ../../..
git init
touch .gitignore
open .gitignore
我ignore掉wordpress和caddy这个binary,caddy这种大一点binary也不适合放在git中管理。.gitignore 文件内容如下:
wordpress/
caddy
现在工作目录下所有文件为:
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。
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改为
wordpress/
caddy
*.log
使用Caddy是不是很简单? 所有代码在github上, 有兴趣可以下载wordpress-caddy-template。真正配置环境时,不一定需要这么一板一眼的分析配置,大家搜索一下教程,然后不停的运行命令就可以了。然而当大家真的遇到问题,遇到教程里没讲到的问题时,这上面的分析思路就很有用了,只有定位到问题本身才能解决问题,而我们往往看到的是问题的表象。