2023年会有GW假期,所以我买了一个树莓派,并将其用作Web服务器进行公开

由于GW的原因,我买了树莓派并将其作为Web服务器进行了公开。

由于安装程序的更新等原因,过去的文章内容已经过时,所以我还是上传了看起来比较新的版本。
因为是全球公开的,请在获取安全知识之后再使用。我不能承担责任。
如果有什么危险的地方,请提出编辑请求…

购买树莓派

    • メルカリで購入しました

 

    https://jp.mercari.com/search?keyword=ラズパイ

安装树莓派

据说到了2023年,使用名为Raspberry Pi Imager的安装程序将成为主流。

公式からダウンロードしましょう。
ここが参考になりました https://nw-electric.way-nifty.com/blog/2022/05/post-2cdd01.html

由于从2022年开始,初期用户的用户名设为“pi”,密码设为“raspberry”已经不再存在,请从设置中创建新的账户,以下提供参考。

スクリーンショット 2023-05-07 23.14.09.png

准备服务器

无论是使用Nginx还是Apache,选择一个适当的中间件,例如PHP或Node.js作为应用服务器都可以。
对于不明白说什么的人,请阅读一篇相关的文章。

本次选择的是nginx和nodejs,但不打算面对Apache的C10K问题(应该不会受到访问),建议参考自己喜欢的环境和相关文章来配置(因为树莓派的内存性能等方面可能首先达到限制……)。

如果按照上述文章中的设置来进行,可以输入以下命令来启动服务器。

$ node index.js

当从相同网络访问 http://raspberrypi.local/ 或者 http://192.168.0.23/(可能因人而异的IP地址)时,nginx中间件会访问nodejs服务器。如果设置正确,我们将显示“Hello World”。

命令概要和参考文章
#将软件包更新至最新版本
$ sudo apt-get update
$ sudo apt-get upgrade#中间件
$ sudo apt install nginx -y

#安装nodejs(因为我想使用n,所以进行一些操作)
$ sudo apt install nodejs npm
$ sudo npm install n -g
$ sudo n lts
$ sudo apt purge nodejs npm

#创建应用程序服务器
$ sudo mkdir -p ~/workspace/piapp
$ sudo vi ~/workspace/piapp/index.js
#根据下面的文件进行修改
$ sudo vi /etc/nginx/sites-enabled
#根据下面的文件进行修改

#启动应用程序服务器
$ sudo npm install nodemon -g
$ nodemon ~/workspace/piapp/index.js

#使用nodemon确保即使nodejs进程死亡也能自动重启。
#如果不需要的话,可以使用node ~/workspace/piapp/index.js。

~/workspace/piapp/index.js
const http = require(“http”);
const server = http.createServer(function (req, res) {
res.statusCode = 200;
res.setHeader(“Content-Type”, “text/plain”);
res.end(“Hello World”);
});
server.listen(3000);

location / {
try_files $uri $uri/ =404;
proxy_pass http://localhost:3000;
}

参考文章

参考了在Ubuntu服务器上安装nginx和Node.js来建立Web服务器。
在Ubuntu上使用最新/推荐的Node版本(使用n命令)。

我会将我的家用路由器进行端口转发设置,并将其对全世界公开。

只能从同一网络中的电脑、手机等访问 http://raspberrypi.local/,但如果访问通过 noip 创建的类似 http://example.hopto.org/ 的地址并且能够显示 “Hello World”,则表示可以正常访问。这样就可以在全球范围内公开了。

参考的文章

    安全にラズパイWebサーバーを世界に公開するための手順

让我们使用端口转发功能安全地进行公开。

防火墙设置

使用Ubuntu的默认ufw进行设置
在树莓派上执行以下命令
$ sudo apt安装ufw
$ sudo ufw允许http
$ sudo ufw允许https
$ sudo ufw允许ssh
# 因为需要通过ssh访问,如果失败将无法进行ssh。$ sudo ufw启用

# 重新启动树莓派
$ sudo重启

创建动态域名系统(DDNS)

您的家庭IP地址会定期更改。您可以在下列网站进行确认。

    • アクセス情報【使用中のIPアドレス確認】

 

    JCOMでグローバルIPアドレスを変更しようとした話

如果你家的IP地址经常变动,那么我们需要在树莓派上创建一个账户,以便能够访问那个帮你处理各种问题的网站。请自行详细查找相关信息。

我会使用NOIP网站。NOIP密码将在JCOM路由器设置中需要,因此建议使用不同于常用密码的密码。让Chrome记住它。参考文章:获取No-ip的帐户和DDNS服务器地址的方法。

路由器的DDNS设置

スクリーンショット 2023-05-08 0.03.54.png

端口转发设置

只要能够做到这一点,就能够实现全球化。

スクリーンショット 2023-05-08 0.12.38.png

将网站进行https/ssl化。

最近的Certbot似乎通过官方网站上根据自己的操作系统等设置来执行命令。基本上不要照搬以前的文章。

$ sudo apt -y install snapd
$ sudo snap install core; sudo snap refresh core
$ sudo apt-get remove certbot
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
$ sudo certbot --nginx

自动处理的cron编辑。每月1日,早上4点更新。使用–force-renewal以在剩余30天之前进行每月更新,并重新启动nginx。因为是新建的,所以不确定是否真正有效。

$ sudo crontab -u root -e
00 04 01 * * sudo certbot renew --force-renewal && sudo systemctl restart nginx

如果一小时内失败了5次,那么在一段时间内将无法使用,所以只需进行干运行并查看执行结果即可。

$ sudo certbot renew --dry-run

请在nginx服务器配置中进行补充。请将.pem文件的位置写成通过sudo certbot –nginx命令设置的位置。

        server {
          listen 443 ssl;
          ssl_certificate     /etc/letsencrypt/live/example.hopto.org/fullchain.pem;
          ssl_certificate_key /etc/letsencrypt/live/example.hopto.org/privkey.pem;
        }

在树莓派上进行alias设置。

ykhirao@raspberrypi:~ $ cat ~/.bashrc
alias fix_nginx="sudo vim /etc/nginx/sites-available/default"
alias start="sudo systemctl start nginx && nodemon ~/workspace/piapp/index.js"
alias stop="sudo systemctl stop nginx"

使用https访问,一旦不再显示“未受保护的通信”,就可以了。

スクリーンショット 2023-05-08 0.59.18.png
以下是nginx的配置文件:ykhirao@raspberrypi:~ $ cat /etc/nginx/sites-available/default

server {
listen 80 default_server;
listen [::]:80 default_server;

ssl_certificate /etc/letsencrypt/live/example.hopto.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.hopto.org/privkey.pem;
listen 443 ssl;

root /var/www/html;

index index.html index.htm index.nginx-debian.html index.js;

server_name example.hopto.org;

location ~ /.well-known {
allow all;
}

location / {
try_files $uri $uri/ =404;
proxy_pass http://localhost:3000; # ★追加
}
}

永久地使用forever将nodejs在后台运行。

$ npm install -g forever
$ forever index.js

让我们使用VSCode进行远程开发。

远程开发预览

スクリーンショット 2023-05-08 14.38.35.png
广告
将在 10 秒后关闭
bannerAds