Nanopi架设Hexo个人博客服务器

摘要

本文利用Nanopi NEO2架设Hexo Blog服务器,相较于github pages,本服务器拥有更快的访问速度,还具有更完备的功能扩展性;结构上主要从公网ip的获取、路由器设置、端口映射、动态域名解析、Nanopi 环境安装,定时任务创建这六个方面来阐述安装过程以及可能会遇到的问题的解决办法。
我的博客地址:www.ontheroad.work:8888


配上mini机箱外壳,好看!
8pCYPU.jpg

必备条件

1.可运行linux的开发板,我使用的是Nanopi NEO2(安装了nanopi-neo2_sd_friendlycore-xenial_4.14_arm64_20191219系统)
2.公网ip(如果是电信宽带,可以直接打电话给客服告诉他帮你转成公网ip)
3.可配置端口映射的路由器
4.个人域名(可自行购买,如果只想玩一下可购买1元/首年的域名)

如何判断是否是公网ip

登录你的路由器,查看你的路由器ip
8pQhOP.png
百度搜索ip
8pl36I.png
发现这两个ip是相同的,那么恭喜你,你是公网ip,如果不是请接着往下看
注意: 确保你的路由器是一级路由器,也就说它不是从其它路由器接过来的(比如:天翼网关),也可以说它是直接拨号上网的,否则你在路由器管理界面看到的路由器ip可能会是192.168.*.*。我的路由器就是接在天翼网关下面的,这时需要将天翼网关设置成桥接模式,至于如何设置后面会说。

如何获取公网ip,为何获取公网ip

公网ip:如果你想从外网直接访问开发板的内容,必须将你的服务器开放到公网上,因为ipv4数量有限,个人家庭中的网络基本上都是多户挂载在一个ip下通过NAT转发到各个用户,电信做的还挺人性化,打电话可以直接免费获取公网ip,但是他给你的不是一个固定ip,而是动态ip,即每次你拨号呼叫时你获得的都是不同的ip,另外每隔一定时间会自动更换你的ip。正因为这个原因,你需要动态域名解析(DNS),我使用的是DNSPOD做免费的域名解析;当然目前还有花生壳、nat123也提供相同的功能,另外提供内网穿透功能,也就是说你可以不必拥有公网ip就可以搭建网站,并且可实现80端口的解析(三大运营商已屏蔽80端口,DNSPOD不能解析家庭网络的80端口),但是,花生壳3.0.4树莓派版本在Nanopi 上安装失败,搜索了好久,别人说不支持……又安装了2.x版本的客户端,板子上提示花生壳上线成功,域名诊断却提示花生壳未登录,利用路由器自带的花生壳也是同样的效果;关于nat123虽然说是免费解析,但是绑定自己的域名需要认证,认证需要缴费,分了几个级别的费用
8pKFSI.png
另外nat123客户端在我的板子上跑起来有点卡顿,开了之后关不了,所以,本着瞎折腾不花钱的原则,我选择了DNSPOD。

天翼网关及路由器设置

连接上天翼网关的wifi,转到192.168.1.1路由配置界面,利用超级用户名超级密码登录路由管理界面

用户名: telecomadmin
密  码: nE7j%5m

**注意:**一定要使用超级用户登录否则更改不了设置
8pNnW8.png
点击网络连接名称改为1_INTERNET_B_VID_41其它选项保持默认,点击保存/应用即可
8pNNWT.png
进入开发板连接的路由器管理界面在上网设置里面将工作模式选择为宽带PPPOE,分别在PPPoE账户PPPoE密码设置为你的宽带用户名和密码,点击确定即可。如果忘记了用户名和密码可直接拨打电信客服重置密码。
8pdnW6.png

配置路由端口映射

首先给你的开发板绑定ip/mac,我使用的是电信送的360安全路由T3,登录路由器管理界面,
点击功能扩展防火墙(IP/MAC)
8psSY9.png

IP地址:填入你想分配给开发板的ip,一般就用它当前的ip就可以
MAC地址:填入开发板mac地址
备注:随便写
接口:LAN

绑定好后,进行端口映射,点击功能扩展,找到端口映射
8pBnWq.png

虚拟服务名称:随便填
内网主机ip地址:你绑定的设备的ip地址
外部端口:选择TCP+UDP 外部访问的端口填一些不常用的端口
内部端口:你的开发板开放的端口

Nanopi 环境配置

因为我采用的是将Hexo的编译渲染环境与托管环境分开的方法,所以Nanopi 上只需要安装nginx,php即可
1.安装nginx web服务器

$ sudo apt-get install nginx

2.启动nginx

$ sudo /etc/init.d/nginx start

nginx的www根目录默认在/var/www/,稍后会将hexo blog 的html文件放置于该目录下
3.安装php

$ sudo apt-get install php7*-fpm php7*-sqlite

4.修改nginx的配置文件

$ sudo vim /etc/nginx/sites-available/default

找到listen行,将其前面的#号注释去掉,在路由器端口映射时,内网端口设置的是8678,listen为8678

