Xu-Blog

养一猫一狗,猫叫啵啵,狗叫没想好~~

0%

树莓派部署博客

00 年代如同梦呓,10 年代就在昨日。
趁大家都在纪念着 10 年代的结束,我是不是可以偷偷的原谅自己不太满意的过去。
希望过往所有的遗憾都是未来惊喜的铺垫。

生活从未偏爱过谁,可我能听懂你的歌,这也许就是你我生存下去的意义。

—— 佚名

最近很忙,嗯,字面意义上的很忙。早上7点左右起来骑行9km,忙一天晚上再骑行回来。首先还得感谢电子学会的小伙伴王鹏,鹏总给了我这个机会,救人于水火了属于是。

在写汇报的时候忽然想起了我的个人博客,服务器自从到期后,续费动辄几百上千,没有收入买的话实在有些肉疼。磨叽好久,忽然想到我域名没到期。家里还有个之前玩着用的树莓派,这不简单折腾一下,把系统搭建起来。

系统框架

搭建整个系统,先对框架进行了解:

系统主要分为四个模块:

  1. 一台本地PC,用作用户端,进行文字的编辑,并通过Hexo框架的指令生成静态网页代码(一堆文件,以及index.html)。并且可以将生成的代码通过Git上传到服务器;
  2. 一台树莓派,作为服务器,用于存放本地PC上传的代码。存放的代码需要通过Nginx服务器,将网页通过内网IP进行展示;
  3. 内网穿透(内网穿透方式有很多种,我选择的是Sakura frp,怎么说呢,龙族迷,一眼真),用于将外网的端口映射到内网的IP上,这样,就可以通过frp供应商提供的IP端口进行内网访问了;
  4. 一个域名(这个域名可有可无其实,我正好有个阿里云没到期的,且之前实名认证+备案过的闲置域名),用作外部访问的入口,通过DNS解析到外网的IP端口或者域名即可大功告成。

本地PC

Hexo

关于Hexo,我之前的文章也有讲过。
Hexo搭建博客

当然在此重新简单的搭建一波:

安装Node.js

下载nodejs并安装,建议安装node12 Latest版,因为新版的node可能会导致一些警告。

NodeJS下载地址

安装即可,安装之后,打开系统cmd命令行,依次输入

1
2
node -v
npm -v

返回正确的版本信息即安装完成(先不要关闭,还要用命令行工具)。

安装Hexo

使用nodejs的npm包管理器安装hexo,在cmd命令行中,输入安装指令。

1
2
npm install -g hexo-cli
hexo -v

根据返回的版本号,确定是否安装成功。

Hexo生成网页

创建任意文件夹。在文件夹位置打开cmd命令行,输入命令:

1
hexo init test-Blog   # hexo初始化

再次查看文件夹,就会有Hexo框架的源代码了。

接下来进入文件夹,依次输入以下命令:

1
2
3
cd test-Blog    # 进入文件夹
hexo g # hexo生成静态网页
hexo s # hexo开启本地端口

此时,访问 localhost:4000即可从本地PC上访问Hexo生成的静态网页了。

Git

安装Git

本地的网页需要上传至服务器,采用Git方案。需要去Git官网下载:

Git下载地址

正常默认安装即可。

生成ssh公钥

在命令行输入:

1
ssh-keygen -t rsa -C "邮箱地址"

一直回车即可,公钥一般会被保存在 C:\Users\用户名\.ssh 下,当服务器搭建起来之后,需要将公钥放在服务器端,方便访问。

本地PC端的设置到此基本完成。

树莓派

树莓派系统安装在此就不多说了。正常安装了树莓派系统的,应该都可以ssh连接。就从ssh连接之后开讲。

配置树莓派

树莓派更换源

  • 打开树莓派镜像列表sources.list
1
sudo vim /etc/apt/sources.list
  • 将内容替换为清华大学源
1
2
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
  • 更新源
1
sudo apt-get update

配置远程仓库

树莓派安装GIT

1
2
sudo apt-get install git
git --version

回复正确的版本号即安装完成。

建立Git远程仓库

我的目标是将树莓派用作个人服务器,搭建在自己家中,和台式机在一个内网中。
所以需要在树莓派端用Git建立一个远程仓库,本地PC通过Git提交本地网页代码至远程仓库。

注意:这种方法适用于各类云服务器,我这里树莓派相当于替代了云服务器。(所以我的本地PC要求在树莓派的局域网内)

建立步骤:

  • 创建文件夹
1
2
3
sudo mkdir /var/repo/                 # 创建一个文件夹
sudo chown -R $USER:$USER /var/repo/ # 分到用户组
sudo chmod -R 755 /var/repo/ # 改变文件夹权限(含义请百度)
  • 进入文件夹,创建Git仓库,名称为XXXXX。
