Raspbian系统准备

准备系统的电脑用的是Deepin linux系统.

准备micro sd卡, 建议用一张三点几G的小容量卡搭好网站后,将其作成镜像供后续恢复网站使用(dd命令交换if/of的值, 见后文dd命令), 一张大容量高速(Class10)卡在搭好网站后作为真正的网站磁盘. 用读卡器连接在电脑上sd卡本身的所有分区(推荐软件: gparted), 注意micro sd卡对应的设备文件(建议命令lsblk), 假设sd卡的设备文件为/dev/sdc.

树莓派zero的性能妥妥的不行, 运行桌面系统卡的不行, 几乎不能用, 所以下载只有命令行的lite系统(点此下载), 然后解压出img文件. 终端进入img文件所在目录, 用dd命令安装系统镜像.

sudo dd if=*.img of=/dev/sdc

安装完后插拔小容量sd卡, 在boot分区中新建ssh文件(touch ssh)开启ssh.

修改rootfs分区(windows系统下该分区不可见)下的etc/network/interfaces文件, 加入

auto lo
iface lo inet loopback

iface eth0 inet manual

allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
    wpa-conf /boot/wpa.conf # 与后面配置wifi名称密码的文件位置匹配即可

同样修改该分区下etc/apt/sources.list文件(更换更快速的软件源镜像), 删除原内容, 加入

deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib

etc/apt/sources.list.d/raspi.list文件中, 删除原内容, 加入

deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui

注意上面的buster是Raspbian系统的版本代号, 需要与下载的系统版本一致, 否则后续使用导致软件版本冲突.

再在boot分区中新建wpa.conf文件, 以下述格式加入wifi名称密码.

network={
    ssid="***"
    key_mgmt=WPA-PSK
    psk="********"
    priority=5
}

network={
    ssid="***"
    key_mgmt=NONE
    priority=4
}

将处理好的sd卡插入树莓派zero w, 上电开机.

等待几分钟后去无线路由器的管理页面查找树莓派的IP, 电脑ssh连接, 初始密码raspberry.

ssh pi@IP

修改密码:

passwd            # 修改pi的密码
sudo passwd root  # 修改root密码

更新软件包索引/更新系统/软件更新:

sudo apt update
sudo apt dist-upgrade
sudo apt upgrade

sudo raspi-config 关闭除ssh外所有多余功能, 给GPU分配最小的内存, expand file system, 随后重启.

Watchdog配置 (未成功)

笔者住在学校, 树莓派服务器在家运行, 如果树莓派死机了ssh连接无应答怎么办? (虽然仅仅跑个小博客这样的可能性不大) 树莓派zero的芯片支持看门狗, 开启后看门狗计时器会不断往自己的寄存器中加一, 一旦寄存器数据溢出就会产生重启信号重启树莓派. 为了避免重启, 树莓派系统要运行看门狗软件不断将看门狗寄存器置零(喂狗), 一旦系统卡死或者看门狗定期检查发现树莓派状况异常(温度过高/内存不足等)就会运行修复脚本或者重启.

sudo apt install chkconfig watchdog
sudo modprobe bcm2835_wdt
sudo echo 'bcm2835_wdt' >> /etc/modules
sudo chkconfig -s watchdog on

参照man watchdog.conf修改/etc/watchdog.conf.

可惜用shell炸弹:(){ :|:& };:只会卡死树莓派并不会重启之,不知道哪里出错了.

发现了一个叫monit的软件可以做成软件看门狗, 在系统资源吃紧(比如用掉了90%)快要死机时候主动重启并且邮件发送警报. 鉴于我的树莓派并没有因为运行web server死过机,我也就懒得设置看门狗了.

网站搭建

安装Nginx:

sudo apt install nginx

一般nginx默认开机自动启动.
修改/etc/nginx/sites-available/default, 在没被注释的server {***}中更改网站根目录root的位置(以后写好的博客网站内容上传到这里), 有需要的话更改监听端口listen.

安装ufw配置防火墙:

sudo apt install ufw
sudo ufw enable
sudo ufw default deny # 此时会提示要不要deny ssh的22端口, 一定不要deny
sudo ufw allow 80 # Nginx中监听的端口

最好在路由器绑定树莓派的MAC地址与IP.

内网穿透

