VPS記錄(6)

本來想自己架一個mail服務器的,後來忽然想到Google自己就提供免費的小型企業服務,其中就包括郵箱,於是就註冊了個Google App……

注意:是Google Apps,不是Google Apps for Business,後者要收費的。

首先來這裡註冊:http://www.google.com/apps/intl/zh-CN/group/index.html,然後要驗證域名,又兩種方法,一種是增加一個給定的隨機CNAME子域,一個是在你的域名下上傳一個指定的html文件,我就添加了一個CNAME子域,指向google.com。

裏面的内容都是中文的,按照提示來就是了,網上教程也有很多,都沒有什麽困難。

比較鬱悶的就是web登陸,默認的管理地址是https://sites.google.com/a/netson-cn.net, 郵件地址是https://mail.google.com/a/netson-cn.net,我想把它分別改爲sites.netson-cn.net和mail.netson-cn.net,按照Google的説明都改好了,可是還不行……我還以爲是改域名的滯後性,不過之前改A記錄和驗證域名的CNAME記錄都是很快地生效的阿,晚上回家的時候,死馬儅活馬騎,開了全局代理再試一次——行了!原來ghs.google.com被墻了……

搜了一下網上的解決方案,都沒有啥一勞永逸的做法,反正我也不怎麽web登錄,那就不管了,就這麽着吧……

所以,我現在的郵件地址是:netson(at)netson-cn.net。

Tags: , , ,

悲哀

今天是三聚氰胺結石寶寶維權人士趙連海上訴限期的最後一天,我不知道他有沒有上訴成功。

趙連海從判刑那天開始絕食,之後沒幾天看守所就禁止他的律師、親戚、朋友與他見面。現在已經是趙連海絕食的第十天。而從上周後期開始,他的兩個律師都被軟禁直到今天——上訴期限到期,他的妻子李雪梅也和外界失去聯係。他的傢被監視。他的所有有公職的親屬全部被停職回家“勸雪梅”。

今天律師們去看守所嘗試會見趙連海,等來的是一張紙條:

我声明:就我本人一案现解除与律师李方平、彭剑的辩护代理关系。

声明人:赵连海2010年11月17日

之後律師們終于見到了李雪梅,李雪梅也給他們出示了一張紙條:

家属声明:解除和律师彭剑、李方平的委托关系。

家属:李雪梅2010年11月22日

BBC中文網的報道說:

至于赵连海的纸条是否赵本人所写,以及是在什么情况下所写,李方平表示因为未见到赵连海本人而不好猜测。

对于李雪梅的声明是出于自愿还是迫于某种压力而写,李方平说,他没有就此询问李雪梅,因为他清楚李的处境。

今天《南方周末》發了篇文章《结石宝宝父亲赵连海律师被解除委托》,就我看來已經寫得相當委婉克制,不過它在南方周末官網上還是只存在了不到2個小時。

轉載全文如下:

结石宝宝父亲赵连海的两名律师11月22日被解除委托,而22日也是上诉期限的最后一日。

今日(11月22日),结石宝宝父亲赵连海的两名律师被解除委托。赵的律师彭剑和李方平表示,赵的妻子李雪梅通知他们已被解除与赵连海的辩护代理关系。

据悉,22日也是上诉期限的最后一日。

此前,据文汇报援引新华社香港21日电,2010年11月10日,被告人赵连海因犯寻衅滋事罪被北京市大兴区人民法院一审判处有期徒刑2年6个月。

代理律师彭剑通过微博表示,自己获悉的通知内容是:

一)我声明:就我本人一案现解除与律师李方平、彭剑的辩护代理关系。

声明人:赵连海2010年11月17日

二)家属声明:解除和律师彭剑、李方平的委托关系。

家属:李雪梅2010年11月22日

故赵连海案代理终结

