手冲咖啡参数及公式

为了告别夏季八冲,先把公式学起来。

理论上来说,做一杯手冲咖啡,首先想到的是喝什么豆子,喝多少和期望什么口感,即:

喝什么豆子:豆子的品质,决定冲煮方案的萃取率目标。
喝多少:咖啡液重,即“注水量 – 咖啡粉吸水量 ”。
期望什么口感:习惯的咖啡浓度。

基于上面3个参数,可以进行如下推导:

咖啡粉量 = 咖啡液重 x 咖啡浓度) / 萃取率

注水量 = 咖啡液重 + 咖啡粉吸水量

咖啡浓度方面,SCA金杯标准建议,在 1.15% – 1.45%之间,具体看个人喜欢,杯测的浓度为1.2%

萃取率方面,SCA金杯标准建议,在18% – 22%之间,取决于咖啡豆的品质。在这里,无屿咖啡视频中给了个简单粗暴的建议:1元钱/g 豆子 – 22%     0.5元钱/g 豆子 – 20%     0.3元钱/g 豆子 – 18%

对于手冲咖啡,咖啡粉吸水量约等于咖啡粉重量的两倍

举例:想喝150g咖啡,习惯浓度1.2%,萃取率选择20%

咖啡粉量 = 150g x 1.2% / 20% = 9g
注水量 = 150g + 9g x 2 = 168g

结论是,磨9克咖啡粉,注水168克。

以上是理论上的情况,实际上拿起一包咖啡豆之后,头脑中先预设了参数:

我要磨10g咖啡豆,咖啡豆商建议粉水比1:18,那么注水180克。然后,就没有然后了。

但是,利用公式可以反过来推算:

咖啡液重 = 180g – 10g x 2 = 160g
假设浓度是 1.2% ,萃取率 = 160g x 1.2% / 10g = 19.2%

计算完,就会发现咖啡已经凉了…

以上计算有个一重要假设,萃取率或浓度符合预期,实际上这部分是由咖啡粉粗细、水温、注水手法联合决定的。实际喝的时候,可能出现偏浓偏淡,萃取不足或过萃等情形,这个时候就轮到咖啡浓度测试仪(TDS)出场啦!

咖啡浓度测试仪(TDS)的作用就是测量咖啡液的浓度,使用上面的公式可以推导出实际的萃取率。

举例:10g 咖啡粉,注水量 180g

咖啡液重 = 180g – 10g x 2 = 160g
TDS测量得到咖啡浓度 1.2% ,萃取率 = 160g x 1.2% / 10g = 19.2%

此时,如果咖啡浓度不符合预期,或者萃取率不符合预期,就可以通过咖啡粉粗细、水温、注水手法来调整。

0

自建家庭服务器(NAS) 方案篇

前言

家庭服务器(NAS),本质上就是私有云。国内条件使然,国外太远也够不着,我选择自己部署家庭NAS服务器。我的需求有两个:

  • 首先是电影下载和存储,并且能够在电视上播放。作为PTer,还有长期保种的任务。
  • 照片的存储和管理。照片来自于早些年作为摄影发烧友拍的照片和手机相片转存需求。另外,也需要能够方便的对照片按时间线、地点、人物就行管理。

部署NAS最方便的方法,自然是使用群晖之类集成完备且有持续开发的产品。这些产品易用性很高。缺点就是自由度底,硬件性能往往比较差,主要成本在软件配套方面。

我的选择比较独特,买的是低功耗工控机(mini PC),无风扇款。低电压版I3搭配16G内存。配置两块硬盘,一块SSD作为系统盘,一块2.5寸机械硬盘用来存储数据。重要数据备份方面,我采用冷备份的方法,即定期将数据同步到移动硬盘上。

这样的配置,运行起来非常安静,只在大量读写操作的时候能听的机械硬盘的声音。散热也不成问题,因为这台只做服务器,没有视频输出的需求。

方案

有了主机,下面就是选择软件平台。

我先是研究了OMV和True NAS。因为具备Linux操作经验(不会就上网搜索),我先尝试了OMV,整体上感觉不错,但是自由度还是不够高(废话,什么都用命令行,还要NAS系统做啥)。再加上安装Docker过程中一波三折,最终弃之不用,选择了直接安装Ubuntu Server。

照片

照片备份

使用Samba建立照片共享目录。手机照片,通过Resilio Sync备份到家庭NAS服务器上的共享目录下。电脑上存储的老照片,也复制一份到共享目录下。

