9

原文地址:http://www.l4zy.com/posts/new...

好久没有更新 Logecho 了,最近把它狠狠地更新了一次。

关于 Logecho 的基本介绍,大家可以去看我之前写的一篇文章。目前你看到的这个站点也是用 Logecho 搭建的。相比于 Typecho 我个人还比较习惯于使用这类静态博客工具来发布我的文章,因为我已经习惯于在编辑器里来写各类文字,感觉也很舒服。

screen-shot

<!--more-->

但是各类静态博客工具的部署很麻烦,要不然需要你自己去配置一台http服务器。或者放到github这类的网站上,还需要你熟悉git命令。对于一个懒人来讲,我是无法容忍这些繁冗的动作的。于是,我对 Logecho做 了一些调整,让你我可以舒心的撰写文字,不必再去搞那些幺蛾子。

Logecho现在的安装步骤

首先最大的优化就是我让 Logecho 支持了composer,所以你不需要再去手动配置代码即可随时使用或者更新这一工具了。如果你已经安装过了composer并且配置好了的话,可以直接跳到第三步。

第一步,安装composer

安装起来非常简单,如果你没有安装composer,在macosx下可以用brew安装

brew install composer

第二步,配置composer的bin目录

然后我们需要把composer的bin路径加入到系统路径里,在Linux或者OSX上打开bash配置文件(应该是~/.bashrc或者~/.bash_profile之类,不同的系统各不相同),加入

export PATH="$PATH:~/.composer/vendor/bin"

加入完以后记得source一下配置文件,或者重新启动一个会话让配置生效

如果是Windows系统,需要到系统变量里把这个路径加到Path变量里,一般是C:\Users\<COMPUTER NAME>\AppData\Roaming\Composer\vendor\bin,你也可以参考这里

在各大Linux下的官方源里也已经集成进去了,直接安装就行。其它操作系统参考官方文档

第三步,安装Logecho

安装完composer后,再安装Logecho即可

composer global require joyqi/logecho:*

好了,所有的步骤都已完成,你可以直接在命令行下输入logecho命令来使用这一工具了。具体使用方法参考我写的前一篇介绍,如果你想升级直接执行上方的命令即可。

Logecho Simple Server

好了,上面只是对一些历史问题的纠正,这让你使用起来更加方便,但是真正称为杀手级应用的是标题中所说的“Logecho Simple Server”。

特点

这也是我刚刚写的一个小的 node.js 程序,它是除了是一个迷你的web服务器以外,还具有如下特点

一个完整的服务器

是的,虽然它很小,但是它的的确确是一个完整的服务器,你可以放心地把它部署到生产环境中而不需要其它服务器软件的辅助。当然如果你服务器还运行了其它诸如 nginx,apache 之类的服务器,你也可以把它放到后端,然后做一个反向代理。

部署方便

安装只需要一行命令(前提是你地服务器上已经安装了 node.js 环境)

npm install -g logecho-simple-server

没有配置文件

是的,我个人很讨厌配置文件。既然这个服务器名字里带了一个Simple,那么就不应该有配置文件这么复杂的东西存在。所以所有的配置都通过参数完成,而且它的参数也不多,大多数工作它都替你智能完成了。

速度快

这个服务器不需要任何文件系统的支持,因为所有的数据都存储在内存中。你可能担心那内存不是要被撑爆了,其实不会。因为这个它是设计给单人使用的,这就决定了它的容量不会很大,根据我们的测算一个人的数据大概也就在几兆到几十兆之间,这是完全可以接受的。

而它带来的好处是巨大的,首先是速度快,没有任何磁盘 IO 让它可以以非常快的速度响应,并且支撑相当恐怖的访问量。其次,你可以把它部署在任何支持 node.js 的云服务上,而不用担心它的数据如何存储。

针对 http 协议,我也做了优化,所有的资源文件都会设置缓存的http header。并且根据客户端的支持情况,以压缩的方式发送出去。

专门为 Logecho 设计

是的,这才是重点。一款专门为 Logecho 设计的服务器,想要同步文件只需要打开本地博客目录中的config.yaml文件,找到sync:这一行,把它改为如下这种

sync: http://xxxxxxxxxxxxxxxxx@your-domain.com

其中xxxxxxxxxxxxxxxxx是密钥,用来验证你是否是这台服务器的主人,服务端和客户端的要一致。配置正确以后,每次想同步的时候执行一下命令即可

logecho sync blog-dir/

使用

用上面所说的一行命令,在你的服务器上安装好以后,就可以很方便的来使用了。装好后你的服务器上会多一个名为 logechod 的命令,我们就用它来启动服务。

$ logechod
2015-03-24T14:26:35.492Z - info: The secure key is: 2369097d-c761-4fbb-93a1-d375e7cea5fa
2015-03-24T14:26:35.493Z - info: Listening on 0.0.0.0:80

如果你没有运行其它的http服务的话,直接运行这个命令,服务器就会启动了。你会看到上面的信息,比如它会告诉你监听地址,以及密钥。这个密钥是随机生成的,每次运行都会不一样,如果你想固定的话可以使用-k参数手动指定。

这个时候在浏览器里访问你的服务器,会看到如下画面

503

这是因为你还没有往服务器里同步任何数据,用上面的同步命令同步以后就可以看到内容了。下面是一些常用参数

  • -k 指定密钥,如不指定则会随机生成
  • -h 指定监听地址,如127.0.0.1,默认0.0.0.0
  • -p 指定监听端口,默认 80
  • --prefer-host= 指定最佳域名,服务器会默认把不属于这个域名的请求跳转到指定域名上
  • --ip-address= 指定获取客户端ip的header头,如果不指定服务器会把连接的ip作为地址,但是如果你把服务器放在某些反向代理的后面,那就需要传递一个header头过来告诉它真正的ip地址是多少
  • --http-to-https= 只有当启用https访问的时候才会生效,监听一个指定的http端口,从而将http的访问请求重定向到https上
  • --https-key= https的密钥
  • --https-cert= https的证书
  • --perform-resource=yes 是否开启资源优化模式,默认开启。

关于资源优化模式

这是一个很好用的功能,所以我默认把它开启了。它会深度分析你的所有资源文件,首先计算它们各自的hash值,并建立索引。然后再找出它们之间的引用关系,最后利用上面索引过的hash值给他们的url后面加上戳记,什么意思呢?比如下面的html文件

<!DOCTYPE html>
<head>
    <link rel="stylesheet" href="/public/style.css">

服务器会找到/public/style.css这个文件并获取它的hash值,然后再将它标记回原来的html文件中

<!DOCTYPE html>
<head>
    <link rel="stylesheet" href="/public/style.css?h=3edf78062f814108a95ab9e4587c471f">

这样有什么用呢?上面说过,服务器会自动给所有的资源文件都加上缓存的http header,如果是以前的写法,下次你改变了这个文件,浏览器还是会从缓存文件中去取。因为它的url没有改变,但如果按上述方法处理,每次修改都必然带来hash值的改变,那么浏览器就会强行更新这个文件的缓存了。

目前资源优化模式会对html和css文件起作用。

写在最后

这个系统肯定还有很多 bug 未解决,欢迎大家跟我探讨。另外这个系统是使用英文书写,由于水平有限,很多用词都属于Chinglish,欢迎有这方面基础的童鞋来提交pull request帮忙完善。


joyqi
16.2k 声望2.3k 粉丝

我的生涯一片无悔,想起那天夕阳下的奔跑,那是我逝去的青春