据财经网报道,赵连海,1972年生,北京市民,住大兴区团和农场。曾在电视台,国家工商总局的广告公司,国家质检总局的《中国质量报》等多家媒体工作过 多年,其子是“结石宝宝”之一。

2008年9月,国内媒体曝光了三聚氰胺毒牛奶新闻,受三聚氰胺污染的奶粉导致中国30万婴儿患病,超过5万患儿入院治疗,至少六名儿童死亡。与众多婴儿 一样,赵连海的儿子也被查出患有肾结石,他拒绝接受既定的赔偿方案,转而寻求民事诉讼。同时,他创办了 “结石宝宝之家”网站,联络公布了数百名受害者及家属资料,为患儿家长提供信息和资源。

上述新华社报道称,2008年10月至2009年9月间,赵连海在其子已治愈结石的情况下,仍利用这一问题,先后组织、煽动、纠集一些人在北京市大兴区、 丰台区、东城区及河北省石家庄市,采取呼喊口号、非法聚集等方式起哄闹事,严重扰乱上述地区的社会秩序。

2009年8月4日,赵连海借其他事由组织(编者注:即安徽籍女青年李蕊蕊在丰台区聚源宾馆被强奸一事,《南方周末》对此曾有报道:《灰屋里的噩梦 聚源宾馆强暴事件调查》)、煽动一些人到北京市公安机关门前进行滋事,致使交通堵塞。

北京市大兴区人民法院经审理认定,赵连海无视国法,纠集多人在公共场所起哄闹事,造成公共秩序严重混乱,犯罪事实清楚,证据确实、充分,其行为已构成寻衅 滋事罪。

据22日出版的《财经》报道,一审宣判当天,赵连海在法庭上称自己无罪,其代理律师李方平则表示判决量刑过重。此前,李方平等辩护律师为赵 连海作了无罪辩护。

李方平认为,赵连海的活动是毒奶粉受害者正常的维权活动,不存在任何流氓动机,而且其行为方式和手段根本没有扰乱公共场所秩序,没有造成公共场所秩序严重 混乱,应依法宣告赵连海无罪。

大兴区法院最后认为赵连海及其辩护人的辩护意见,缺乏证据支持,且与法院确认的证据所证明的事实不符,未予采纳。

李方平还认为,本案审理已经远远超过了法律规定的期限,存在严重超期羁押问题。2009年11月13日,赵连海因涉嫌寻衅滋事罪被刑事拘留。12月17 日,北京市大兴区人民检察院批准逮捕。2010年3月30日,北京市大兴法院采取不公开方式开庭审理赵作海案,但一直未宣判。

11月18日,代理律师就此案正式上诉。

中国政法大学教授王建勋撰文指出,大兴区人民法院的判决书中未回答“什么样的行为算是‘煽动纠集’?什么又是‘非法聚集’?赵的诉苦行为如 何‘严重扰乱了社会秩序’”等疑问。

王建勋还写到,“从程序上讲,该案的审理也存在不妥之处。比如,2010年3月30日大兴区法院曾“不公开”开庭审理此案,连赵的妻儿都未被允许旁听,理 由是“涉及个人隐私”。被诉扰乱“公共”秩序及“寻衅滋事罪”,与“个人隐私”挂钩,不啻为一种创举。”

此前2010年2月5日,广东省潮州市中院以敲诈勒索罪二审判决另一名结石宝宝父亲郭利有期徒刑五年。近日,郭利案出现转机,广东省高院指令潮州市中院对 此案再审。

我的wordpress插件

按名字的字母序排列。

Akismet 作者:Automattic插件主页。這個是Wordpress自帶的插件,用來防止垃圾評論。

Better Extended Live Archives 作者:Charles插件主页。是Extended Live Archives的修正版,Extended Live Archives已經停止更新了,不支持更高級的Wordpress版本。主要功能是提供一個人性化的AJAX歸檔頁面。