如果你的路由器连在公网上, 你又可以控制路由器, 设置一个端口转发就好. 可惜大部分人都没这条件.

就只好使用花生壳的内网穿透了.

https://hsk.oray.com/download/找到树莓派版本花生壳下载链接:

sudo apt install wget gdebi-core
wget https://hsk.oray.com/dl/dl?id=25 #花生壳下载链接
sudo gdebi *.deb
sudo systemctl start phddns

安装好后会显示SN码, 在b.oray.com凭此注册设备, 绑定(或者新注册)账号, 领取免费的内网穿透.
在域名列表中注册一个域名(每人能够注册一个免费壳域名). 随后在内网穿透区添加穿透, 选择HTTP(需要支付6元, 99年使用期), 输入之前在路由器查到的树莓派IP和Nginx设定的监听端口.

如果在外网想要远程控制内网中的树莓派, 还需要新建一个穿透, 将树莓派的22端口映射到域名的另一个端口中去, 映射类型为TCP, 记住端口号. 以后在外网可以用ssh -p 端口号 pi@域名远程登录, scp传文件时候加入参数-P 端口号.

为了方便ssh的使用, 可以用ssh-keygen -t rsa生成公钥(\*.pub), 传回自己电脑上后在shell内设置ssh的别名为ssh -i 公钥位置, 这样以后登录就不需要输密码了.

网站配置好后可以将树莓派关机, 取下sd卡连上电脑, sudo dd if=/dev/sdc of=webserver.img制作镜像, 并且将镜像烧录至大的sd卡中, 用大的sd卡运行树莓派.

Hexo搭建博客编辑环境

这部分内容搭建在自己写作用的电脑上. 我尝试的是Ubuntu 18.04.

https://nodejs.org/en/download/中找到最新的稳定版本安装包, 下载, 解压到主目录~. (我比较建议专门在主目录中建一个用于放自定义安装的软件包,并且建议把解压后的目录名重命名为node, 舍去版本号.)

进入解压目录中的bin:

sudo ln -s $PWD/node /usr/local/bin/node

进入解压目录中的lib/node_modules/npm/bin/, 编辑npm:

  • 找到NODE_EXE="$basedir/node.exe", 在此之前另起一行添加basedir=nodejs解压出的目录
  • 找到NPM_CLI_JS项, 将=后面改为"$basedir/lib/node_modules/npm/bin/npm-cli.js"

随后

sudo ln -s $PWD/npm /usr/local/bin/npm

用命令node -vnpm -v检验是否成功安装nodejs.

然后开始安装hexo:

npm install -g hexo-cli
hexo -v

hexo -v命令返回的是Command not found, 查找了一下发现hexo安装在nodejs解压目录下的bin中, 进入这个目录,

sudo ln -s $PWD/hexo /usr/local/bin/hexo

这样就安装好了.

在自己工作目录中新建博客网站hexo框架

hexo init myblog # myblog是要创建的博客工作目录名称, 可以自己修改
cd myblog
npm install

关于博客的配置可以百度到官方文档(有中文!!)
修改博客目录中的_config.yml. 一般修改:

  • # Site下的内容
  • # URL下的url
  • # Extensions下的theme

博客目录/source/目录新建about/index.md, 写关于页面.

然后去github上下载自己中意的主题解压到博客目录中的themes, 解压目录与_config.yml中描述的一致.

然后需要根据主题作者的说明修改配置该主题目录下的_config.yml文件.

博客目录/source/_post下写完博客内容后, 运行hexo g然后将博客目录/public上传到树莓派上Nginx使用的网站根目录即可.

博客markdown源码中引用图片时候的/目录指的是source目录而非系统根目录.

如果我们不在家, 不能通过内网连接树莓派, 利用花生壳的免费穿透连接的速度很慢, 而且有每月流量限制. 为了应对这一点可以仅将本机的
source/_post传到树莓派上, 并且在树莓派上安装配置Hexo,在树莓派上完成hexo g. (树莓派zero的armv6l芯片已经不被最新版nodejs支持, 可以下载安装11.x版本的nodejs并安装Hexo.)

Hexo常用操作举例(备忘录)

  • hexo new 'post' # 创建新博文
  • hexo clean
  • hexo g # 生成网站内容文件夹public
  • hexo server # 在本机4000端口开启博客预览


server card computer

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!