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”已经不再存在,请从设置中创建新的账户,以下提供参考。
准备服务器
无论是使用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サーバーを世界に公開するための手順
让我们使用端口转发功能安全地进行公开。
防火墙设置
在树莓派上执行以下命令
$ sudo apt安装ufw
$ sudo ufw允许http
$ sudo ufw允许https
$ sudo ufw允许ssh
# 因为需要通过ssh访问,如果失败将无法进行ssh。$ sudo ufw启用
# 重新启动树莓派
$ sudo重启
创建动态域名系统(DDNS)
您的家庭IP地址会定期更改。您可以在下列网站进行确认。
-
- アクセス情報【使用中のIPアドレス確認】
- JCOMでグローバルIPアドレスを変更しようとした話
如果你家的IP地址经常变动,那么我们需要在树莓派上创建一个账户,以便能够访问那个帮你处理各种问题的网站。请自行详细查找相关信息。
路由器的DDNS设置
端口转发设置
只要能够做到这一点,就能够实现全球化。
将网站进行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访问,一旦不再显示“未受保护的通信”,就可以了。
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进行远程开发。
远程开发预览