1
2
cd /var/repo/
git init --bare XXXXX.git
  • 仓库映射(这几步很重要)
  • 创建文件夹作为nginx根目录,之后nginx配置root就是配置这个文件夹。
1
sudo mkdir -p /var/www/hexo
  • 修改目录权限
1
2
3
4
5
6
7
8
9
10
11
12
sudo chown -R $USER:$USER /var/www/hexo
sudo chmod -R 755 /var/www/hexo
```

- 在仓库XXXXX下创建钩子文件(直接vi即可,vi建议学一下哟,还是很常用的),将网站文件传送到刚才创建的文件夹/var/www/hexo下。(记得改XXXXX)

```shell
sudo vim /var/repo/XXXXX.git/hooks/post-receive

在文件中,写入以下内容:
#!/bin/bash
git --work-tree=/var/www/hexo --git-dir=/var/repo/XXXXX.git checkout -f

保存退出,改变文件权限,让文件变为可执行文件。

1
sudo chmod +x /var/repo/XXXXX.git/hooks/post-receive

这样远程Git仓库也搞定了。接下来安装&配置nginx。

安装nginx

1
2
sudo apt-get install nginx
nginx -v

安装返回正确版本号即可。

配置nginx

打开nginx默认配置项:

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

将root值修改为我们建立的根目录 /var/www/hexo,我们也能看到,nginx此时只开启了80端口,即http端口,之后我们会再配置https的443端口。

保存退出,重启nginx服务:

1
sudo service nginx restart

此时通过内网已经可以访问树莓派的nginx了,在浏览器输入树莓派IP地址回车即可。

添加公钥

在前面安装完PC端Git之后,我们生成了一段公钥,这时候就要把这个公钥添加在树莓派中,让树莓派不会拒绝我们的代码提交。在.ssh文件夹中打开终端上传公钥即可:

1
ssh-copy-id -p 22 树莓派用户名@树莓派IP

安装完毕,配置PC端hexo的_config.yml文件,填写deploy:

1
2
3
4
deploy:
type: git
repo: 树莓派用户名@树莓派IP地址:/var/repo/XXXXX
branch: master

都修改完之后,本地 hexo clean && hexo g && hexo d 即可。

再次访问树莓派IP地址,网站出现,整体工作完成一半。

内网穿透

关于内网穿透的一些细解就不多讲了,主要是我自己也不是很懂,就直接上我的路线吧,如遇到有缘人和我的路线一样,能帮一把是一把,如果不一样,个人主页,也可以联系我,知无不言。

需要先验条件:有备案的域名,以及1元钱(实名认证用,调用的支付宝或者微信的接口)。

我的内网穿透是用工具SakuraFrp完成的,这里上链接:SakuraFrp,进入之后,注册一个用户即可,看个人资金程度哈,我用的是免费用户,想办会员当然也可以。

有官方帮助文档,建议细看,基本所有的问题都可解决。

接下来我的步骤:

  • 点击服务
  • 点击隧道列表
  • 创建隧道
  • 选择可建站
  • 选择普通节点(内地)

挑选一个不满载的创建隧道。需要创建两个:

  1. 名称HTTP80端口自己的域名
  2. 名称HTTPS443端口自己的域名

这里为什么开两个隧道的原因我给解释一下:最开始我是开了80端口,可以http访问,然后配置了ssl,改为了https+443,发现http端口不能用了。以为是重定向的问题,改了很久nginx的配置。

后来发现这种方式用的是隧道方式,和重定向没关系,强制重定向没有用。所以在Sakura frpc上又开了一个80的隧道。解决问题。

隧道配置完,需要在树莓派端输入:frpc -f wdnmdtoken666666:12345

这些在基本指南里面都有,傻瓜式输入命令行即可,没啥好搞的了。

域名

域名这个东西我自己本身就有,阿里云,直接域名解析DNS,到frp的地址即可。

隔了几天写的,忘了想写啥了。

今天听到有个外包软件的大叔,在跟两个经理讲软件相关的东西。按我的认知对个百分之65吧。

也是一顿瞎说哈哈。不过说到一句老话还是认同的,高级工程师高级在什么地方,在于掌握一门技术。身边人做不了的那种。

这就像我本科时候,我老大(杨深圳)跟我讲的一句话,在任何地方都要做到无可替代,别人没法替代你的工作,你就算在当前的岗位成功了。

我还差得远,共勉。即使当了老师,也不能懈怠,不论生活,亦是工作,都要努力做到最好。

君子慎独。

End~~请支持原创撒花= ̄ω ̄=花撒
如果您读文章后有收获,可以打赏我喝咖啡哦~