CodeColorer 作者:Dmytro Shteflyuk插件主页。代碼顔色高亮和縮進、顯示行號插件,是支持語言最多的插件。不過只能在HTML模式下編輯,否則格式會有很大問題。

cos_slug_translator 作者:jiangdong插件主页。將固定連接裏面的標題裏面的中文用Google翻譯翻譯成英文,如果連接不上Google翻譯,那麽會翻譯成拼音。

MobilePress 作者:Aduity插件主页。提供一個便擕設備版的主題,並且自動識別便擕設備。

No Self Pings 作者:Michael D. Adams插件主页。自己引用自己的時候,不發送引用通知。

WP-DBManager 作者:Lester ‘GaMerZ’ Chan插件主页。數據庫管理、備份插件……

WP-PostViews 作者:Lester ‘GaMerZ’ Chan插件主页。顯示文章瀏覽次數的插件。

WP Kit CN 作者:Charles Tang插件主页。顯示隨機文章、中文截斷擴展、最新留言等。

WP Page Numbers 作者:Jens Törnell插件主页。在分頁的地方顯示數字頁碼。

Tags: , ,

30嵗的黑洞

昨天就在Twitter上風傳,說NASA即將公佈一個“足以震驚全人類”的消息,於是大家紛紛猜測是2010還是外星人,雖然很快就有人發現NASA官方預測網頁上並沒有這個“震驚全人類”的定語,然後也從將要記者會的專家名單上發現只有物理專家沒有生物專家而認爲發現外星人的可能性很低,不過還是架不住大家拼命去拿外星人開玩笑……例如在某廣場上畫個圈,中間寫個“拆”- -b,又或者是火星人來上訪了……

昨晚等到12:30后發現真正開發佈會的時閒是01:30,於是果斷關機睡覺。

今天早上看到的消息是發現了一個很年輕的黑洞,而且是有史以來第一個人類親眼目睹(好吧,借助了各種工具)一個黑洞的誕生。的確是很重要的事情。人類在30年前發現了一顆超新星爆發,然後在這30年閒,人類不斷地觀測這個地方,終于證實這顆超新星爆發之後,變成了黑洞……

雖然說,這個黑洞距離我們有5千萬光年,也就是說“現在”它應該至少有5千萬歲了,不過“現在”的這個黑洞還在我們的視界之外(不過我們還沒有進入這個黑洞“現在”的這個樣子的光錐),不管它怎麽變怎麽折騰我們都不會知道,直到5千萬年之後,我們的子孫後代(如果人類還沒有滅絕的話)才會看到它“現在”的樣子……而我們現在看到的這個黑洞,是它30嵗的樣子,所以我的確可以說,這個黑洞只有30嵗……

Tags: ,

VPS紀錄(5)

這次講SSH。

架好VPN后,還是覺得不太方便,弄路由表又太麻煩,於是就決定試試SSH。

說實在的,我到現在也不是很明白SSH的原理,SSH協議太強大了……

上網一搜才發現,原來SSH這麽簡單……然後我看到了這個網頁(要翻墻,注意底下的評論),明白了兩件事:1 MyEnTunnel只是個GUI,底層還是用的putty的plink.exe  2 根據MyEnTunnel作者和那幾個網友(上述網頁的評論)的討論,plink.exe的開發版比穩定版要快很多。

既然這樣,我就決定只用plink,還省點資源。

於是我把plink.exe的開發版下下來,搜了一下命令行用法,用我的VPS的root帳號做實驗,連上去了……我爲此專門寫了個bat文件。

然後我裝了個FireFox的AutoProxy插件,然後,就成功了……真是簡單啊……

於是我給我的VPS建立了一個專門用來繙墻的帳號(用root帳號翻實在是大材小用,而且很不安全),後來覺得運行plink在任務攬裏面的那個cmd窗口太討厭,最後還是下了個MyEnTunnel……

