用树莓派4B搭建网站

事先声明:
本教程的作者不提供任何担保也不承担任何附带责任,若你询问我任何与本教程相关的问题,我可以不回复不作出正确回复不提供相关资源

如果你有足够的时间来折腾这些的话,你可以继续看下去,本教程只需要你拥有:

  • 充裕的时间
  • 网络连接
  • 电力供应
  • 电子邮箱
  • 一块Raspberry Pi 4B及其配件(Micro SD卡,电源)

当你准备好后,请接着往下阅读。

树莓派

我建议使用Raspberry Pi 4B,原因是该型号的算力较前有很大提升,建议RAM大小不小于2GB,以防编译某些程序时出错。
你可以前往官网购买:https://www.raspberrypi.com/products/raspberry-pi-4-model-b/
或在其它地方购买(请不要询问我其它地方是哪里)。

我建议使用Ubuntu系统,对于新手来说它比较友好。

刷写SD卡

选取系统

我推荐使用Raspberry官网提供的刷写工具Raspberry Pi Imager,你可以在官网上下载该工具:https://www.raspberrypi.com/software/

若你看不懂英文并且使用Windows系统,可以直接使用此链接下载:https://downloads.raspberrypi.org/imager/imager_latest.exe

随后在电脑上插入Micro SD卡(你可能会需要使用读卡器),启动该工具,依次单击选择操作系统(也可能显示为CHOOSE OS) > Other general-purpose OS > Ubuntu

你将看到许多相似的选项,注意选择Ubuntu Server <版本号(一串数字)> LTS (RPi 4),Server表示服务器,LTS表示长期支持版本,括弧内的RPi 4表示适用于Raspberry Pi 4,你实际看到的括弧内的文字可能是RPi 3/4/400等,只需注意是否包含4即可。

特别的,如果有多个选项符合上述要求,请注意粗体文本下面的描述文字,它应该包含64-bit(意为64位操作系统)和arm64(一种CPU架构,即Raspberry Pi 4B的CPU架构)。

若仍有多个选项符合上述要求,请单击版本号数字最大者。

选取SD卡

此时你已经回到一开始的界面,单击选择SD卡(也可能显示为CHOOSE STORAGE),找到你插入的SD卡并单击它,如果你不能分辨哪一个是你插入的SD,请拔出所有连接到电脑的存储设备。

烧录

按下烧录(也可能显示为WRITE)按钮,等待进度条完成,然后弹出SD卡,插到树莓派上。

这可能需要一段时间,在等待的时间里你可以继续后面的操作。

启动树莓派

将树莓派连接上有线网络(我不想提供WiFi连接的教程,它既复杂又不稳定),然后打开路由表,找出名为Ubuntu的设备,记录其IP地址。

此处示例的IP为192.168.1.107

安装宝塔面板

若你使用Windows,你需要下载ssh客户端,我建议使用PuTTY,若你不懂英文并且使用64位Windows系统,可以直接使用此链接下载:https://the.earth.li/~sgtatham/putty/latest/w64/putty-64bit-0.76-installer.msi

此处不提供安装PuTTY的教程。

使用ssh以用户ubuntu连接上树莓派,此处示例IP地址为192.168.1.107,请根据你的实际情况替换,若你使用Linux则可以输入此命令:

1
ssh ubuntu@192.168.1.107

第一次连接时,系统将会要求你设置密码,请牢记此密码,否则你需要从<#刷写SD卡>重新开始。

连接上树莓派后键入以下命令以安装宝塔面板

1
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh

根据提示操作即可。

安装完成时,将会输出面板信息,包括面板访问地址、默认用户、默认密码信息,请记录下这些内容。

配置面板

用浏览器打开面板地址,你可以按住Ctrl同时用单击URL以快速打开链接。

输入刚刚的默认用户和密码以登录。

按提示继续默认配置即可。

完成后转到左侧栏目中的面板设置,修改安全入口面板用户面板密码

申请eu.org域名

这是一个免费二级域名提供商,老牌且可靠,最重要的是,大部分知名服务商都承认它作为根域。

进入它的注册页:https://nic.eu.org/arf/en/contact/create/

填写信息并注册,请尽可能写地像真的一样,若你看不懂英文请找人帮忙填写。
请注意使用国外的邮箱,例如GMail、Yahoo等知名邮件服务,切勿使用匿名邮件服务,并牢记你填写的密码。
请注意选中Private (not shown in the public Whois)(防止Whois泄露你填写的地址和邮件)和I have read and I accept the domain policy(同意域名条款)。

你会在邮箱中收到一封确认邮件,邮件包含一个确认链接和你的登录用户名,请牢记此用户名,然后单击确认链接激活账户。

https://nic.eu.org/arf/en/login/使用刚才的用户名和你的密码登录,单击New Domain按钮。

Complete domain name一栏填入你想要注册的二级域名,此处示例使用的是:yuuki.eu.org

转到下方的Name Server填写DNS解析服务器信息,然后按Submit提交并等待屏幕上出现成功输出。
特别的,若你使用HE.net提供的解析服务,请在Check for correctness of一栏勾选server names

然后你需要等待人工审核,这是为什么建议你填写信息时要写得真实些的原因。
审核通过后你会收到电子邮件通知,接着我们就可以继续下一步了。

