阳光烂灿的日子

--记录所有碎碎念

个人微博statusnet折腾小记

| Comments

在两三年前还有大把人折腾独立博客,而如今移动互联网大潮之下却没啥人折腾独立微博了,沟通的紧密性,赢者通吃,业界趋于垄断,自由的精神为之远去,Aaron Swartz绝望到要自杀。

前言说完,叫微博也好,叫推特也好,这类短信息服务的确要多人才玩得转,不多说,statusnet是为数不多比较好用的开源服务,但它的文档其实太少了,起码中文的没多少。但由statusnet支持起来的站点还是挺多的,比如 http://identi.ca

准备条件:statusnet的环境要求,VPS一枚,域名一枚,数据库一枚,我搭建的环境是nginx+mysql+php5。php要有Curl,XMLWriter,GD,mbstring等模块。

首先去status.net官网下载稳定版本 http://status.net/download

然后解压到服务器目录下,一般为 /var/www/statusnet 目录。之后打开目录下的INSTALL文件,上面有安装指南,照着做吧。

重点在于生成数据库,把域名指向/vaar/www/statusnet目录。之后便可以在浏览器中http://yourserver.example.com/statusnet/install.php页面进行设置。

在statusnet目录下的config.php起码像是下面的内容,

$config['site']['name'] = '域名';

$config[‘site’][‘server’] = ‘域名’;
$config[‘site’][‘path’] = false;
$config[‘site’][‘fancy’] = true;
$config[‘site’][‘theme’]=’micromic’;
$config[‘site’][‘language’]=’zh_CN’;
//$config[‘site’][‘logfile’]=’/tmp/statusnet.log’;
$config[‘db’][‘database’] = ‘mysqli://数据库用户名:密码@127.0.0.1/数据库名’;
$config[‘db’][‘type’] = ‘mysql’;
$config[‘site’][‘profile’] = ‘public’;

基本上完成以上操作,statusnet就可以正常跑起来了。

打开SSL连接
嗯,来点高级货吧,去startssl.com申请个证书吧,方法请自行Google。给域名申请好证书并在nginx设置完后,理论上直接去statusnet的后台设置ssl连接为alway即可。但起码用着 statusnet 1.1.0版本有个不明显的bug,即如果要它打开ssl,则会检测一个$HTTPS的变量,用户如果没有设置,则登录那里会导致死循环,我就吃了两次亏,最后靠一个专家来帮我排除掉这个问题。
好吧,列一下nginx里的一个设置

server {

listen 443; ## listen for ipv4
ssl on;

//startssl申请回来的证书和密钥
ssl_certificate /var/www/statusnet/ssl.crt;
ssl_certificate_key /var/www/statusnet/ssl.key;

server_name 域名;
access_log /var/log/nginx/t_linuxapp.access.log;
root /var/www/statusnet;
index index.php;
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
fastcgi_param HTTPS on; //这个变量很重要啊
include fastcgi_params;
}
location / {
try_files $uri $uri/ @laconica;
}
location @laconica {
rewrite ^(.+)$ /index.php?p=$1 last;
}

}

一点提醒,证书折腾最好一开始就做,我是后来才折腾,装好证书后发现浏览器的证书锁提示有警告,站里有http的连接,因为一开始保存的一些数据是直接http的,之后它们就进数据库了。如果要转换,得进数据库操作了,还好那天专家有空,帮我搞定了,绿色的锁,安全认证。

开启TwitterBridge插件 毕竟是个人微薄,一个人玩肯定无聊,因此肯定是想分享到别的网站上的,所以这个插件就是用来跟Twitter交互的。但因为Twitter全站SSL了,开启这个插件就要求PHP的SSL支持了,并且Curl也要有SSL支持。为了这两项,我可编译了PHP源码几次啊。

下面的工作请自备梯子。
准备功夫,去developer.twitter.com申请一个应用程序吧。取得相应consumer_key和consumer_secret,在config.php里添加如下内容:

$config['site']['ssl'] = 'alway'; //上面打开ssl时添加,但其实没用,在设置面板设置的时候,选项是写进数据库表的

addPlugin(‘TwitterBridge’,
array(
‘consumer_key’ => ‘EgASKsNxxxxxxxxxxx’,
‘consumer_secret’ => ‘xTHILfYW4b43kTMQxxxxxxxxxxxxxxxxxxxxx

)
);

如此在设置面板就有相应Twitter的选项,在自己用户的设置里点击Twitter,然后连接账号,跳转到授权那,理论上能把statusnet发的信息同步到Twitter上了。

之所以是理论是因为还有重要的一步没做,启动后台进程。在scripts目录下有个startdaemons.sh脚本,它会帮你启动一个叫queuedaemon.php的脚本程序。有了它才能帮你同步信息到Twitter上。理论上各个站点的statusnet开启了OStatus插件的话,是可以互相follow的。目前我只和http://identi.ca/做过一些实验,却只有明确 @用户 的信息才能同步过来。即我自己站点follow了identi.ca的一个用户,平时并不能收到他的信息流,如果他明确@你,则能收到。怀疑identi.ca限制了一些东西。

同步Twitter信息流 好吧,上面这个功能是最期待的,我一直以为还未开发出来,因为在identi.ca里找了半天也没这个选项。最后还是在TwitterBridge的README里找到了英文描述。#不读README而盲目去网上搜索的人伤不起啊
在这里,我明确地说,1.1.0的statusnet是支持把Twitter上好友的信息流同步回来的。那么,这个就相当于翻墙Twitter外挂了啊。嗯,因此前面折腾SSL是必要的。不然同步一下子就被防火墙干掉你的域名.

前面已经设置好TwitterBridge的话,只需要在config.php再添加

$config['twitterimport']['enabled']=true;
$config['admin']['panels'][] = 'twitter';
那么,在用户的设置面板的Twitter选项则会多出一个 “导入我好友的时间线” 的设置,把它选上吧。最后,去到 /var/www/statusnet/plugins/TwitterBridge/daemons目录,手工开启同步脚本
php twitterstatusfetcher.php
理论上这个脚本应该会被前面的startdaemons.sh脚本所带起来,但我的站点并没有,因此只能手工开启。

PS.以上操作可能遇到一些php脚本错误问题,请自行搜索解决,这不是教程,只是备注.切记!

statusnet的API路径一般为 https://你的域名/API/ , Android下可用seesmic来连接

最后无图无真相: QQ20130117-6

Comments