昨天我決定在我的上網本裏面也部署這個玩意。爲了節省資源,我的上網本裝的是Chrome,而不是Firefox。而AutoProxy只有Firefox版的……去了AutoProxy的官方網站看了下,裝了個叫“Proxy Switch”的插件,並且設置規則列表為http://autoproxy-gfwlist.googlecode.com/svn/trunk/gfwlist.txt,要注意的是,這個地址本身是被墻了的,所以還是要在AutoProxy裏面設置這個地址本身要用SSH代理來上(這個花了我好長時間,之前由於一直用代理,或者一直用VPN,我一直沒有覺得這個地址被墻,看到網上有這麽個説法我也不以爲然,結果最後實在沒有辦法死馬儅活馬毉了才發現真的如此) ……

嗯。我現在基本上已經感覺不到墻的存在了……

Tags: , , , , , ,

VPS記錄(4)

架好了Wordpress和奶瓶腿之後,我就開始架VPN了。參考了這篇這篇這篇文章。

前兩篇文章我是對照著做的,兩邊一樣的時候我就照做,兩邊不一樣的時候我就不做或者按我的理解看

首先,安裝openswan

1
apt-get install openswan

注意的是,我的是Debian Lenny,這樣子拿下來的openswan是有Bug的,最好還是自己編譯一個(我不確定我的有沒有,因爲我最後的確是編譯了openswan,但是問題在另外一個地方,我不知道用原來的openswan會不會有問題)

1
2
3
4
5
6
aptitude install libgmp3-dev gawk flex bison
wget http://www.openswan.org/download/openswan-2.6.24.tar.gz
tar xf openswan-2.6.24.tar.gz
cd openswan-2.6.24
make programs
make install

在make之前,要先確保系統裏面有開發環境……

然後,配置openswan,後面那篇文章更有條理一些,不同的内容分在不同的文件裏面配置,然後include起來,我開始也是這樣干的,不過後來因爲別的原因一直沒有配好,病急亂投醫,把它們合併在一個文件裏面,等到後來問題解決后就懶得弄回去了。所以我的/etc/ipsec.conf配置文件是這樣子的:(注意縮進)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
config setup
  nat_traversal=yes
  virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
  protostack=netkey

conn L2TP-PSK-NAT
  rightsubnet=vhost:%priv
  also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
  authby=secret
  pfs=no
  auto=add
  keyingtries=3
  rekey=no
  ikelifetime=8h
  keylife=1h
  type=transport
  left=173.255.214.56
  leftprotoport=17/1701
  right=%any
  rightprotoport=17/%any

include /etc/ipsec.d/no_oe.conf

要注意的是,前面那篇文章有一行oe=off,我一開始沒有加進去,發現連不上,我以爲是這裡的問題,加進去后發現更不對了,這應該也是Debian和Ubuntu的小區別吧?

而我的/etc/ipsec.d/no_oe.conf是這樣的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
conn block
  auto=ignore

conn private
  auto=ignore

conn private-or-clear
  auto=ignore

conn clear-or-private
  auto=ignore

conn clear
  auto=ignore

conn packetdefault
  auto=ignore

這個no_oe是爲了好看而已,沒有也可以的,只是在後面的檢查會有一個非OK的提示而已。

之後是編輯/etc/ipsec.secrets文件,改爲如下内容:

1
YOUR.SERVER.IP.ADDRESS   %any:  PSK "YourSharedSecret"

其中,YOUR.SERVER.IP.ADDRESS是服務器IP地址,YourSharedSecret隨便填寫,我弄了長長的一串隨機字符串。

然後運行以下命令:

1
2
3
4
5
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done

之後運行

1
ipsec verify

