Day17 - 铁人付外挂前置作业(二)- 开发环境

在自己的电脑中建立一个 WordPress 需要的材料有 PHP、Apache or Nginx 以及 MySql,如果不想手动各别安装,市面上也有很多现成的免费套装软件可以把这些环境自动建置起来,而且还可以根据自己的需要切换不同的版本,然後只要下载 WordPress、服务器设定、资料库连线等一系列步骤,就能在本机架设好 WordPress 网站。

由於这几年全代管 WordPress 网站主机的服务盛行,这些厂商为了增加市占率,提供给开发者免费的软件来建置本机环境,除了已经内建基本服务外,最方便的是一键就能建立网站,所有的服务器、资料库连线设定它都已经帮我们处理好,然後当做完後点选部署,直接就能把网站上传到他们的主机上,省去所有部署的繁琐流程,关键字搜寻「local wordpress development」就能找到很多这类软件。

这些套装软件的好处很多,除了上述提到的一键架好 WordPress 以外,还有提供网站复制、对外分享连结、WP CLI、预设安装布景主题、测试发信等等实用的功能,而且 Windows / MacOS 都有支援,最重要的是完全免费,如果是想快速架设的朋友我建议可以先用这些工具来熟悉 WordPress 的操作。

虽然上述软件的优点很多,但有一个致命的缺点就是很吃硬碟空间,尤其是对我这台只有 128G 的 Mac 来说,因为这些软件多半都是用 Docker 来配置每一个站的环境,等於每一个站就会有独立的 PHP、Nginx、MySql,更不用说如果还要切换版本的话,每个版本都是独立的映像档,网站一多占用的硬碟空间就会暴增。

另外一个缺点是因为是执行在 Docker 上面,这些软件为了避免长时间执行吃记忆体,所以只会在启用时才把环境建置起来,这导致了每次重启的时间会稍微久一点,以及有时候网站的效能会低落,但如果你的工作机硬碟有 1TB、RAM 有 32G,那麽这些工具可以帮你省下很多时间。

Laravel Valet

如果没有,而且你的工作环境是 MacOS,我会推荐使用 Valet。Valet 是 PHP 框架 Laravel 提供给 Mac 使用者的本机开发环境,它最大的好处是共用背景执行的 Nginx,只要当电脑开机时就会同步启用,也不会像套装软件每建一个站就会有独立的 Nginx 要安装与执行。另外它使用了 DnsMasq 这套 DNS 软件,无需再自行修改 host 档来新增测试站网址。

官网上面提到 Valet 执行时大约只会站 7MB 的记忆体,而且速度非常快,我这几年来已经全面改用 Valet 建过数百个站,我的配备是 2013 MBP 128G SSD、8GB RAM,到现在还每个站跑起来还是跟飞的一样,完全不会有越用越慢的问题。

Valet 除了可以跑 Laravel,当然也能作为 WordPress 的开发环境,开发者 Aaron Rutley 写了一份名为 valetpress 的指令稿,透过 WordPress 命令列工具 WP CLI 来完成环境配置,从敲下第一行指令到真正建立好网站,我实测的平均秒数是 6 秒多,完胜所有用套装软件的速度。

另一个好处是可以修改脚本的内容,改成符合自己需要的,像是我常常需要空的 WooCommerce 环境来进行测试,我只要在终端机里面输入 $vp wc,就能在十秒内建置好装有 Storefront 布景主题、倒入测试资料、WooCommerce 以及常用金流外挂的测试站。

Valet 安装步骤

先确保作业系统必须是 MacOS,我目前的版本是 10.15.7,CPU 是 Intel Core i5:

一、安装 Homebrew

Homebrew 是 MacOS 专用的套件管理系统,开启终端机,输入以下指令即可安装

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安装完成後,先确认 brew 可以正确执行,

$ brew update

如果执行 brew update 发生错误,要先把别名加入 .bash_profile,

$ open .bash_profile

输入上面的指令後会打开一个文字档,在档案的最下面加入以下文字:

export PATH=”/usr/local/bin:$PATH”

确认 brew update 可以正确执行後就可以进入到下一步骤。

二、安装 PHP&Composer

先使用 Homebrew 安装 PHP,再安装 PHP 套件管理系统 Composer:

$ brew install php
$ brew install composer

三、安装 MySql

Valet 官方文件是安装 MySql 5.7,个人是习惯装 Mariadb:

$ brew install mariadb

如果遇到要登入资料库的时候,会出现 'ERROR 2002 (HY000): Can’t connect to local MySQL server through socket '/tmp/mysql.sock' (2),时,先进到该路径把这档案删除,

如果再次登入出现 'Access denied for user 'root'@'localhost',前往编辑 MySql 设定:

$ vi /usr/local/etc/my.cnf

加入下面这行後储存後退出:

[mysqld]  
skip-grant-tables

最後再重启资料库即可。

$ brew services restart MariaDB

四、安装 Valet

使用 composer 下载 valet 套件:

$ composer global require laravel/valet

等待下载完成後开始执行安装:

$ valet install

这时候可能会出现找不到 valet 指令的错误讯息:command not found: valet,因为 valet 是 composer 的套件,而套件会被装在 vendor 资料夹底下,因此没办法直接呼叫,这时候要把 vendor 路径进行 export。我的环境是用 zsh,所以要打开 .zshrc 来加入设定:

$ open ~/.zshrc

然後加入下方路径後储存:

export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/user/.composer/vendor/bin:$PATH

设定档有任何修改记得要跑一次 source 才会套用更新:

$ source ~/.zshrc

