使用 Pi 进行自托管
自托管!
(咳咳,这可能需要一段时间……我的情况就是这样)
如果您正在寻找一份详尽的自托管指南,那么这篇指南可能并不完全符合您的需求,但它至少能让您大致了解如何根据自身情况进行操作。通过本指南,您或许能更好地理解托管的工作原理。
另外,本项目我使用的是树莓派 4B 型。
以下是简短版本。
总结:
-
安装 Linux
-
启用无线网络
-
安装 Nginx 和 Node.js
-
配置UFW
-
配置路由器
-
配置 Nginx 配置文件以监听指定的端口和文件夹
-
通过谷歌域名注册您的网站
-
将 Google 域名指向您的设备
-
安装 Certbot 以进行 SSL 认证
-
服务于网络!
笔记:
本教程大部分内容都在 Linux 终端中完成,并假设您已启用 SSH 或拥有 SSH 客户端,并且正在使用 VS Code。因此,如果您还不熟悉终端或 SSH,本教程将是一个不错的入门选择。
1. 安装 Linux
使用 Raspberry Pi Imager 安装 Linux Server /Ubuntu 20.04 UTS。
您需要单独下载 Ubuntu 20.04 UTS 镜像。
为此,我建议使用至少 32 GB 的 SD 卡。
成功启动 Linux 系统后,就可以将树莓派连接到互联网了。
2. 启用无线网络
如何在 Ubuntu Linux 系统中通过终端连接 WiFi
请确定您的无线网络接口名称:
有几种方法可以识别您的网络接口名称。您可以使用 ip 命令、已弃用的 ipconfig 命令,或者查看此文件:
ls /sys/class/net
这样应该就能看到所有可用的网络接口(以太网、Wi-Fi 和环回接口)。无线网络接口名称以“w”开头,通常类似于 wlan0。
:~$ ls /sys/class/net
eth0 lo wlan0
然后使用 wifi 接口详细信息编辑 Netplan 配置文件。
sudo nano /etc/netplan/50-cloud-init.yaml
YAML 文件对空格、缩进和对齐方式非常敏感。请勿使用 Tab 键输入空格,而应在出现缩进的地方使用 4 个空格(或 2 个空格,以 YAML 文件中已使用的空格数为准)。
network:
ethernets:
eth0:
dhcp4: true
optional: true
version: 2
wifis:
wlan0:
dhcp4: true
optional: true
access-points:
"SSID_name":
password: "WiFi_password"
使用以下命令生成配置:
sudo netplan generate
现在来应用它:
sudo netplan apply
你应该已连接网络。
如果不行,重启Linux系统应该就能解决问题。
3. 安装 Nginx 和 Node
只需依次运行以下命令即可。
sudo apt-get update
sudo apt-get install nginx
sudo apt-get install nodejs
4. 配置UFW
这样就能让UFW运行,并允许我们需要的端口进行通信。
启用端口 22 后,您就可以通过您选择的任何应用程序远程 SSH 连接到您的 PI,我推荐使用 VS Code,并且最好也设置 SSH 密钥。
sudo ufw enable
sudo ufw allow 443
sudo ufw allow ssh
sudo ufw allow from 0.0.0.0/24 to any port 22
5. 配置路由器
登录您的路由器,并将 IP 地址设置为仅通过端口 443 进行通信,以便稍后进行 https 访问和 SSL 证书设置。
通常情况下,你会找到你的树莓派的 IP 地址,并将端口分配给 443,这样就只允许来自网络外部的 https 流量,同时仍然允许你在网络内部使用端口 22。
如果您需要帮助,这里有一个链接,因为路由器的种类很多。
https://www.netspotapp.com/how-to-log-into-router.html
6. 配置 Nginx 配置文件,使其监听指定的端口和文件夹
用于管理 Nginx 和应用更新的实用命令
重新启动并应用所做的更改
sudo systemctl restart nginx
测试当前 Nginx 配置是否可行
nginx -T
请务必随时应用更改。
现在转到文件位置:/etc/nginx/sites-available/default
并将内容更改为以下内容:
server {
root /usr/share/nginx/html;
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
location / {
proxy_pass http://Your IP Address:port number;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
server {
if ($host = Yoursite.com) {
return 301 https://$host$request_uri;
}
listen 80 ;
listen [::]:80 ;
server_name Yoursite.com;
return 404;
location / {
satisfy any;
allow 127.0.0.1;
deny all;
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}
}
接下来,转到文件位置 /etc/nginx/nginx.conf
并将该文件修改为如下所示。
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
server {
listen 80;
}
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip off;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
7. 通过谷歌域名注册您的网站
登录/注册domains.google.com,选择“获取新域名”,然后继续完成获取域名的过程。
一旦您获得了域名:
前往 Google Domains 并登录 → 选择您的域名 → 在左侧边栏选择 DNS → 在合成记录下选择动态 DNS → 点击添加 → 收集 Google Domains 为您的动态 DNS 合成记录生成的用户名和密码
8. 将 Google 域名指向您的设备
a.对于使用动态 IP 地址的用户,请让 Google Domains 指向并每 30 分钟更新一次报告的 IP 地址。
您可以从任意目录运行此脚本,无论它存储在何处,都能正常运行。
nano ~/dns_update_script.sh
wget https://username:password@domains.google.com/nic/update?hostname=yourdomain.com -qO dns_update_results.txt
wget https://username:password@domains.google.com/nic/update?hostname=www.yourdomain.com -qO- >> dns_update_results.txt
echo " Last run: `date`" >> dns_update_results.txt
chmod +x ~/dns_update_script.sh
该脚本将网页下载到文本文件中(第一个 wget 命令创建文本文件,第二个 wget 命令将内容追加到文本文件中),然后我还将当前日期和时间追加到文本文件中。
请记住,在生成 DNS 时,将 username:password 替换为 Google Domains 提供的您的用户名和密码。
另外,别忘了将yourdomain.com和www.yourdomain.com替换成您网站的域名。
b.设置一个定时任务,让脚本在每个小时开始时运行:
crontab -e
0 * * * * ~/dns_update_script.sh
9. 安装 Certbot 以进行 SSL 认证
请按照 Certbot 网站上提供的说明进行操作。
https://certbot.eff.org/instructions
10. 服务于网络!
使用 Node.js 和 Express 将您的 Web 应用程序部署到 Web,或者只是搭建一个静态网站。
网站默认存储位置应为:
/usr/share/nginx/html
从该目录,您可以添加您的静态网站或从您的自托管网站运行的应用程序。
恭喜!!!
此时你应该可以在浏览器中输入“yourdomain.com”了。
查看已启用并验证 HTTPS 的新网站。
文章来源:https://dev.to/markhelmsglitch/self-hosting-with-a-pi-1dpi