考虑到硬盘可靠性问题,定期使用Rsync将照片目录备份到移动硬盘中(冷备份)。

照片管理

Photoprism对共享目录进行扫描,自动生成时间线,人脸识别和在地图上标记照片位置。

照片展示

Photoprism的Web UI可以很好的按时间、人物和地理位置进行筛选展示照片。

小米电视通过SMB协议访问照片共享文件夹,也可以按文件夹进行幻灯片展示。

影视文件

使用Samba建立影视文件共享目录。

影片的下载,使用Transmission,将下载目录设置到影视文件共享目录中。

PC端,通过Transmission Remote GUI控制服务器端的Transmission,添加种子文件。

小米电视通过SMB协议访问影视文件共享目录,实现播放功能。没使用串流方案,只有是字幕加载的问题,还是比不过小米高清播放器自动下载字幕带来的便利。

体验

上述方案已经满足了我的基本需求。

美中不足,有3点:

  1. Photoprism的人脸识别功能难堪大用。我看了下,官网也提到了由于训练数据的限制,其对亚裔和儿童的识别能力不足。
  2. 用Rsync备份,需要使用SSH连接到服务器,通过命令行来完成,自动化不足。
  3. 硬盘监察,目前使用smartctl,也是手动操作,自动化不足。

这三个,后面还要想办法完善。

安装过程待续:

  • 自建家庭服务器(NAS) 系统及工具篇
  • 自建家庭服务器(NAS) Docker篇
0

关于买网球所做的功课

网球结构

网球结构基本由毛毡、内胆组成。

毛毡:一般有两种材质,天然羊毛(贵)和合成纤维(便宜)。

内胆:主要材料为硫化橡胶,由两个半球粘合而成。

网球制造过程:

视频 90%的人都不知道,网球是怎么制造出来的

ITF介绍 ITF ball manufacture

网球分类

成年人用球一般是比赛用球和训练用球两种。

  • 无压球(Presureless),为训练用球或者发球机用球,其包装无充压。一般不作为比赛用球(高海拔除外)。顾名思义,这种球内胆中不增加压力,主要依靠橡胶结构提供弹性,弹性持久。但是重量和弹性方面与加压球有差别,手感偏硬。
  • 加压球(Pressured),正式比赛使用这种球,包装使用充压的罐子以保持网球内部气压。制造过程中两个橡胶半球粘合前,持续保持高气压,或者在橡胶球中加入化学品产生氮气。一般加压至12lb/in2(0.83Bar),相当于0.83个大气压。

我亲手锯开了两个网球,分别是Dunlop Coach (左)和 Dunlop AO(右)。训练球的橡胶更硬一些,其它差别不大。

网球解剖图

以上为标准网球,另有青少年使用的网球。

  • 红球(Stage 1):一般以红色为标准色,反弹高度约是标准球的25%。
  • 橙球(Stage 2):低压缩球,一般标准色为橙色,反弹高度约是标准球的50%。
  • 绿球(Stage 3):低压缩球,标准色为绿色,反弹高度约是标准球的75%。

网球标准

ITF对比赛用球进行认证,分为TYPE 1(快),TYPE 2(中)、TYPE 3(慢)和High Altitude。

一般使用的是TYPE 2,主要参数要求:

  • 质量:56.0-59.4 g
  • 尺寸:6.54-6.86 cm
  • 反弹高度:网球从254 cm (100 inches)高度垂直坠落,反弹高度在135-147 cm
  • 形变:使用18磅压力压缩网球,网球形变范围0.56-0.74 cm(Forward Deformation)。增加压力是网球压缩量达到1 inch后,降低压力回到18磅,此时网球形变范围0.80-1.08 cm(Return Deformation)。

另外,还有耐久性和一组球之间偏差的要求。

通过认证的网球清单见 ITF Approved for 2022

国内通过认证的几款有:

  • ODEA HONOR,ODEA PASSION
  • Teloon Lux Q1,Teloon Pound,Teloon Tour Pound

还可以通过包装上的认证标志来判断。

网球

总结

什么是性价比高的网球呢?

第一、选择通过了相应认证的网球,保证性能和一致性;

第二、毛毡使用高级羊毛;

第三、持久性好,这个就见仁见智了。

参考信息

0

写给自己的网球拍导购

为什么又要买球拍

翻了翻记录,前两把网球拍分别是2015年、2019年买的。第一把拍子是新手听从建议买的,第二把拍子是因为技术一直没有提升,看见拍子打折冲动之下就买了。虽然也看了看攻略,基本上还是店里面看着合适就下手了。