加入後再次 valet install,会出现 stopping Nginx 的讯息,代表正在启用 valet 中,但如果出现 Homebrew PHP appears not to be linked. 代表 Homebrew 没有连结到正确的 PHP,输入以下指令来产生连结:

$ brew link php –force

再次输入 valet install 即可启用 Valet。Valet 预设情况下它会在背景执行,所以如果要连上测试站的话,再也不用像以前启用 MAMP、Docker、Local 要等上一段时间,只要一开机 Valet 就会自动启用。

五、安装 WP-CLI

WP CLI 是 WordPress 非常实用的指令工具,可以从系统面来管理网站,不管是安装外挂或是汇入资料库都能透过指令操作,安装方式可以参考官方的说明,另外我们也可以使用 Homebrew 来安装:

$ brew install wp-cli

装完後记得把 wp 关键字加入到个人设定档中,这样就可以用 wp –info 这样的简写来操作它。

$ chmod +x wp-cli.phar  
$ sudo mv wp-cli.phar /usr/local/bin/wp

六、下载 ValetPress

上面环境都完成後,剩下就是加入 WordPress 的自动化脚本。先在本机 user 目录新开一个隐藏目录叫做「 .valetpress」 与目录 「Sites」 资料夹,前者是放自动化脚本,後者是之後新建 WordPress 站的网站根目录。

我依照 Aaron Rutley 所写的脚本新增了与 WooCommerce 相关的部分,下载连结如下:

下载 ValetPress - WooCommerce 版

解压缩後放入这个 /username/.valetpress 这个目录中,然後 .zshrc 要引入这个 valetpress 这个档案,先打开 zsh 设定档

$ open ~/.zshrc

加入以下判断式:

if [ -f ~/.valetpress/valetpress ]; then  
	source ~/.valetpress/valetpress  
else  
	print “404: ~/.valetpress/valetpress not found.”  
fi

一样,设定档改好後记得要跑 source 才会更新,如果你有自己改写 valetpress 也记得要 soruce 一下:

$ source ~/.zshrc

我新增的指令如下:

if [ $1 = "wc" ]; then
	cd ~/Sites
	echo "${VP_BOLD}ValetPress, create empty new site with WooCommerce${VP_NONE}"
	echo "${VP_YELLOW}Project Name:${VP_NONE}"
	read project_name
	mkdir "$project_name"
	cd "$project_name"
	mysql -uroot -e "create database \`$project_name\`"
	wp core download --locale=zh_TW --skip-content
	wp core config --dbname="$project_name" --dbuser=root --dbhost=127.0.0.1
	wp core install --url="$project_name".test --title="$project_name".test --admin_user="$project_name"  --admin_password=password [email protected]
	wp language core install zh_TW
	wp language core activate zh_TW
	wp option update timezone_string "Asia/Taipei"
	wp site switch-language zh_TW
	echo "${VP_GREEN}Success:${VP_NONE} Project Created: ${VP_UNDERLINE}https://$project_name.test/${VP_NONE}"
	wp plugin install woocommerce
	wp language plugin install woocommerce zh_TW
	wp plugin install ry-woocommerce-tools
	wp language plugin install ry-woocommerce-tools zh_TW
	wp plugin activate woocommerce ry-woocommerce-tools
	wp theme install storefront
	wp language theme install storefront zh_TW
	wp theme activate storefront
	echo "Valet Link Project"
	cd ~/Sites/"$project_name"/
	valet link $project_name
	valet secure $project_name
	echo "L: ${VP_UNDERLINE}https://$project_name.test/wp-admin/${VP_NONE}"
	echo "U: $project_name"
	echo "P: password"
fi

里面大部分都是 WP CLI 的指令,像是安装中文语系档、安装 WooCommerce 外挂、安装 Storefront 布景主题并且启用它们,然後使用 valet link 来做连结,以及 secure 来做 SSL,预设的帐密为专案名称 / password,如果要换登入密码可以在 wp core install 那边修改。

之後新建一个装有 WooCommerce 的测试站步骤如下:

$ vp wc

输入专案名称:

ValetPress, create empty new site with WooCommerce
Project Name:
wc-test

接下就会全自动化进行安装:

wc-test
Downloading WordPress 5.8 (zh_TW)...
Using cached file '/Users/oberonlai/.wp-cli/cache/core/wordpress-5.8-zh_TW.zip'...
Success: WordPress downloaded.
Success: Generated 'wp-config.php' file.
Success: WordPress installed successfully.
...

完成後就可以用专案名称的网址来进入测试站,如果要砍掉测试站只要输入 $vp delete 即可,删除的同时资料库也会一并移除,无须再手动处理。

搞定开发环境後,下一篇文章介绍 WordPress 的资料夹基本结构,以及建立金流外挂的必备知识。

本文同步发表於:https://oberonlai.blog/tw/woocommerce-payment-local/


<<:  [day5] Python发送Request接收Response与永丰API串接参数

>>:  Day9-Go切片Slice

[Day28]Laravel Eloquent ORM

首先,让我们创建一个 Eloquent 模型。模型通常位於app目录中,但您可以将它们随意放置在可以...

Spring Boot专案建立(Day3)

我:同学我要怎麽开始我的Spring Boot专案啊? 同学:就这样那样.......一下就好了啊 ...

暴力攻击(Brute Force Attack)

-图片来源:Toussaint Ilboudo 我碰到了有关卢克小组中的暴力攻击事件的帖子,并恭敬...

Day 01-Workshop Azure Get-Started

上一篇:Day 01-引言:Terraform 是个好东西 课程内容与代码会放在 Github 上:...

vue组件使用props、$emit传递数据

纪录一下我的作品当中点击get details按钮跳出Popup组件,按下叉叉可关闭Popup组件的...