server {
        listen 8678 default_server;
        listen [::]:8678 default_server;

找到index行,加入index.php

# Add index.php to the list if you are using PHP
        index index.php index.html index.htm index.nginx-debian.html;
        server_name _;

找到php的定义段,按如下内容修改

location ~ \.php$ {
                #include snippets/fastcgi-php.conf;

                # With php7.0-cgi alone:
                #fastcgi_pass 127.0.0.1:9000;
                # With php7.0-fpm:
                include fastcgi_params;
                fastcgi_index index.php;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }

5.重新加载nginx的配置

$ sudo /etc/init.d/nginx reload

这时打开浏览器输入192.168.0.6:8678可以看到一个nginx的界面说明已经配置成功。

在PC上安装Hexo Blog

这个内容已经在上一篇博客中说明过,此处不在赘述,可以参考“利用Hexo&Github快速构建个人Blog

动态域名解析

注册并登录DNSPOD,购买域名,购买后点击我的域名,再点击ontheroad.work(你注册的域名)进入到记录管理界面,点击添加记录,按下图样子添加默认域名解析2个
89SotO.png
再添加对自己域名的解析,记录值先随便填一个IP地址
89pEBq.png
因为我们要解析的ip是动态变化的,因此刚随便填写的记录值也要跟随着变化,下面在开发板上配置一个定时任务,利用别人封装好的bash,调用API,更改记录值
首先在DNSPOD账号中心,秘钥管理界面创建秘钥
89iSqs.png
创建成功后获得ID和Token,复制保存这两个信息,后面调用API需要
下载ArDNSPod客户端
建议下载到当前用户的根目录下,以方便定时任务的添加

$ cd ~
$ git clone https://github.com/imki911/ArDNSPod

将之前得到的ID和token写入dns.conf 文件, 并指定要绑定的子域名

# 1. Combine your token ID and token together as follows
arToken="你的token ID,你的token"

# 2. Place each domain you want to check as follows
# you can have multiple arDdnsCheck blocks
arDdnsCheck "你的域名" "www"

根据情况修改ddnspod.sh文件中IPtype的值,我定义为1(WAN)

#Please select IP type
IPtype=1  #1.WAN 2.LAN 3.IPv6

运行

$ ./ddnspod.sh

这时你会看到

Type: A
OS: Linux
Address: 117.64.253.248
Updating Domain: www.ontheroad.work
hostIP: 117.64.253.248
lastIP: 114.97.203.112
update to 117.64.253.248 successed.

那么你的客户端部署就成功了,可以在DNSPOD控制台中看到我们随便填的记录值变成了自己的路由器ip。

至此你可以将github 上面我们上传的Hexo网页信息clone到本地的nginx根目录啦
注意: 关于如何将Hexo博客上传到github请参考上一篇文章“利用Hexo&Github快速构建个人Blog

$ cd /var/www/
$ sudo rm -rf html
$ sudo git clone https://github.com:YourgithubName/YourgithubName.github.io.git

用浏览器打开192.168.0.6:8678,就可以看到自己的博客啦!

创建定时任务

需要创建两个定时任务
一个用于实时监测IP并自动更新至DNSPOD,另一个用于定时抓取github上我们更新的博客内容。

修改ddnspod.sh文件中的DIR变量值(这个地方我找了好久,因为cron定时任务只支持绝对路径,所以bash中的命令需要使用绝对路径)

DIR=$(dirname -- "$(readlink "$0")")
DIR=./ArDNSPod #添加这一行

修改完后你会发现在当前目录下运行./ddnspod.sh,会出现以下错误

Type: A
OS: Linux
Address: 114.97.203.119
./ddnspod.sh: line 282: ./ArDNSPod/dns.conf: No such file or directory

因为没有bash编程的基础,暂时也没有学习bash的打算,强制修改DIR变量导致的错误,可以在当前目录新建一个ArDNSPoddns.conf复制进去就行了,这只是敷衍自己,后期有时间再做更正。

$ sudo mkdir ArDNSPod
$ cp dns.conf ./ArDNSPod/

创建定时任务

crontab -e

会打开当前用户的cron任务表
在最底下添加两个任务,第一个每隔一分钟调用dnshpod.sh更新域名解析记录值,第二个每隔30分钟从github pull你更新的博客

# m h  dom mon dow   command
*/1 *   *   *   *   ./ArDNSPod/ddnspod.sh
*/30 *   *   *   *   cd /var/www/html/ && sudo git pull

注意: 不建议将第二个更新时间设置得太短,因为github的访问速度不快,为避免更新出错,适当调整时间。
重启cron使配置生效

$ service cron restart

如果时间到了,执行了你的定时任务,恭喜你,在Nanopi 上部署Hexo 博客已经圆满完成!可以通过你的域名+端口号来访问自己的博客啦,比如说我的博客:www.ontheroad.work:8888


如果没有执行,好吧,你最先想到的应该是查看log,但是默认情况下ubuntu 没有安装rsyslog
安装rsyslog

sudo apt-get install rsyslog

开启cron日志功能,#将cron前面的注释符去掉

$ sudo vim /etc/rsyslog.d/50-default.conf

重启rsyslog

$sudo  service rsyslog  restart

查看crontab日志

$ vim /var/log/cron.log 

这时你可能会发现一个(CRON) info (No MTA installed, discarding output)的问题,这时因为没有配置邮件服务器
可以通过安装邮件服务器解决该问题

$ sudo apt-get install postfix

重新配置邮件服务

sudo dpkg-reconfigure postfix

按提示一直ok或yes,配置完邮箱后也部署也就完成了!
**注意:**记得回去关闭cron的log,在重新配置一下邮箱容量,否则随着时间的推移,log会占用大量空间。

小结

虽然将Hexo部署在Nanopi上,增加了更多的不稳定风险,但是通过这两天的运行能够看出,相较于部署在github上的博客,我的Nanopi表现得相当不错,尤其在下午6:00以后,对github的解析出现了无法连接的情况,我估计是地球另一边的人起来干活了吧……
目前一小时对github pages服务器解析监控
896ObV.png
同时间段对Nanopi服务器解析监控
89cVUO.png
当然优点不仅如此,还可以在Nanopi上搭建私有云盘、物联网服务器、网络打印机等等好玩的用法。

END

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值