但是,在大多数情况下,你还暂时没有DNS解析服务可用,因此你需要先注册一个DNS服务。
eu.org要求你要注册的域名已经在一个DNS服务商上具有解析记录,允许为尚未注册的域名提供解析的DNS服务商有:

  • DNSPod(国内由腾讯代理)
  • HE.net

这里我们选择HE.net。

注册HE.net

前往它的注册页面:https://ipv6.he.net/certification/register.php

填写信息并注册,随后你会收到确认邮件,单击其中的链接激活账户。

然后打开:https://dns.he.net/
在左侧的登录框中填入你的用户名和密码登录。

在左侧Zone Functions一栏中单击Add a new domain,键入你要注册的eu.org子域名,此处示例使用的是:yuuki.eu.org

单击Add Domain!按钮,若你退回了登录界面,重新登录即可。

页面正中会列出你刚刚填入的域名,单击其侧的Edit Zone按钮,若你退回了登录界面,重新登录再单击此按钮即可。

单击New A按钮,在Name中键入wwwIPv4 Address中键入8.8.8.8,然后单击Submit,若你退回了登录界面,重新执行上述操作。
(此处键入的解析记录仅作注册用,若你认真填写的话也无妨)

然后你就可以在继续在eu.org申请域名了。

注册Cloudflare

接下来我们使用Cloudflare解析域名和内网穿透,前往https://dash.cloudflare.com/sign-up以注册账户,若显示界面不是中文,请在右上角找到语言设置按钮切换为中文。

填入电子邮箱和密码,请牢记此密码。

随后你会收到一封确认邮件,单击其中的链接激活账户。

接着前往https://dash.cloudflare.com/登录账户,登录成功后你会跳转到控制台,单击添加站点,输入你注册的eu.org域名,此处示例使用的是:yuuki.eu.org

Cloudflare会询问你是否导入已有的解析记录,你可以任意选择,随后Cloudflare会要求你更换域名的解析服务,复制它提供的两个解析服务器的域名,然后登录nic.eu.org:https://nic.eu.org/arf/

你会看到你申请的eu.org二级域名,单击其右的按钮,接着在Edit一栏中单击Nameservers,在Name1Name2两栏中填入Cloudflare提供的两个解析服务器域名,接着单击Submit提交修改。

你可能需要等待几小时让Cloudflare确认你已经将DNS解析服务指向它的服务,确认成功后你会收到电子邮件通知。

安装Cloudflared

为穿透电信级NAT,我们需要使用内网穿透服务,以下知名服务器提供此服务:

  • 花生壳
  • Ngrok
  • Cloudflare Tunnel(另名:Argo Tunnel)

这里我们选择Cloudflare Tunnel。

安装其客户端可参考https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installationhttps://pkg.cloudflare.com/#ubuntu-title的教程(英文)。

通过ssh连接上树莓派,执行命令:

1
2
3
4
5
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/ focal main' |
sudo tee /etc/apt/sources.list.d/cloudflare-main.list
sudo curl https://pkg.cloudflare.com/cloudflare-main.gpg -o /usr/share/keyrings/cloudflare-main.gpg
sudo apt-get update
sudo apt-get install cloudflared

接着执行以下命令,授权Cloudflared访问你的域名:

1
cloudflared tunnel login

浏览器不会自动开启,请复制命令行上输出的网址,粘贴到浏览器中开启,选择你刚刚注册的域名,此处示例使用的是:yuuki.eu.org

回到ssh,继续执行命令:

1
cloudflared tunnel create <隧道名称>

隧道名称可以填入你能记住的名字,此处示例使用的是:yuuki410
执行完成后输出的信息请记录下来。

创建一个配置文件:

1
2
3
cd ~/.cloudflared
touch config.yml
name config.yml

粘贴以下内容,然后按Ctrl+O,回车以保存文件:

1
2
3
4
5
6
7
8
tunnel: yuuki410 # 这是示例,请替换你刚刚填写的隧道名称
credentials-file: # 请填入 /用户目录路径/.cloudflared/<隧道UUID>.json,在刚才的输出信息中有
ingress:
- hostname: "yuuki.eu.org" # 这是示例,请替换成你申请的eu.org域名
service: "http://localhost"
- hostname: "*.yuuki.eu.org" # 这是示例,请替换成你申请的eu.org域名
service: "http://localhost"
- service: "http_status:404"

接着按Ctrl+X离开编辑器。

回到ssh,继续执行命令:

1
cloudflared tunnel route dns <隧道名> <域名>

隧道名是你之前填入的隧道名称,此处示例使用的是yuuki410;域名是你申请的eu.org域名,此处示例使用的是yuuki.eu.org

执行:

1
cloudflared tunnel --config config.yml run

在浏览器中打开你注册的域名看看有无内容显示出来。

其它

本教程到此结束。

要保持你的树莓派可以访问,可以参考我的另一篇博客:Raspi NAT 内网穿透§作为服务

要搭建网站,例如博客,请自行上网搜索相应教程。

另外

这篇估计是目前为止我写的最长的一篇博客了,如果本文对你有帮助的话,不妨到本博客的Github仓库给个Star:https://github.com/yuuki410/yuuki410.github.io/