正常的話,會出現

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path                                 [OK]
Linux Openswan U2.6.24/K2.6.32.16-linode28 (netkey)
Checking for IPsec support in kernel                            [OK]
NETKEY detected, testing for disabled ICMP send_redirects       [OK]
NETKEY detected, testing for disabled ICMP accept_redirects     [OK]
Checking for RSA private key (/etc/ipsec.secrets)               [OK]
Checking that pluto is running                                  [OK]
Pluto listening for IKE on udp 500                              [OK]
Pluto listening for NAT-T on udp 4500                           [OK]
Two or more interfaces found, checking IP forwarding            [OK]
Checking NAT and MASQUERADEing
Checking for 'ip' command                                       [OK]
Checking for 'iptables' command                                 [OK]
Opportunistic Encryption Support                                [DISABLED]

其中,Checking for RSA private key (/etc/ipsec.secrets)可能會失敗,不過不要緊,如果實在想解決(像我一樣- -b),根據第三篇的内容(完全照搬是有問題的,不知道爲什麽,我ipsec newhostkey –help看了看,稍作修改),那麽可以按照如下操作:

1
2
3
ipsec newhostkey --output /root/tmpkey --bits 128
cat /root/tmpkey >> /etc/ipsec.secrets
rm /root/tmpkey

如果沒有做上面那個no_oe的話,還會提示一個DNS什麽的錯誤,其實也是不要緊的。

最後的Opportunistic Encryption Support也是不要緊的。

之後,就可以重啓服務了:

1
/etc/init.d/ipsec restart

然後就是安裝L2TP和ppp了。

1
apt-get install xl2tpd ppp

編輯/etc/xl2tpd/xl2tpd.conf如下:

1
2
3
4
5
6
7
8
9
10
11
12
[global]
ipsec saref = yes

[lns default]
ip range = 10.1.2.2-10.1.2.255
local ip = 10.1.2.1
length bit = yes
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tpd

編輯/etc/ppp/options.xl2tpd,如果沒有就建立一個吧。你也可以放在你喜歡的地方起一個你喜歡的名字,只要和上面那配置文件裏面的pppoptfile一致就好

1
2
3
4
5
6
7
8
9
10
11
12
13
14
require-mschap-v2
ms-dns 8.8.8.8
ms-dns 8.8.4.4
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

上面的ms-dns我用的是google的DNS……
然後編輯/etc/ppp/chap-secrets,這個用來加VPN賬戶,一行一個賬戶:

1
2
# user      server      password            ip
test        l2tpd       testpassword        *

test是用戶名,自己起,第二項必須是l2tpd,第三項是密碼,第4項是限制這個VPN必須從哪裏連上來,*代表那裏都可以
重啓服務:

1
/etc/init.d/xl2tpd restart

然後執行下列語句:

1
2
iptables -t nat -A POSTROUTING -s 10.1.2.0/255.255.255.0 -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

要注意的是,所有的教程裏面,第一行都寫成了這樣: iptables –t nat –append POSTROUTING –j MASQUERADE 或者 iptables -–table nat –append POSTROUTING –-jump MASQUERADE
其實是有問題的,這樣子之後,服務器内部的網絡連接就不對了,我的nginx連php5-fpm連不上了,後來我把php5-fpm改爲unix設備之後,php連mysql也連不上了……
我後來認真查了一下這個iptables到底是干嘛的,才決定加上-s 10.1.2.0/255.255.255.0 -o eth0的限制。

設置ipv4轉發,修改/etc/sysctl.conf中的net.ipv4.ip_forward,如果沒有就新增吧

1
net.ipv4.ip_forward=1

运行如下命令:

1
sysctl -p

爲了讓每次服務器重起VPN服務都能順利運行,所以有必要將一些重啓后就丟失的配置寫進啓動自動運行腳本/etc/rc.local裏面(在exit之前):

1
2
3
4
5
6
7
iptables -t nat -A POSTROUTING -s 10.1.2.0/255.255.255.0 -o eth0 -j MASQUERADE
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
/etc/init.d/ipsec restart

然後為了保險起見,重啓一下服務:

1
2
/etc/init.d/ipsec restart
/etc/init.d/xl2tpd restart

