没错,我承认这个标题写的很好吃……
话说我家里那只树莓派 4B 8GB 放了两年了,除了吃灰还是吃灰~ 于是我想用它做一些非同寻常的事情,比如搭服务器。之前建网站都是用的 GitHub Pages,这次我们整个真实的 LAMP 环境。话不多说,下面开始搭建运行环境~
(不用担心树莓派的电费,一年下来也才 30 多块钱(前提是不插显示器))
1. 准备事项
有些同学可能还以为树莓派是吃的,实际上,它是一种微型电脑,性能杠杠的,和 iPhone 5S 上那块 A7 差不多,但是当服务器够用了。其实树莓派最大的特点就是功耗低,配置最强的 4B 型号一年下来 30 多块电费(见上图),Zero 2 W 更是只有惊人的一顿沙县小吃钱(10 快左右)。用它搭服务器,可以说吊打某某云服务器啊!!!
1.1 硬件购买
没有树莓派的家人们看过来。树莓派如果用来搭服务器,你可以请你身在大不列颠及北爱尔兰联合王国或是美利坚合众国的朋友帮你代购树莓派 Zero 2 W,价格只有 15 美刀(相当于 RMB 不到一张红色大钞)。如果觉得 15 刀太贵了还可以买 Zero W,性能会差一点,但是价格达到了惊人的白菜价:10 美刀(相当于两杯喜茶的¥)。但如果你没有这样的朋友怎么办呢?没办法,在国外麦不到一百的 Zero 2 W 在国内要花上 400 来块,别问我为什么,都是关税啊~
那你只能启用第二个选择:树莓派 400。这是一种键盘式电脑,配置与目前树莓派顶峰 4B 平齐,价格也很稳定,535¥,是树莓派 4B 的一半。别看它价格贵,配置是上面 Zero 2 W 的八倍左右。
树莓派主机选好了(千万买单主板,不要买赠送配件的,防被坑),再买一根树莓派官网原装的五福三安(5V / 3A)当作供电的和一张闪迪或者雷克沙(不能买杂牌)的 16GB TF 卡(当然如果你壕买更大的也可以)当作硬盘,还有一个外壳 + 小风扇当作散热(不然你的树莓派可以当作烤肉盘和标题一模一样)还有一根 Micro-HDMI 转 HDMI(400 用)或者一根 Mini-HDMI 转 HDMI(Zero 2 W 及 Zero W 用)还有一只有线键盘(必须要有线)服务器硬件 ok!
当然原本就有树莓派的同学上面的那段话你们可以当作耳边风~
1.2 软件知识普及
很多人还对服务器的了解不是很深刻。服务器简单来说,我们访问一些网页(比如百度),它身后是靠服务器来维持运行的,换句话说,服务器就是网站(意会就行),服务器搭建起来了别人就可以访问你搭建在树莓派上的网站。
服务器上的操作系统也不一样,不是传统的 Windows,而是 Linux 的众多发行版。Linux 和 Windows 一样,都是操作系统,但是我们这里使用的 Linux 只有命令行界面,也就是一行一行敲代码的黑色界面。但不要为此感到恐 fang,相信我,你会很快上手 Linux。这里我们选择 Linux 的发行版之一 Ubuntu Server。
至于服务器它本身,我们使用 LAMP 环境。这里的 LAMP 不是指台灯,而是 Linux(上述的操作系统)+ Apache(服务器软件)+ MySQL(数据库软件)+ PHP(前端编程软件)首字母的缩写。如果对这方面没有很了解的人知道一点就可以,如果有资深大佬想用 Nginx 也可以,但配置文件需要自己打~
说了那么多,下文就开始准备服务器环境~
2. 操作系统安装
安装前,我们需要准备的软件有:balenaEtcher,打开链接,选择文件名格式为 balenaEtcher-Portable-1.x.x.exe 的文件下载,然后直接运行就可以。
然后下载 Ubuntu Server 系统镜像。打开 Ubuntu 下载页,下滑到 Ubuntu Server 下载页(如下图),选择那个绿色按键 Download 64-bit。如果你的派是 2Bv1.1 及更早版本或者 Zero W 型号的,选择 Download 32-bit。
由于是国外服务器,下载需要一些时间(当然几百 MB 也不大)。下载完之后是 XZ 压缩包,要先解压。
解压之后得到后缀名为 .img 文件即为正常~
运行刚刚下载的 balenaEtcher,选择第一项 Flash from file;
选择刚刚解压的那个 .img 文件,选择打开;
把 TF 卡插进读卡器(一定要 USB 3.0 的,要不然速度慢如龟)然后把读卡器插进电脑,选择第二个 Select Target,找到你的 TF 卡,打上勾,记得这里不要选成别的 U 盘,要不然 U 盘被格了你哭都来不及~
最后把你 TF 卡里的重要数据备份出来(全新的不用),开始 Flash!
这时候就开始烧录了。这里每秒写 10MB 以上是正常速度,如果低于这个速度你要看一下你的 USB 接口或者读卡器是不是 USB 3.0。还有最后如果说 Flash failed,那么恭喜你买到了杂牌卡,赶紧去换一张闪迪或者雷克沙~
验证这一步可以 Skip~;
如果出现这个界面,大功告成!
3. SSH 连接及初始化
3.1 树莓派初始化
把树莓派接上电源,然后等一会儿,直到 Ubuntu 提示 ubuntu login: ,连上有线键盘,输入 ubuntu 回车,然后再一次输入 ubuntu 回车(这里输入的 ubuntu 由于一些原因不显示,盲打就行),然后再次输入 ubuntu 回车(还是不显示),然后输入你想给树莓派设的密码(还是不显示)回车,再输一遍新密码回车(还是不显示),ok!
下次如果要登录时用户名使用 ubuntu 密码使用刚刚创建的那个~
然后输入以下代码,敲一行回车一次~
sudo -i
nano /etc/netplan/50-cloud-init.yaml
打开 nano 编辑器后,添加以下代码,注意缩进,第一行前面要如下面一样空出四格,之后的几行按照下面的缩进来就行,wifi 名和 wifi 密码填真实的:
wifis:
wlan0:
dhcp4: true
optional: true
access-points:
"wifi名":
password:
"wifi密码"
然后按下以下快捷键保存设置:
Ctrl + X
y
回车
然后输入以下代码,敲一行回车一次~
systemctl enable wpa_supplicant
systemctl start wpa_supplicant
netplan generate
systemctl daemon-reload
netplan apply
恭喜你,树莓派初始化完成!你可以关闭显示器了,毕竟显示器太耗电了~ 还有,从这一刻开始,你的树莓派就准备一直开着机吧,服务器是不能关机的~
3.2 SSH 连接树莓派
SSH,是一种远程连接协议。我们这里使用 SSH,一方面是为了节省显示器的电费(比树莓派贵多了),还有一方面由于 Ubuntu Server 没有桌面环境,也没有浏览器这些工具,我们为了方便设置树莓派(比如换源)这些需要涉及到很多资源的步骤就比较方便,要不然你的手会废~
在将树莓派接上电源之前我们先要安装 SSH 连接软件 PuTTY,选择 64-bit x86 后面的那串链接下载 PuTTY~
安装过程不再赘述,一路 Next 即可。
打开浏览器 192.168.1.1 打开路由器配置界面(每一个路由器的可能不一样,我的是水星 MERCURY,但大体一样)点击设备列表;
找到 ubuntu 下面的 IP 地址,那是树莓派的 IP 地址~
打开 PuTTY,红箭头指向的框输入刚刚记下的 IP 地址,然后点 Open~
点 Accept;
输入 ubuntu 回车,输入刚刚你设的密码回车(不显示),出现下图界面即 ok!恭喜你,服务器系统部分搭建完成!
3.3 换源
我们等会搭建服务器需要下载很多软件,这些软件都需要从国外的 ports.ubuntu.com 软件源下载。由于国外的服务器非常慢,所以我们要换成国内源~
国内源与国外源的软件一模一样,所以不需要担心换了源之后软件无法下载~
PuTTY 输入以下命令:
sudo -i
nano /etc/apt/sources.list
把文件里面每一行前面都加上 # 号把它们注释掉(已经加过的不用),然后加入以下代码(复制后直接在 PuTTY 窗口右键以粘贴):
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-proposed main restricted universe multiverse
(你想想如果没有 SSH 你手敲这些代码是不是得累死)
(如果你在阅读这篇文章时已经出了更新版的 Ubuntu Server,请访问这个链接手动选择你的 Ubuntu 版本然后复制~)
这些代码把 ubuntu 中的软件源更换到了国内的清华源。输入以下快捷键保存退出~
Ctrl + X
y
回车
如果有遇见 Malformed 什么报错的可以参考这篇文章:链接
然后输入下面的代码更新软件源:
apt-get update && apt-get upgrade
当树莓派提示下面的文字,输入 y 回车;
Need to get 245 MB of archives.
After this operation, 77.8 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
觉得树莓派链接 Wi-Fi 下载慢的可以给它怼进去一根千兆网线(当然你的机型要有网线口),下载速度立刻快到飞起,也不影响 SSH 连接。
当你的 PuTTY 出现这个界面,按下 Tab 再回车;
当你的 ubuntu 重新出现这个命令提示符,说明换源成功!
4. 服务器 LAMP 环境安装
4.1 控制自己的服务器
如果你没有 Linux 开发经验,又应该怎么控制自己的服务器呢?下面给出我之前写过的一篇文章,里面有一些简单的 Linux 指令,Linux 常用指令https://rpiws.github.io/2022/03/31/%E6%A0%91%E8%8E%93%E6%B4%BE%E5%85%A5%E6%89%8B004%EF%BC%9A%E7%BB%88%E7%AB%AF%E5%9F%BA%E6%9C%AC%E5%91%BD%E4%BB%A4
还有 nano 编辑器的简单使用,也是我之前写的:
4.2 安装 LAMP 环境
首先安装 LAMP 软件包:
apt-get install apache2 apache2-utils libapache2-mod-php php php-curl php-mysql mysql-server
(我突然想起了之前在 Windows 上架设 LAMP 的辛酸史,花了三个小时啊)
你如果想进入 mysql 命令行可以输入 mysql -uroot,没有密码~
然后浅测试一下 Apache 与 PHP 是否正常工作。
重启 Apache 服务器:
apachectl restart
输入以下三行代码:
rm /var/www/html/index.html
touch /var/www/html/index.php
echo "<?php phpinfo(); ?>" >> /var/www/html/index.php
浏览器访问树莓派的 IP 地址,显示下图算成功~
还可以划到下方验证 PHP 是否与 MySQL 连接,如果出现下图即为连接成功。
恭喜你!万事俱备,只欠东风,服务器已架设完毕,我们现在要做的是怎么把服务器公开出来给别人看到。
5. 内网穿透
粽锁粥汁,树莓派的内网 IP 地址只能连接这个路由器的人使用,你的朋友想访问?门都没有~
网络有分内网和外网,内网指的就是你的路由器,内网的内容只有连接上你的路由器才能访问。外网它指的是对每一位用户开放的网站,哪里都可以访问。让自己的树莓派进入外网有两个方法:购买公网 IP 与内网穿透。第一种方法我们可以非常快的排除,因为普通家庭用户即使有钱也买不了,因为公网 IP 只针对企业出售~ 那我们只有第二种方法了:内网穿透。
内网穿透,顾名思义就是把你的内网内容映射到外网,简单来说就是内网和外网之间加了个隧道,别人可以通过隧道从外网访问你内网的服务器。最关键的是内网穿透不需要一分钱,免费的啊啊啊啊~
这里我们使用的内网穿透工具是 Sunny-Ngrok,下面就开始内网穿透~
5.1 Sunny-Ngrok 部署
这里我们为什么选择 Sunny-Ngrok,是因为它是全世界唯一一个支持固定域名的并且免费的内网穿透服务器。其他的内网穿透服务器,比如 Sunny-Ngrok 的爸爸 ngrok,要么加钱,要么一会给你换一个域名,还不能绑定自己的域名,别人访问很麻烦。打开 Sunny-Ngrok,选择注册,然后按照步骤注册;
登录之后点击实名认证,然后实名认证一下。由于这个实名认证机制需要调用第三方 API,可能需要一点点马内。交完马内再点击实名认证,然后跟着操作走,直到提示下图即可。
然后点隧道管理——开通隧道,选择最下面那个漂亮国免费的服务器,不管咋样都同意;
然后隧道协议填 http(我这边填错了填成 https 了),名称和前置域名随便填,后面的全放空,点确定,再点一次确定;
浏览器复制那个隧道 ID(我打码那个地方);
打开 PuTTY 输入以下代码,最后一行你刚刚复制的隧道 id 要改成真实的;
sudo -i
cd /opt
wget https://www.ngrok.cc/sunny/linux_arm.zip?v=2.1
mv 'linux_arm.zip?v=2.1' linux_arm.zip
unzip linux_arm.zip
cd linux_arm
screen -S sunny
./sunny clientid 你刚刚复制的隧道 id
第一行提权,第二 ~ 五行下载并解压 Sunny-Ngrok 客户端。第六行新建一个 screen 后台程序,因为我们要让 Sunny-Ngrok 在后台跑,前台我们自己要做其他事情。第七行启动内网穿透程序。红圈的那个程序就是我们内网穿透之后外网的链接。复制他,在浏览器中打开,如果出现刚刚的 PHP 页面就说明穿透成功了。
穿透成功后别忘了 PuTTY 按下 Ctrl + A + D 退出 screen 后台,让 Sunny-Ngrok 在后台跑,需要复原的时候输入 screen -r sunny 即可。如果你想停止内网穿透,先进入 Sunny-Ngrok 页面,再按下 Ctrl + C 即可。
6. 申请域名与 DNS 解析
到此我们的服务器运维部分的搭建就告一段落了。 但是还没有完全完。你说你网站打不开,不是都前功尽弃了吗?而且你的朋友每次访问你的网站,都要输那么一长串,那多麻烦啊?而且 Sunny-Ngrok 原生的打开速度确实有点慢。但可惜,这两个都要¥。但是好人帮忙不能帮一半,经过我七七四十九天的折腾,终于是发现了免费的域名申请网站与免费的 DNS 解析网站 —— Freenom 和 Cloudflare。
拥有了自己的域名与 DNS 解析之后,别人就可以只输入很小串的域名便可以飞快地访问你的网站,Nice 不 Nice?下面就开始折腾~
6.1 Freenom 免费域名申请
打开 Freenom 域名查找网站(Freenom 和 Sunny-Ngrok 是不是同一家的 DNS 解析,慢的速度都一样),查找你想要注册的域名。免费的域名后缀只有 .tk .ml .ga .cf .gq 五种,其他都是要¥的。(你发现没 Freenom 可以买一些我们平时买不到的域名,比如 .org .me)比如我们这里想注册 biteit.tk,填写完点击 Check Availability;
当你看到 Yes, biteit.tk is available!,旁边还有一个 0.00 USD 时,说明你可以以 0 元的价格买下这个域名,四舍五入等于免费(它好像本来就是免费)。点击 Checkout,转到购买页。
购买页里如果显示没有域名那么按照刚刚的方法重新申请一遍,如果有域名,右边的 3 Months @ FREE 改成 12 Months @ FREE 也就是申请一年。到期了还可以免费续。点击 Continue。
这里填你的邮箱注册 Freenom 账号,建议填国外的邮箱,比如 icloud yahoo gmail outlook,我填的是 outlook。国内的邮箱我不确定能不能收到注册邮件。如果蓝色按键点不动可以尝试换成 Firefox 或者用手机浏览器访问 freenom。
然后按照上面的要求注册账号,如果让你填公司你就随便填。记得时刻注意你的邮箱,及时查收 Freenom 注册邮件。登录完之后勾选同意协议点击 Complete Order。如果点不动可以科学上网,推荐一个西柚加速器,说多了文章过不了审。
打开这个链接,如果你看见了你刚刚注册的域名,这说明你的域名注册成功了!
恭喜你,你已经有了一个自己的域名,以后朋友访问你的网站只需要输入这个域名就可以了。当然在此之前我们还要做第二步:申请免费 DNS 解析。如果没有 DNS 解析你的域名也没用~
6.2 Cloudflare 免费 DNS 解析
DNS 解析,是别人访问你网站的一个枢纽,它的作用就是把域名和服务器连接起来。国内的 DNS 解析大部分都要¥还要备案(备案要等 7 天)。经过不懈努力我终于找到了一家美国的免费 DNS 解析网站:Cloudflare。
访问 Cloudflare 控制面板,在这之前需要先登录。没有账号的先注册一个;
点击蓝色的“添加站点”;
输入你刚刚注册的域名;
选择下方的 Free 免费套餐;
再次打开下面的链接,选择你刚刚申请的域名 Manage Domain;
域名管理界面https://my.freenom.com/clientarea.php?action=domains
在 Management Tools 一栏中选择 Nameserver;
选择 Use custom nameservers,然后在 Cloudflare 控制面板下面的“替换为 Cloudflare 的名称服务器”下面的两个服务器填入 freenom 下面的栏中。
点击 Change Nameservers,静待亿会儿,直到你的邮箱收到 Cloudflare 发来的邮件就代表 DNS 解析成功。那如何让 Sunny-Ngrok 和你刚刚申请的域名挂上钩呢?如果你使用的是其他内网穿透服务器,那想挂上钩就必须要加 100 以上的米每年,如果你不交这个米它还会给你一会变换一个默认域名。但是,Sunny-Ngrok 不用!打开 Cloudflare,点击左边的 DNS,点击添加记录。
类型选择 CNAME,名称填你刚刚注册的那个域名,内容填 free.idcfengye.com,点确定;
打开 Sunny-Ngrok 控制台,选择隧道管理,选择编辑,可能需要重新登录;
域名类型选择自定义域名,自定义域名一栏填你刚刚注册的那个域名,点击确定修改;
打开 PuTTY,先 screen -r sunny 进入 Sunny-Ngrok 后台,然后 Ctrl + C 停止内网穿透,然后 ./sunny clientid 隧道id 重新启动。按下 Ctrl + A + D 退出后台,浏览器访问你刚刚注册的域名,你会惊人地发现:可以访问了!恭喜你,还不赶紧去配上 BGM 好运来~
到这里我们树莓派服务器的运维部分就完成了。这个系列长期更新,下期开始拿树莓派当私有云~