LNMP1.7更新Let’s Encrypt SSL证书失败的解决方法

最近发现去年安装LNMP1.7的两台云主机,无论是自动续期还是手动输入命令安装Let’s Encrypt SSL证书都不成功。输入lnmp ssl add命令后按提示操作,报错信息是这样的:

搜了一遍网络,原因应该是这个 https://github.com/acmesh-official/acme.sh/wiki/Change-default-CA-to-ZeroSSL

解决方式是运行以下命令后再安装证书即可:

#如果是LNMP1.6版本需要先升级,再执行后面的命令
/usr/local/acme.sh/acme.sh --upgrade

#LNMP1.7直接运行此条命令
/usr/local/acme.sh/acme.sh --set-default-ca --server letsencrypt

LNMP环境下开启Memcached和OPcache可以大大提速WordPress网站

LNMP环境下开启Memcached和OPcache可以大大提速WordPress网站,以下是亲测效果,基于阿里云的一台2CPU,4G内存的ECS云主机的监控数据,红线为开启的时间点,可以看到CPU使用率和内存占用都有明显的改善
LNMP环境下开启Memcached和OPcache可以大大提速WordPress网站

LNMP环境安装Memcached,先进入lnmp的资源目录,直接运行lnmp的扩展安装脚本

cd lnmp1.7
./addons.sh install memcached

查看详细 »

LNMP安装Jemalloc,配置MySQL内存优化

Jemalloc是一款服务器内存优化组件,在LNMP环境的安装包中可以选择安装。一般来说一台服务器上运行3-5个访问量不大的WordPress网站是绰绰有余的,所以很长一段时间里,我并没有特意研究过服务器内存优化,每次装LNMP的时候会选择不安装。

最近碰到一台服务器内存吃得很厉害,无论怎么调php-fpm配置都降不下来,不时还来个502报错。摆在面前的只有2个选项了,要么服务器升级加内存,要么试试内存优化工具再压榨一下服务器性能。于是抱着尝试心态试试Jemalloc。

安装jemalloc

yum install jemalloc

查看详细 »

LNMP定期自动备份MySQL数据库到阿里云OSS详细步骤

研究了一下项目运维中自动备份数据库到阿里云OSS的步骤,记录一下阿里云后台和服务器的一系列操作。

阿里云后台准备工作

进入阿里云对象存储OSS后台,先开一个Bucket,命名为“brain-backup-db”。因只是做备份数据库用,所以存储类型选最便宜的“归档存储”即可,其他选项用不着的就都不开。关于费用,本文最后一节会做介绍。
创建OSS Bucket
OSS Bucket列表

然后进入这个Bucket的概览页面,找到外网访问的Endpoint,记录下来。

如果你的ECS和OSS是在同一地区的,也可以根据实际网络情况,这里的Endpoint选第二或第三个,存储速度飞快。特别说明,一般购买阿里云ECS,默认网络是经典网络,也就是说同区域的ECS数据备份到OSS上,大部分情况下可以选绿框圈出的那个;跨区域或者用的是非阿里云ECS服务器的,则选红框圈出的。

查看详细 »

为什么不同公司定制网站报价差距这么大?

这又是一篇本人写于知乎问题的回答,自己博客再发布一下,文章略有修订。

原答链接:https://www.zhihu.com/question/459319142/answer/1884946869

从我能想到的几方面尽量回答这个的问题吧。

作为从业者,自然是欢迎客户找我咨询建站的问题,但如果一开始就咬定“简单”的几个页面,我们对接这个项目的兴趣一开始就会被打消…

首先,如果你说简单,我们听出的画外音是没有预算;

其次,你没有好好设想过自己要做的网站,没有给予充分思考的事情就会显得很简单。深入的想想需求,想想执行,想想自己要准备的内容,往往自己都觉得没那么简单。所以建议在咨询任何建站方的时候,都不要一上来就搬出“我的需求很简单”这种话语。倘若你以为的简单其实聊下来并不简单,但还是先入为主咬定了一个简单的预算,那这事就更加做不了了。所以不妨实际一点,你自己画几张草图,把网站要部署的内容写成文档,让做网站的人自己判断是不是简单。真的简单,我们不会瞎报价;倘若不简单,你自己心里也明白,拿着准备好的资料去货比三家,哪怕只是比比价,对行情自然也会越来越有数,或许就不会提出这种问题了吧。

从建站行业来说,把范围缩小到定制这个领域,那就把那些SaaS自助建站的先剔除。定制这种项目,是需要和客户一对一仔细对需求的;仅凭这点还不够,我经常还会帮客户分析他的竞争对手网站,给出自己的建议甚至是方案,怎样超越别人,让自己后做的网站能弯道超车。这背后的功夫又岂是几个“简单”的页面制作能涵盖的。 查看详细 »

CSS 3D坐标空间实现研究

先展示研究成果:

今天想研究一下CSS的 3D实现,但又不敢深入三角函数和线性代数的知识(多年前就已还给高数老师了),所以就浅浅地从translateX/translateY/translateZ这3个变换做一个立方体开始。这三个变换函数很简单,关键是要建立固定的坐标系,这样页面的元素就能通过这个坐标系获得立体感。