按道理來説應該就沒有問題了。用windows自帶的撥號連接就可以。記得“安全”裏面,要選用L2TP/IPSec,並且它的高級設置裏面記得用密鈅方式,裏面填上在/etc/ipsec.secrets文件裏面設置的YourSharedSecret。協議用Microsoft CHAP 版本2(MS-CHAP v2)就可以。

不過我一直都不行,後來根據第三篇文章的提示,認真看了看/var/log/syslog(/var/log/auth.log沒有發現啥問題),然後發現這麽一行:

1
pppd is unable to open the /dev/ppp device. You need to create the /dev/ppp device node by executing the following command as root: mknod /dev/ppp c 108 0

於是我就運行mknod /dev/ppp c 108 0,然後就好了……我不知道後面兩個參數是不是每個人都一樣,所以如果我下次做,估計還得先看syslog……

然後,就可以了……

Tags: , , , , ,

WordPress的郵件提醒和代碼高亮

給Wordpress添加了回復郵件提醒。以後只要回復了評論,都會給評論者的郵箱發信。

Google了一下,發現這裡有代碼,不用裝插件。只要在function.php裏面添加如下代碼就可以。要注意的是,這個只支持嵌套評論,因爲非嵌套的話,就不知道是回的哪個評論了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/* comment_mail_notify v1.0 by willin kan. (所有回覆都發郵件) */
function comment_mail_notify($comment_id) {
  $comment = get_comment($comment_id);
  $parent_id = $comment->comment_parent ? $comment->comment_parent : '';
  $spam_confirmed = $comment->comment_approved;
  if (($parent_id != '') && ($spam_confirmed != 'spam')) {
    $wp_email = 'no-reply@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME'])); //e-mail 發出點, no-reply 可改為可用的 e-mail.
    $to = trim(get_comment($parent_id)->comment_author_email);
    $subject = '您在 [' . get_option("blogname") . '] 的留言有了回應';
    $message = '
      <div style="background-color:#eef2fa; border:1px solid #d8e3e8; color:#111; padding:0 15px; -moz-border-radius:5px; -webkit-border-radius:5px; -khtml-border-radius:5px; border-radius:5px;">
      <p>'
. trim(get_comment($parent_id)->comment_author) . ', 您好!</p>
      <p>您曾在《'
. get_the_title($comment->comment_post_ID) . '》的留言:<br />'
      . trim(get_comment($parent_id)->comment_content) . '</p>
      <p>'
. trim($comment->comment_author) . ' 給您的回應:<br />'
      . trim($comment->comment_content) . '<br /></p>
      <p>您可以點擊 <a href="'
. htmlspecialchars(get_comment_link($parent_id)) . '">查看回應完整內容</a></p>
      <p>歡迎再度光臨 <a href="'
. get_option('home') . '">' . get_option('blogname') . '</a></p>
      <p>(此郵件由系統自動發出, 請勿回覆.)</p>
      </div>'
;
    $from = "From: "" . get_option('blogname') . "" <$wp_email>";
    $headers = "$from\nContent-Type: text/html; charset=" . get_option('blog_charset') . "\n";
    wp_mail( $to, $subject, $message, $headers );
    //echo 'mail to ', $to, '<br/> ' , $subject, $message; // for testing
    }
}
add_action('comment_post', 'comment_mail_notify');
// -- END ----------------------------------------

另外,上面的語法高亮是用到了這個插件。唯一不好的地方,就是只能用HTML的方式編輯了,換成可視化方式后就全亂了……

Tags: , ,

VPS記錄(3)

這篇主要寫一些關於Mysql、PHP、Nginx東西。

目前我主要做的優化有兩個,一個是用tcmalloc來給mysql分配内存,看這裡