现在,打了这些年,技术上还是马马虎虎,总算对球拍使用方面有了些感悟。自我感觉,优先要提高灵活性,旋转放在第二位,力量放在第三位。根据这一中心思想,优先选择挥重较低的网球拍。

网球球拍知识

重新恶补了网球拍各个参数及其影响:

  • 长度

27英寸为标准长度,加长的拍子力度更大。

  • 拍面

拍面大:力量+,容错+,旋转+

拍面小:控制+,手感+,灵活性+

  • 线床

疏:硬度低,旋转+

密:硬度高,控制+

一般推荐选择16X19。

  • 柄号

二号柄最常见,选择标准是“握好后,空隙放下一直手指” 。

提示:不同品牌手柄大小有差异

  • 空拍重量

重:稳定+,力量+

轻:灵活+

  • 平衡

平衡点是从拍柄末端开始算起,平衡点数值越小,越头轻

头轻,灵活+

头重,力量+

  • 挥重

受配重影响

重:稳定+,力量+

轻:灵活+

  • 硬度

65是分界点

高:弹性+,力量+

低:吃球+,包裹性+

  • 厚度

厚:力量+,缓震+,容错+

薄:灵活+,控制+

  • 磅数

高:控制+

低:力量+

网球拍评测方法

业余爱好者,没有高水平的网球技术,也没那么多网球拍,主观评测就免了。

我参考Tennis Industry magazine在2016年一篇文章《USRSA Racquet Map Selection Guide》中的方法,把球拍基于灵活性和力量特性绘制在坐标轴上进行对比,绘图如下。

网球拍性能坐标系

几把网球拍的参数如下:

网球拍参数

写在最后的话

挥重较低网球拍分别是Dulup CX200,Wilson Blade 98和Yonex Vcore Pro 97。相对而言,CX200力量更出色一点。

目前,拍子还不急着买。不知道是不是疫情的原因,很多热门拍子都缺货,等半年看看行情吧。

写这篇文章参考了TennisFamily和RacketBrothers在B站的视频。

0

简单的时间轴调整工具 Shifter

随着对字幕组的打击,现在网上找字幕也越来越困难。目前,我常用的就是SubHD射手网(伪),但也经常出现找不到或者找到了时间轴存在偏差的问题。

这里要说下时间轴对不上的问题。一般来说,如果压制视频的源文件一致的情况下,时间轴都可以配匹,不同的压制组,不同的格式,不同的字幕组都影响不大。

具体来说,字幕文件 Eerie Mienai Kao EP01 720p HDTV x264 AAC-DoA-chs.srt 中,DoA是压制组,720p x264 AAC是格式,HDTV则是来源。

而我手中的播放文件是 Iari.Mienai.KaoIari.Mienai.Kao.2018.Paravi.WEB-DL.1080p.H264.AAC-HDCTV,格式1080p.H264.AAC不同,压制组HDCTV不同,问题不大,关键是压制的来源WEB-DL不同,字幕时间明显超前。

这个问题在PC上使用PotPlayer等播放器调整起来还算方便,但是使用电视盒子播放时调整起来很痛苦,调整之后也会出现显示不全的问题。比较好的办法,是先对字幕的时间轴进行调整。

第一步,找出时间轴偏差的时间

我的办法是使用PotPlayer播放,使用”<“、”>”调整字幕偏移(精度0.5s),调整得差不多再手动调整同步,这里得时间单位是毫秒(千分之一秒)。这也就得到偏移值了。

第二步,使用Shifter工具中的Subtitle Shifter

对于压制源不同得字幕时间轴问题,有个好处是,所有文件得时间轴偏差一般来说是一致得,批量调整1次即可。

Subtitle Shifter可以批量上传多个文件,同时进行调整。

如果字幕超前了(即,需要字幕推迟出现)则填入数值为正值。

如果字幕滞后了(即,需要字幕提前出现)则填入数值为负值。

提交处理完毕,下载即可使用(转换后的文件加了前缀,记得修改)。

Shifter是在线工具,不需要下载,也没有插件需要安装,真实业界良心。

会员也不贵,提供了去广告,同时处理的数量更多,速度更快,价格也不贵,但也确实用不上…

10

域名搬家记

站点的域名还有一个月到期,看了下续费要21+刀,遂决定搬家,换个域名托管。

选择

