Pages

Saturday, 11 September 2021

利用树莓派+内网穿透, 在本地机器上搭建一个可供外网访问的网站

 

1:前言

在购买了树莓派之后,我一直在找寻它的用处,最近想学基于Python的网站后端框架Django,而树莓派以linux为操作系统,有天生作为网站服务器的优点。以下列举部分。

  1. 相比于直接购买高配置VPS,使用树莓派+廉价低配VPS做内网穿透,更加划算。
  2. 相比于使用windows作为网站服务器联系,树莓派可以保持24*7不宕机,避免每次开启电脑都要重新运行服务器程序的麻烦。

开始之前,需要说明的一些软硬件配置。

  1. 4B+树莓派,4g内存+32g内存卡
  2. 一台低配置带ipv4地址的VPS。本人使用Ubuntu系统
  3. 一个域名,需要将A记录解析到VPS的ipv4地址上。非必须,可直接用vps的ip地址访问也是可以的。

2:树莓派上搭建Django服务器

安装Django教程:《Django安装

在树莓派上安装Django。

创建第一个Django项目

在使用python3 manage.py runserver 0.0.0.0:8000打开服务后,

在shell终端上使用

1
curl 127.0.0.1:8000

是可以访问新建的网站的。

但是,使用树莓派内网ip:8000在相同局域网下的笔记本,无法访问网站,必须修改项目配置文件。后期可修改回来,因为我们需要在树莓派上也安装nginx以作为生产环境,现在只是测试。修改项目下的setting.py文件

1
2
DEBUG = False
ALLOWED_HOSTS = ["*"]

此时,在笔记本上访问树莓派上面的网站,应该已经能够访问了。

3:内网穿透

为了让外网的人,能够使用ip地址或者域名,访问到树莓派上的网站,需要做内网穿透,首先,需要让VPS能够访问到树莓派。

使用花生壳之类的软件也能实现内网穿透,且不用VPS,但是这类软件收费比较高,所以我们可以用VPS自己搞一个内网穿透。

使用p2p组网的内网穿透软件,比如n2n、zerotier、frp。在github上都能搜得到。frp是一个端口转发的软件,不需要借助别人提供的服务器来做导航,如果只是做网站是非常推荐的,因为这不设及后面讲的nginx做反向代理的步骤,个人是很推荐的。但,如果你有多个VPS或者多个电脑,想组成局域网,建议使用zerotier。我这里使用的是zerotier,因为它配置比较简单。并在此基础上做了网站的反向代理,以实现外网访问内网,和frp直接做端口转发的原理是不同的。

我们需要分别在树莓派和vps上安装zerotier。

1
curl -s https://install.zerotier.com | sudo bash

然后在zerotier官网创建一个账号,并创建一个网络。可参考教程:

内网穿透工具——ZeroTier One的使用

建好网络后,获得十六位网络码

然后,在树莓派和vps输入命令

1
zerotier-cli join 网络码

即可加入此网络

然后回到zerotier官网,管理这两个网络,让他们之间能够互相ping通。此间步骤比较多,需要耐心自学。

内网穿透实现后,在vps上不仅应该能够ping通树莓派虚拟局域网分配的ip,而且使用虚拟局域网ip:端口,应该能够访问到树莓派上的网站。

在vps使用

1
curl http://ip:port

访问。获取html代码,则内网穿透可以访问网站了。

4:Nginx反向代理

为了让所有外部的人,都能够通过域名或者vps公网ip访问到树莓派的网站,需要在vps上安装nginx,作反向代理。

原理大概是,外部用户,访问vps的ip,浏览器默认不输入端口则访问80端口,http对应80,https对应443。比如用户输入http://x.x.x.x或者http://example.com则默认访问vps的80端口。

我们需要为vps开放80端口,并将80端口的访问请求转到树莓派的网站端口。

安装nginx

1
apt-get install nginx

配置nginx,新建配置文件,并配置nginx

1
2
touch /etc/nginx/conf.d/respberry.conf	#新建配置文件
vim /etc/nginx/conf.d/respberry.conf #编辑配置文件

在文件中输入配置

1
2
3
4
5
6
7
server{
listen 80
server_name example.com #你的域名,或者vps的公网ip
location / {
proxy_pass http://树莓派虚拟局域网ip:网站端口
}
}

保存退出。

1
service nginx restart	#重启nginx

这样通过域名访问vps就能将请求转给树莓派了。外网就能够访问到树莓派了。

5:参考资料

内网穿透工具——ZeroTier One的使用

Nginx配置文件nginx.conf中文详解

No comments:

Post a Comment