還有一個是改變Nginx連接PHP的方式,原來PHP在9000端口偵聽,而Nginx去連127.0.0.1:9000,昨天配VPN的時候出了點問題,然後順便把這個優化做了,現在PHP改爲偵聽在一個unix設備上,不走網絡協議了。首先,把nginx的配置裏面,所有的 fastcgi_pass 127.0.0.1:9000; 都換成 fastcgi_pass unix:/dev/shm/php-cgi.sock; 然後編輯/etc/php5/fpm/php5-fpm.conf,將 listen = 127.0.0.1:9000 改爲 listen = /dev/shm/php-cgi.sock。我昨天還想給Mysql也做類似的優化,不過可恥地失敗了……

Tags: , , , , ,

VPS記錄(2)

昨天終于把VPN架好了,剩下的事可以慢慢來,所以抽空把這個坑給填一下。

話説裝好Debian之後,我就開始架Wordpress和奶瓶腿。

我在我的Ubuntu虛擬機上用的是LAMP(Linux Apache Mysql PHP),不過,很明顯的是,LNMP(Linux Nginx Mysql PHP)更好更省資源,於是,我決定配LNMP。

上網搜了好多教程,不過都是什麽非官方的“一鍵配置”版,我還是想自己學一下,參考了好多教程,主要是這個,還有這個也看了一下,這個應該也參考過。

1 Nginx

首先裝的是nginx,就一個web服務器而已。

1
apt-get install nginx

這樣子就裝好了。然後要把服務起起來。

1
/etc/init.d/nginx restart

如果nginx跑起來了,那麽按道理來説,用瀏覽器訪問你的服務器,應該會看到一行字:“Welcome to nginx!”

2 mysql

mysql的安裝也很簡單。

1
apt-get install mysql

中間可能會問你一些問題,例如root密碼之類的。還有一些設置,我都忘了- -b。

然後把mysql啓起來

1
/etc/init.d/mysql restart

3 php

nginx連php有兩种方法,我選擇用php-fpm,感覺上應該效率更高一些。

Debian是以穩定著稱的,換句話說,也就是它更新很慢……目前Debian最新的版本是Lenny,而這個版本的官方軟件安裝源並沒有包括php-fpm,所以要加幾個第三方源:

往/etc/apt/sources.list裏面加入下面三行

1
2
3
deb http://php53.dotdeb.org stable all
deb http://packages.dotdeb.org stable all
deb-src http://packages.dotdeb.org stable all

再更新一下

1
apt-get update

然後就可以安裝了。

1
apt-get install php5-cli php5-common php5-suhosin php5-fpm php5-cgi php5-mysql

如果要裝奶瓶腿,那麽還得加一個php5-curl。

安裝的時候會說你沒有key,問你是否繼續,可以不管,繼續就是了。

然後把php5啓起來:

1
/etc/init.d/php5-fpm restart

這樣子這三個軟件就都裝好了。然後是配置nginx虛擬機測試一下php5。如果很有信心,則可以跳過。

編輯/etc/nginx/sites-available/default:(注意,還有個文件/etc/nginx/sites-enabled/default,這個是/etc/nginx/sites-available/default的符號連接)

