整体架构

公网入口

树莓派服务暴露到公网,使用的方案是用Frp做内网穿透,在阿里云的公网ECS上搭建了Frp Server,树莓派上跑了Frp Client,实现将ECS的7050端口转发到树莓派的80端口上,在树莓派的80端口启动了Nginx,这样访问ECS的7050端口,就访问到了树莓派上的Nginx上。

ECS上同时托管了其他网站,统一用了Traefik做入口代理服务器监听在了ECS的80端口,便在Traefik上添加树莓派域名并配置反向代理到本地的7050端口,实现通过域名访问到树莓派的Nginx服务。

树莓派上的Nginx服务可以通过公网访问,之后在树莓派内启动的其他服务,都可以通过这个Nginx做转发暴露出去。

Web服务

server {
        listen 80 default_server;

        server_name raspberrypi.v95.xyz;

        client_max_body_size    10m;

        root /home/pi/www/public;

        index index.html index.htm;

        location ^~ /.git {
                return 403;
        }

        location ~ \.php {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php-fpm.sock;
        }

        location ~ /api {
              proxy_pass http://127.0.0.1:5050;
        }
}

Nginx上配置public目录作为网站根目录,静态文件放到这个目录就可以,安装php-fpm配置fastcgi_pass实现同时支持执行php脚本。其他在树莓派上用python开发的api服务,使用gunicron跑在了本地的5050端口,加上配置api路径proxy_pass到本地的5050端口。

CDN与HTTPS

实测外部打开网站的所有请求都到树莓派上速度还可以,请求百毫秒左右差不多都可以响应,可见现在公网质量可以。但考虑树莓派的IO性能拉跨和节省ECS弹性IP流量,优化网站的访问体验,便在阿里云给树莓派域名配置了CDN同时申请了免费的SSL证书配置在CDN上,实现了网站访问加速和支持HTTPS.