使用Caddy在macOS上配置wordpress主题开发环境

当我们开始学习一门新技术的时候,我们往往是从配置开发环境开始的,而也就是这一步,总有些难迈过。我们配置环境时,往往不熟悉这门技术,所以才要去配置环境来开发学习。所以这个配置的过程,总是会带有稀里糊涂“折腾”的成分。
 
折腾有时是乐趣,有时却是沮丧。所以折腾不一定必要,为了避免不必要的折腾,我总结了一些配置开发环境的经验,以供参考。
 
第一步 明确配置什么
配置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。真正配置环境时,不一定需要这么一板一眼的分析配置,大家搜索一下教程,然后不停的运行命令就可以了。然而当大家真的遇到问题,遇到教程里没讲到的问题时,这上面的分析思路就很有用了,只有定位到问题本身才能解决问题,而我们往往看到的是问题的表象。

上一篇:怎样把wordpress 部署在反向代理的后面? 下一篇:WordPress数据库基本结构及相关SQL语句
  • 版权声明:内容来自互联网不代表本站观点,2018-05-14发表于 wordpress教程栏目。
  • 转载请注明: 使用Caddy在macOS上配置wordpress主题开发环境| wordpress教程 +复制链接