关于域名的转移,有个转移费用,转移后托管期限1年,1年后才需要续费。如果不想折腾,就要考虑转移价格和续费价格两方面。如果想省钱不爱折腾,就每年转移呗,毕竟各个域名托管商都是转移费用低,续费高。

更换之前做了下调查,主流的域名托管商Godaddy、name、namecheap、namesilo。到各个网站差了下转移价格和续费价格,情况见下表。CloudFlare也有域名托管,听说也很便宜,但是我始终操作不了,看不到价格,可能是因为我是用得.me域名为国家域名。

网站namecheapnamesilogodaddyname
转移$14.98$15.99$21.99¥106.63
续费$18.98$16.99$21.99¥133.31

综合考虑下,选择了namesile.com,转移价格不是最低,但是续费价格划算。

转移

域名转移,第一步是从原域名托管网站迁出。

以自己为例,从Godday迁出。

首先,解除锁定(Lock),选择从Godday迁出。

然后,Godday会挽留一下,然并卵。此处有提示,重点是email地址正确性和DNS设置备份好。

确认后,Godday会提供authorization code。这组代码要提交给转入的域名托管商。

第二步,在新域名托管网站转入,以namesile.com为例。

首先,没有账户的先注册。

然后,从 https://www.namesilo.com/domain/transfer-domains 输入域名

接下来选择“是否自动续费”和隐私政策(隐私保护是免费的),输入优惠码(可以自行网上搜索一下)。

最后选择支付方式,可选项比较丰富,从微信、支付宝,到信用卡、比特币,应有尽有。

支付成功后,域名转移开始处理,有可能要等5-7天。实际上是等待原域名托管商处理。这方面,Godaddy提供了立即完成审批的选项 https://dcc.godaddy.com/control/transfers? 

操作完成后,很快就收到域名转移完成的通知。

之后,到namesilo填写下WHOIS信息,配置好DNS就可以使用了。

5

重拾RSS阅读器

为了对抗“信息茧房”,我重新开始使用RSS阅读器。
这样做有两个好处:
1、通过订阅,获得的文章不再取决于个人喜好,能够看到各方面、各角度的新闻与资讯;
2、通过使用第三方聚合服务,可以看到不该看到的一些信息。

RSS阅读器

早些年,使用RSS阅读器的时候,Google Reader还一统江湖;后来,用过一段时间网易云阅读(有段时间可以自由订阅Feed),再后面似乎就是专注于几个网站。随着社交媒体的发展壮大,新闻的质量却越来越差,一度靠知乎热榜来关注时事,然而知乎也在加速堕落中。
阅读量不足,始终是个问题,另外,频频出现的“信息茧房”几个字,也着实刺激到了我。首先,我尝试使用Innoreader,结果失败了。Innoreader服务也不错,然而网络连接太不稳定,之前使用Feedly缓存还好,然而好景不长,突然有一天彻底无法更新了。
前段时间,又发现了 The Old Reader,网络连接状况不错,使用浏览器阅读也属于可接受的程度(然而手机上的web界面确实欠佳)。后面又安装了几款APP,问题算是彻底解决啦!

The Old Reader