我的HTML结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<div class="scene">
  <!--方块-->
  <div class="cube">
    <div class="cube-face cube-face-front">1</div>
    <div class="cube-face cube-face-right">2</div>
    <div class="cube-face cube-face-top">4</div>
    <div class="cube-face cube-face-left">3</div>
    <div class="cube-face cube-face-back">5</div>
    <div class="cube-face cube-face-bottom">6</div>
  </div>
  <!--坐标线-->
  <div class="line line-x"></div>
  <div class="line line-y"></div>
  <div class="line line-z"></div>
</div>

查看详细 »

WordPress文章字段查询meta_query各种高级用法列举

WordPress meta_query 高级用法

WordPress在get_posts或WP_Query方法中,活用meta_query,可以变换出无数种高级检索,是WordPress的入门技能。

最简单的用法,查询自定义字段“post_color”值为“red”的文章

$arr = array(
	'post_type', => 'post',
	'meta_key' => 'post_color',
	'meta_value' => 'red'
);
$myPosts = new WP_Query( $arr );

引入meta_compare参数,查询自定义字段“post_color”值不为“red”的文章

$arr = array(
	'post_type', => 'post',
	'meta_key' => 'post_color',
	'meta_value' => 'red',
	'meta_compare' => '!='
);
$myPosts = new WP_Query( $arr );

推荐写法

下面开始进阶用法,首先要换一种写法,把所有自定义字段相关的参数都打包到meta_query参数中,效果和上面一段一样:

$arr = array(
	'post_type', => 'post',
	'meta_query'=> array(
		'key' => 'post_color',
		'value' => 'red',
		'compare' => '!='
	)
);
$myPosts = new WP_Query( $arr );

查看详细 »

WordPress不用插件实现多张特色图片/缩略图Featured Images

WordPress的文章、页面或者自定义文章类型开启特色图片,通过注册这个类型时,在support中添加参数“thumbnail”实现,比如:

register_post_type('My CPT', array(
	'label' => 'my_cpt',
	'description' => '',
	'public' => true,
	'show_ui' => true,
	'show_in_menu' => true,
	'capability_type' => 'post',
	'hierarchical' => false,
	'rewrite' => array('slug' => 'product'),
	'query_var' => true,
	'supports' => array('title','editor','thumbnail') //这里有了thumbnail就能为my_cpt这个类型添加缩略图
	)
);

这个缩略图有没有可能变成多张呢?比如这样:

查了老半天,WordPress本身并没有提供多张特色图片的API,但这个功能完全可以通过自定义字段实现。本文即是这个原理 查看详细 »

基于WordPress的微信小程序支付功能开发

我在2018年的时候总结过一篇微信小程序支付功能开发与踩坑经验总结,当时因为网上相关文档和资源的缺乏,文章获得了很多关注和转载,并且也有很多人指出了其中的不足。主要不足之处就在于那篇文章把所有的签名字串封装都放到了前端,也就是小程序里,通过JS实现,其中还涉及到了商户key这样的敏感字段,因此是不安全的。不过在3年前微信本身对这块也没有做很严格的限制,比如我把对“https://api.mch.weixin.qq.com/pay/unifiedorder”这个接口的请求放在小程序里,那时候照样是能运行的。

近期,把小程序的基础库改成近期版本后,我发现“https://api.mch.weixin.qq.com/pay/unifiedorder”这个接口的请求已经不能放在小程序里了,即使此域名已经加入到request安全域名下也无效,微信那边会自动把你加入的这个域名过滤掉。这就表示一系列的请求必须放到服务器上完成了。因此我重新整理了一下后端的代码,PHP版本的。并且因为我的微信小程序都是基于WordPress做后端的,索性把自定义的接口这块也缝合过来。

当前最新版调试通过:

打包代码如下: 查看详细 »

WordPress JWT认证授权方式测试调研和开发心得

本文接上回WordPress OAuth 1.0认证方式测试调研,研究JWT认证方式。

JWT,全称JSON Web Token。在WordPress应用场景中,客户端通过JSON格式发送登录信息到WordPress网站,网站返回用户的基本信息,附带一串token给客户端;客户端在下次请求写入数据的时候,在请求头上带上这一串token作为用户标识就可以了。由于token是从网站发来的,客户端不需要做任何的数据处理,只要存储一下这一串token就可以了,很便捷。因为这种便捷性,国内用微信小程序或其他客户端连接WordPress的项目,大部分都是用JWT实现的,如果我说的不对请留言指正:)

使用JWT,先安装插件:JWT Authentication for WP REST API

然后在WP的根目录下修改wp-config.php,增加以下两行配置,开启JWT接口:
define('JWT_AUTH_SECRET_KEY', 'abcdefg...'); //填个复杂点随机字符串
define('JWT_AUTH_CORS_ENABLE', true);

以上准备工作完成,接下来回到Postman测试发送请求。

1. 发送用户名和密码的JSON格式到 https://www.mysite.com/wp-json/jwt-auth/v1/token

返回数据中,除了邮箱、用户名和全名外,注意第一行的token,需要在客户端存储一下,安全起见,推荐存在客户端的后端,尽量不放在前端。 查看详细 »