October 23rd, 2013
Github建站系列教程

基于PHP的Windows Writer服务提供器--介绍中介绍了系统的运行机制,本文将引导读者一步步部署并使用。首先,假设您已经完成了github博客的搭建工作,并理解基本的博客维护方式以及jekyll的基本原理和使用方法。

部署本地的PHP站点

PHP项目的主页地址:https://github.com/PChou/xmlrpc4ww

用您自己的帐户登录github,在浏览器中键入上述地址,点击页面右上方的Fork。Fork的意思是将这个项目复制到您自己的代码仓库中,您就可以自由的修改编辑了,还能在需要的时候对原代码仓库贡献代码,或者同步原代码仓库的变化。

将Fork出来的仓库clone到本地,,这地址应该像下面这样:

git clone https://github.com/{yourusername}/xmlrpc4ww.git

项目目录中的文件结构如下(省略无关紧要的文件)


/xmlrpc4ww
  |--content //存放js和css
  |--db
      |--blog //文本数据库
           |--__blogs.txt //数据文件模板
           |--blogs.txt //数据文件
  |--txtdb  //文本数据库支持库
  |--xmlrpc //xmlrpc api支持库
  |--__config.php   //配置文件模板
  |--post.php       //文章发布页面
  |--postlist.php   //文章列表页面
  |--server.php     //writer服务提供页面和文章列表入口
  |--util2.php      //支持方法

__config.php在同一目录复制一份,取名为config.php,修改config.php:

define("LOCALPATH", "D:\\Project\\Git\\NRemedy");    \\本地github page项目所在目录,注意双斜杠
define("IMGPATH", "assert\\img");        \\图片的相对路径,此处就表示我的博客的图片规划在D:\Project\Git\NRemedy\assert\img下,注意双斜杠
define("IMGPATH2", "/assert/img/");        \\图片的url相对路径,与上面应对应,但注意斜杠的方向

define("DEFAULT_LAYOUT", "postlayout");         \\每个post的jekyll模板使用的默认的layout名称,配置这个后可以简化将来发布填写的东西

define("BLOGNAME", "ghpage");          \\blog名称,可以不作修改
define("BLOGID","67322");          \\blogid,可以不作修改
define("BLOGURL","");            \\blog地址,不要修改,保持fakelocalhost

注意:上面的前三项务必配置准确,否则将无法正常使用

删除db/blog/blogs.txt,将__blogs.txt重命名为blogs.txt。原先的blogs.txt是我的文章数据库,您需要的是空的数据库文件,所以从__blogs.txt这个空的数据文件模板开始,完成之后您的目录结构将是这样:


/xmlrpc4ww
  |--content //存放js和css
  |--db
      |--blogs  //文本数据库
           |--blogs.txt //空数据文件
  |--txtdb  //文本数据库支持库
  |--xmlrpc //xmlrpc api支持库
  |--config.php     //配置文件模板
  |--post.php       //文章发布页面
  |--postlist.php   //文章列表页面
  |--server.php     //writer服务提供页面和文章列表入口
  |--util2.php      //支持方法

接下来要做的是配置一个php运行环境,如果您已经配置过php环境,那么恭喜你,可以跳过这个步骤了。下载并安装php环境,读者可参考http://www.cnblogs.com/zengxiangzhan/archive/2010/03/05/1679286.html

在IIS中创建一个站点,指向xmlrpc4ww,启动该网站,并用浏览器访问http://localhost{:port}/server.php,看到如下页面说明php站点部署完毕(请注意,您的端口可能与我不同)

配置Windows Writer

点击“添加日志帐户”,选择“其他服务”

按照下图输入日志网址,注意,你本机的PHP站点的端口可能与我不同,用户名和密码随便填,无所谓,暂时不要记住密码

点击“下一步”,按下图填写,注意这里的远程发布网址是关键点,必须填写正确,还是一样,请注意您本机的端口可能与我不同

点击“下一步”,windows writer会开始检测服务端设置

最后会成功提示如下,可以点击Yes,发布一个测试日志,如下图。至此Writer和PHP站点打通了