The Old Reader( https://theoldreader.com/ ),与其它在线的 RSS 阅读器功能相似,提供RSS订阅、收藏、分享等功能,有中文界面。
订阅的RSS可以自由导入和导出(OPML文件)。
免费用户最多可订阅100个Feed。
Web页面很简单,美感有限。作为阅读工具,实用性第一,也就不挑剔了。

The Old Reader

APP

手机APP方面(安卓系统),The Old Reader自家的APP没有找到。
我分别试用了FeedME、NewsJet、News+ 和Daily Feed。
大体上来说,登录the Old Reader服务都没有问题,功能上也是大同小异。
但是,Daily Feed速度有点儿慢,News+的屏幕适配有点儿问题。
因此,我推荐安装FeedMe、NewsJet。

APP图标

题外话

对于国内用户,下载这些APP是一道门槛。
目前来说,方法不外乎有3种:
1、采用高科技手段,连接到Google Play Store进行下载;
2、使用APKPure等网站提供的APK文件下载
3、使用第三方网站获取Google Play Store的APK文件
对于第一种方法,考虑人身安全性的问题,我没有为手机开通高科技通信方式;
对于第二种方法,始终担心这些APK文件是否被篡改。
我使用的是第三种方法,在APK Downloader网站下载对应的APK文件进行安装。

3

Mastodon(长毛象)相关的WordPress插件

适用于Mastodon(长毛象)的WordPress插件主要有两类:
第一类,是将站点变成Fediverse中的一个节点,比如ActivityPub、Pterotype。
特点是,有独立的ID(比如 @canglang ),可以跨站关注等,相当于一个独立的实例。优点是,功能丰富,使用站点域名。
第二类,是自动将文章发布到Mastodon,比如Mastodon Autopost, Share on Mastodon。
优点是,完成设置后,文章自动发布到Mastodon。

ActivityPub

活跃安装用户500+
为WordPress增加ActivityPub协议,等于是将博客站点变成Fediverse中的一个节点,提供的功能包括个人资料页、自定义链接、关注、分享、接受评论等功能。
如果站点使用二级域名,需要进行一下适应性修改,见 What if you are running your blog in a subdirectory?

缺点是,站点的ID与个人使用的Mastodon账户不能融合,发布文章需要手动再转发到个人账户上。
安装很简单,在WordPress后台的安装插件界面搜索“ActivityPub”,选择安装,安装完毕再激活即可。
安装后,在WordPress后台的设置中出现ActivityPub页面,可以自定义文章输出的内容(标题、全文或摘要,标签,长链接或短链接),格式,输出类型(文章、页面、媒体),标签设置(替换和链接),HTML标记白名单等。

在WordPress后台的个人资料页面下方,增加“Fediverse”内容,写明了Fediverse ID信息,在长毛象等平台可以通过该ID搜索和关注。

同时,WordPress后台用户选项卡下方也会增加"Followers(Fediverse)"页

Mastodon Autopost

活跃安装用户500+
自动将文章发布到Mastondon,自称“即用即忘”!
这个类型里面,这个插件的安装数量最多,可惜已经3年没有更新过了,与目前版本的WordPress版本兼容性未知。

Mastalab comments

活跃安装用户小于10
显示特定Mastodon链接相关的评论。
功能很有特色,可惜已经两年没有更新了,兼容性未知。

后记

以上插件,我只安装了ActivityPub,其它插件都存在长期为更新或安装数量过少的问题。

5

继续折腾:WriteFreely页面调整

前言
仔细读了下官网上面的指南,里面还是有些重要的说明。
另外,通过修改CSS设置字体、颜色等内容,把家徒四壁的界面“刷了个油漆”。
最后,历尽千辛万苦,终于把SSL证书搞定了。

文章写作须知

文章折叠的方法,加入标记 <!--more-->

RSS
WriteFreely自动生成RSS,形式为“域名+/feed/”
例如,http://canglang.me/feed/
对于标签hashtags也有对应的RSS,形式为“域名+/tag:标签+/feed/”
比如, blog.writefreely.org/tag:writefreely/feed/

加标签
文章中,可以通过’#’号的形式,增加标签,比如
系统会自动生成并链接同一标签文章的聚合页面。

提醒功能
可以通过 @canglang 在文章中提醒ActivityPub平台中的用户。

静态页面
通过PIN将文章设置静态页(比如About me)。

优化页面

通过Customize页内的Custom CSS加入。
字体部分,采用这篇文章推荐的方案

font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;

字号部分,参考这篇文章,设置为30,26,20,18,16,14

配色方面,参考https://flatuicolors.com/palette/cn

整体来说,弄得还是比较业余,很多地方弄不明白为什么无效,抛砖引玉吧。
另外,在Custom CSS中可以加入Javascript语句,多用户版没有试过,不知道会不会有风险。

/* Entire page background */
body {
    background-color: #f1f2f6;
    font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
}
body p {
    font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
    font-size: 14px;
    line-height: 2em;
    color: #747d8c;
}
body h1 {
    font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
    font-size: 26px;
    line-height: 2em;
    color: #57606f;
}
body h2 {
    font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
    font-size: 20px;
    line-height: 2em;
    color: #57606f;
}

body h3 {
    font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
    font-size: 18px;
    line-height: 2em;
    color: #57606f;
}

/* Blog header on index and post pages */
#blog-title a {
    color: #57606f;
}
#blog-title a:hover {
    color: #a4b0be;
}
/*访问过的链接*/
#blog-title a:visited {
    color: #57606f;
}

/* Post titles on blog index */
.post-title {
    color: #57606f;
    font-size: 20px;
}
.post-title a.u-url:link, .post-title a.u-url:visited .post-title a.u-url:hover {
    color: #57606f;
    text-decoration: none;
}

