迁移博客到Raspberry Pi上

之前博客host在amazon的服务器上,每个月15~16刀的支出着实不小。

现在有了Raspberry Pi了,基本上24小时开机,可以当一个小server用,所以想着把博客迁移到Pi上,反正访问量不大,肯定能承受得住。

Apache有点大,想想还是用nginx来跑wordpress吧。google一下,找到这篇文章:http://www.cnx-software.com/2012/08/03/wordpress-for-raspberry-pi-using-nginx-and-mysql/
基本上把在Pi上安装http server和部署wordpress的要点写清楚了。

不过我要的不是一个新的wordpress,而是迁移原来的博客,所以也在这里记录一下。因为是事后记录,可能有遗漏或者错误,仅供参考。

1. 安装nginx, php,mysql等

sudo apt-get update
sudo apt-get install nginx php5-fpm php5-cli php5-curl php5-gd php5-mcrypt php5-mysql php5-cgi mysql-server

2. 参考上面的link,把nginx和php的配置文件配好,因为我还要用https(防GFW),所以相比那篇文章里的配置,多了ssl的配置

# Upstream to abstract backend connection(s) for php
upstream php {
server unix:/var/run/php5-fpm.sock;
}
server {
## Your only path reference.
root /srv/www/wordpress;
listen          80;
listen          443 default_server ssl;
## Your website name goes here. Change to domain.ltd in VPS
server_name     mine260309.me;

ssl_certificate     /home/pi/cacert/mine260309.me.StartCom.cert;
ssl_certificate_key /home/pi/cacert/mine260309.me.key.pem;
ssl_protocols       SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers         HIGH:!aNULL:!MD5;
access_log      /srv/www/wordpress/logs/access.log;
error_log       /srv/www/wordpress/logs/error.log;

## This should be in your http block and if it is, it's not needed here.
index index.php;

location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location / {
# This is cool because no php is touched for static content
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
include fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_pass php;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}

记得创建对应的文件夹,否则nginx会访问失败:

sudo mkdir -p /srv/www/wordpress/
sudo mkdir -p /srv/www/wordpress/logs

3. 把备份的文件拷过来,恢复wordpress文件夹和数据库。

3.1 我的备份是这样的一个脚本,crontab每周跑一次,备份过的文件会自动被dropbox同步。(注意用户名和密码是自己设的mysql的用户名、密码)

#!/bin/sh
# Back my web with clear password!
mysqldump --add-drop-table -h localhost -u  --password= minewpdb | bzip2 -c > ~/Dropbox/MyWebs/blog.bak.sql.bz2
tar -czf ~/Dropbox/MyWebs/blog.bak.html.tar.gz /var/www/html

3.2 恢复的过程是:
a) 恢复mysql数据库

$ mysql -u root -p
mysql> CREATE DATABASE minewpdb;  #创建database,注意名字和之前用的一样
mysql> GRANT ALL ON minewpdb.* TO @localhost IDENTIFIED BY '';  # 创建一个myssql用户,方便起见,也和以前一样好了
$ mysql -u ec2-user -p minewpdb < /media/ent/blog.bak.sql # 恢复数据库

b) 恢复html文件夹,这个很简单,就是把blog.bak.html.tar.gz解压出来,放到/srv/www/wordpress目录就行了
然后就可以先在本地测试了,确认wordpress没有问题之后,就是域名了。

4. 域名DDNS

这一块还没玩过,只能做尝试了。

先测试了url forwarding,在dyndns.org有个免费域名mine260309.dyndns-at-home.com,这个是可以DDNS的,然后在GoDaddy里设置了forwarding,然而无论是设置成http://的还是https://的,ssl都有问题(我的博客用了WordPress HTTPS),上推去问,@wzyboy同学说可以用he.net的服务,去google了一下,果然是个好东西。参考http://www.bidon.ca/en/random/2011-06-16-using-dynamic-dns-feature-dnshenet

4.1 上dns.he.net,注册后,可以免费设置50个域名。
1) 添加mine260309.me;
2) Edit Zone -> New A -> Enable entry for dynamic dns
3) 点击”refresh”图标 -> Generate Key,记住这个key,以后给ddclient用
4.2 然后在pi上下载ddclient

apt-get install ddclient

#安装的过程中会有preconfig:

remote server: dyn.dns.he.net
username: mine260309.me
password:
domain: mine260309.me

service ddclient status

确认ddclient工作正常。

4.3 在GoDaddy的设置里把Forwarding关掉,然后手动设置Nameserver为ns1.he.net, ns2.he.net, …

最后测试,一切正常!

不过因为在墙内了,发完博客自动发推的功能木有了,当然这个可以用别的服务搞定就是了,以后再说~

Share