将来发布日志的时候请选择ghpage发布

将日志发布到本地的gh-page

用浏览器访问http://localhost{:port}/server.php,应该看到多出一条记录,这条记录就是刚刚发布的临时日志。点击“编辑和发布”,显示类似下面的页面

我们知道基于jekyll的post都应该有如下开头:

---
layout: postlayout
title: Hello GitHub!
description: 该博客的开篇之文
thumbimg: 1346208288725.jpg
categories: [life]
tags: [github-page, jekyll]
---

其中layout、title、categories、tags是jekyll默认支持的变量, 而且categories和tags有特定的格式。用户也可以自定义变量,可以在jekyll的post对象中获得这些变量。上面的description和thumnimg都是我自定义的变量,分别用于显示摘要和首页缩略图。

与之对应的,上面的页面就是用来配置这些变量的。

  • 文件名是自动生成的,如果要修改的话请保持jekyll的日期规则,而且点击“保存并生成”后尽量不要再修改,否则,会生成两个日志;
  • 标题来源于Writer中的标题,不能修改,只能由Writer发布上来;
  • layout的默认值来源与上面对PHP部署时的基础配置,应该修改成你希望的layout文件名;
  • 分类和标签,请自行添加,但要符合jekyll规则

如果您的变量与我不同的话,需要自己修改php代码和数据库文件来支持。如果您希望修改的话,请将你fork的仓库地址发在下面的留言板里面,我可能考虑帮你修改。当然也许将来的版本我会发布一个可配置的版本

配置完成后,点击“保存并生成”,如果显示“成功”的话,恭喜您,文章已经在您本地的git仓库中拉。

接下来您可以用本地的jekyll测试和发布你刚刚发布的文章,具体可以参考一步步在GitHub上创建博客主页(4)以及相关的系列文章

让我们来查看一下/xmlprc4ww/db/blogs.txt,此时,该文件应该已经包含了刚刚发布的日志以及post变量的配置等。顺便说一下,这个文件就是blogs的数据库文件,将来Writer从PHP站点获取或者写入的日志内容都将存放在这个文件中。 该文件除了前三行外,其他行都是数据,每一行由多个字段组成,每个字段用”#“区隔,详见:http://www.c-worker.ch/txtdbapi/index.php

编辑修改文章

如果您的文章已经从Writer发布到PHP站点,甚至是发布到了github,但是此时需要修改一下,怎么办呢?很简单,您只需要在Writer中打开需要修改的文章,编辑好之后,点击发布,循环上面的步骤就可以了。

您可能会发现再次打开后图片无法正常显示,这没关系,如果这导致Writer崩溃的话,请下载最新的Writer客户端;另外如果文章有图片的话在发布前请将图片“格式”设置成“链接至无”,否则会有两张图片上传到服务端

如果您只是用上面配置好的机器来编写博客的话,至此就足够了,下面介绍多客户端该怎么协同编辑。

多客户端编辑

也许读者已经猜到了,没错,只要将xmlrpc4ww这个项目也push到github的仓库就可以了!上文提到,xmlprc4ww/db/blogs.txt保存了文章的内容,该内容是与本地Writer的内容同步的,于是只要将这个文件push到github上,然后在另外一台机器上pull过来,并且重复一次配置工作(包括站点配置、writer配置)就可以获得文章内容了。而在Writer的客户端上只要点击“打开最近使用过的日志”就可以从“另一个服务端”上获取文章内容了:

特别需要注意的是,您PC2上的日志仓库可能与PC1不同,在配置PHP站点的时候需要特别留意

删除文章

xmlrpc4ww没有实现删除的功能,您可能需要手动完成,除了把github page所在的仓库中的日志文件和对应图片删除外,还需要删除xmlprc4ww/db/blogs.txt中的对应记录行。

本文详细介绍了xmlrpc4ww这个工具的使用方法,如果读者有任何问题,可以给我发邮件或者在下面留言,您的意见或建议是完善这个工具重要的途径,当然您也可以帮忙共享您的代码,发扬开源精神。


1块2块也是钱,小额赞助