/* "Read more..." links */
a{
    font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
}
#read-more a:hover{
    color: #57606f;
    text-decoration: none;
}
#read-more a:visited{
    color: #747d8c;
}

/* Links inside blog posts */
article p a {
    font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
    color:#5352ed;
    text-decoration: none;
}
article p a:hover {
    color: #70a1ff;
    text-decoration: none;
}
article p a:visited {
    color:#5352ed;
    text-decoration: none;
}
article code {
    font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
}
time {
    font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
    font-size: 14px;
    line-height: 1.5em;
    color: #747d8c;
}

后记

野生选手,CSS改起来真的是糊里糊涂。
最坑的是给站点加SSL,certbot加完就出现“重定向次数过多”,怎么都搞不定。最终,收到到cloadflare生成免费证书,再收到添加到nginx上面,终于……

4

折腾记: WriteFreely 搭建

前言
买了空间之后,已经先后使用过wordpress和Halo,这次又耐不住寂寞,使用#WriteFreely 建立这个博客,主要参考 Salt《去中心化博客 WriteFreely 搭建指南
不同之处,建立的是单用户版本,数据库使用SQLite。


环境

CentOS 7
磁盘空间20G
内存1G
writefreely_0.12.0_linux_amd64.tar.gz

安装WriteFreely

下载到主机

wget https://github.com/writeas/writefreely/releases/download/v0.12.0/writefreely_0.12.0_linux_amd64.tar.gz

解压到/home目录下,解压的位置如果修改,后面配置过程中需要一并调整

tar xvzf writefreely_0.12.0_linux_amd64.tar.gz -C /home

安装Ngnix

添加 Nginx 源

sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

安装 Nginx
sudo yum install -y nginx
启动 Nginx
sudo systemctl start nginx.service
设置开机自启 Nginx
sudo systemctl enable nginx.service

配置WriteFreely

在解压后文件在/home/writefreely下,进入该目录,执行命令进行配置
./writefreely --config

Server setup

选择Production, behind reverse proxy模式,后面需要安装Nginx;
Local port: 8080 这个端口后面配置Nginx需要用到;

Database setup

数据库选择SQLite
Filename: xxx.db 数据库名字建议改一下

App setup

选择 Single user blog 即单用户版本
Admin usename: 用户名
Admin password: 密码
Blog name: 博客名词
Public URL: http://canglang.me 你的域名写在这里
federation 是否通过ActivityPub接入联邦宇宙,接入的话选择Enabled
stats 是否通过NodeInfo公开展示用户情况,不公开选择Private
meta 没弄明白,选择了Public

初始化

./writefreely --init-db
./writefreely --gen-keys

配置服务

sudo nano /etc/systemd/system/writefreely.service

写入内容

[Unit]
Description=Write Freely Instance
After=syslog.target network.target

[Service]
Type=simple
StandardOutput=syslog
StandardError=syslog
WorkingDirectory=/home/writefreely
ExecStart=/home/writefreely/writefreely
Restart=always

[Install]
WantedBy=multi-user.target

其中,WorkingDirectory和ExecStart需要根据实际解压的位置进行修改

设置开机启动

systemctl daemon-reload #执行需要root授权
sudo systemctl start writefreely
sudo systemctl enable writefreely

配置Nginx

sudo nano /etc/nginx/conf.d/writefreely.conf

写入内容

server {
    listen 80;
    listen [::]:80;

    server_name canglang.me;

    gzip on;
    gzip_types
      application/javascript
      application/x-javascript
      application/json
      application/rss+xml
      application/xml
      image/svg+xml
      image/x-icon
      application/vnd.ms-fontobject
      application/font-sfnt
      text/css
      text/plain;
    gzip_min_length 256;
    gzip_comp_level 5;
    gzip_http_version 1.1;
    gzip_vary on;

    location ~ ^/.well-known/(webfinger|nodeinfo|host-meta) {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect off;
    }

    location ~ ^/(css|img|js|fonts)/ {
        root /home/writefreely/static;
        # Optionally cache these files in the browser:
        # expires 12M;
    }

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect off;
    }
}

其中 server_name和root /home/writefreely/static需要根据实际进行修改。

然后,配置 SSL 证书,就不写了,攻略很多,自行搜索吧。

检查配置是否有误
sudo nginx -t

重载 Nginx 配置
sudo nginx -s reload


至此配置完成,如果一切顺利,打开域名就能见到主页了。
现在又改回wordpress(捂脸

1