這個是nginx的配置文件,一個虛擬機的配置大概是這樣子的(文件裏面以#開頭的是註釋,不要和命令裏面的root權限提示符搞混了),如果這個服務器有多個域名,或者多個二級域名,就寫多幾個好了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
server {
  #端口
  listen   80;
  #地址,可以寫多個server_name,可以用*儅通配符例如*.netson-cn.net,自己改。
  server_name aaa.bbb.com;
  #日誌的地址,自己改吧,也可以不改
  access_log  /var/log/nginx/nginx.access.log;
  #如果有下列錯誤(500 502 503 504,都是php執行錯誤),則轉向50x.html文件
  error_page   500 502 503 504  /50x.html;
  #這個block標記50x.html的位置,可以沒有,這個是nginx的默認值
  location = /50x.html {
    root   /var/www/nginx-default;
  }
  #配置根目錄
  location / {
    root /var/www/nginx-default;
    index index.php;
  }
  #配置php
  location ~ .*\.php$ {
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /var/www/nginx-default/$fastcgi_script_name;
    include /etc/nginx/fastcgi_params;
  }
}

往/var/www/nginx-default/index.php寫如下内容:

1
<?php phpinfo() ?>

然後重新啓動nginx:

1
/etc/init.d/nginx restart

然後就用瀏覽器訪問吧,如果一切正常,應該是能看到一個很大的頁面,上面有你的虛擬機的各種信息。

接下來是架Wordpress。

先創建mysql數據

1
mysql -u root -p

創建數據庫,數據庫名字是wp

1
mysql>CREATE DATABASE wp;

創建用戶,用戶名是aaa,密碼是bbb

1
mysql>CREATE USER aaa IDENTIFIED BY ‘bbb’;

讓aaa擁有讀取、修改wp數據庫的權限

1
mysql>GRANT ALL ON wp.* TO aaa;

退出mysql

1
mysql>exit

把Wordpress下下來:

1
wget http://cn.wordpress.org/wordpress-3.0.1-zh_CN.tar.gz

然後解壓,例如/var/www/wordpress。

因爲php5和nginx默認是以www-data用戶組裏面的www-data用戶運行的,爲了讓Wordpress正常運行,要讓www-data用戶有足夠的權限去管理wordpress目錄,我的做法就是乾脆讓www-data作爲這個目錄的所有者:

1
chown www-data:www-data -R /var/www/wordpress

然後配置nginx,還是/etc/nginx/sites-available/default文件,參照上面的配置,注意要修改的地方包括:

location / 裏面的root,這裡應該是/var/www/wordpress

location ~ .*\.php$ 裏面的fastcgi_param SCRIPT_FILENAME,應該是/var/www/wordpress/$fastcgi_script_name;

然後用瀏覽器訪問,應該會說看起來沒有了wp-config.php,點擊進去就有個向導填寫配置,主要要配置的是數據庫的名字,就是上面建立的“wp”,數據庫用戶名,就是上面的“aaa”,數據庫密碼,就是上面的“bbb”。

一路填下來應該就Ok了……

然後還可以架個奶瓶腿。

奶瓶腿的架設就很簡單了。而且不用連數據庫,這裡是它的官方頁面。

需要注意的是前幾天推特的API升級了,如果vps服務器不是64位的話,那麽需要做如下的事情:

將twitter.php和naiping.php裏面的 ->id 換成 ->id_str,一共有19個地方;

將twitter.php和naiping.php裏面的->in_reply_to_status_id 換成 ->in_reply_to_status_id_str,一共有4個地方。

還有就是記得用user_oauth.php裏面的内容將user.php給替換掉,這樣就不用翻牆登陸了。

Tags: , , , ,

原來MS的hash_set内部是個list

今天爲了實現一個新功能,爲了不引發效率問題,決定把一個容器從std::list改爲stdext::hash_set。

這個類一開始不是我寫的,那個容器的聲明沒有用typede一個類型來,我接手以後,由於這個容器在代碼裏面要遍歷的點沒幾個,我也懶得重搆了,就一直沒有動它。

這次我就想順便改了,首先改聲明,從list改爲hash_set。然後編譯,準備從編譯錯誤裏面定位遍歷這幾個容器的點。

但是。。。。。居然編譯通過了。。。。一運行,也沒有任何問題……嗯?

後來看了看源代碼,才發現原來Microsoft的STL内部的hash_set居然是用list來實現的!

也就是說,hash_set的insert()、remove()、find()方法,效率不會太高……我特意看了看源代碼,果然如此……無語了……改天還是把hash_set換回set吧……這太不靠譜了……

結論就是,對於Windows API、第三方類庫之類的調用,千萬不要想當然,還是要看看實現(如果有的話),如果沒有的話,看相關文檔……