《树莓派不吃灰》第二十三期:在树莓派搭建个人摄影站

本文讲述了作者如何使用SonyZV1M2卡片机拍摄照片后,通过树莓派搭建一个低成本的摄影网站,利用Github开源项目和gulpresize进行图片处理,并通过Nginx实现内网和互联网访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近zhaoolee添置了一台Sony ZV1 M2, 卡片机很小巧,可以塞到兜里,大大提升了出片的速度,为了展示这些照片,本期我会搭建一个运行在树莓派的摄影网站,同时支持外部访问。

在树莓派存放的好处是可以空间便宜,机械硬盘1TB只需要几十块钱,如果使用家庭内网访问网站,即使是超大的原图,也能以极快速度打开。

树莓派通过内网穿透,也能将网站开放到互联网。

最终效果 https://photography.v2fy.com/

image-20231017195700258

点击图片,可以显示大图,宽屏模式下,如果原图保留了拍摄参数,左下角会显示

image-20231018123048480

image-20231018123217978

image-20231018123635558

image-20231018123743026

摄影网站基于Github开源项目 https://github.com/rampatra/photography ,开源项目支持运行gulp resize对摄影图片进行一键裁剪,裁剪后宽度为1024px的图片作为原片放入images/full 文件夹,宽度512px的作为预览图,放入images/thumbs文件夹。

但我希望images/full 放的是最原始的图片,运行gulp resize 后,基于images/full内的图片生成预览图,放入images/thumbs即可,
于是我重写了resize这段逻辑,代码存放在 https://github.com/zhaoolee/photography

photography 这个开源项目是默认基于Github Actions构建,然后使用Github Pages托管静态页,完成发布。但是在中国,Github Pages的图片资源被特色网络搞得无法访问。

为了应对特色网络环境,我把项目改造成了:项目依然托管在Github,但在本地完成静态网站的构建,将构建完成的静态网站资源,通过rsync发送到树莓派特定文件夹,就完成了部署。同时将项目资源发布到Github仓库作为备份。

另外我还做了一些优化,将图片放入fulls文件夹,即可实时自动生成预览图,并实时展示到网页上,原版需要手动运行 gulp resize

实际操作起来,只需将图片放入images/fulls文件夹,运行npm run push , 就完成了发布,并在Github做好了备份。

获取项目, 安装依赖

git clone --depth=1 https://github.com/zhaoolee/photography.git
cd photography
bundle install
npm install

运行项目

npm run dev

浏览器打开http://127.0.0.1:4000 , 就能看到zhaoolee的摄影网站展示资源,删除images/fullsimages/thumbs 内的图片资源,将自己的图片放到images/fulls 刷新浏览器即可看到最终效果

生成静态网站

npm run build

运行以上命令后,会在根目录的_site文件夹生成网站所需的全部资源。

image-20231018150456563

只要将_site下面的内容托管给树莓派的nginx就能对内网访问了。

在Nginx创建一个目录,用于存储_site的静态内容

sudo mkdir /usr/share/nginx/photography.v2fy.com
sudo chown www-data:www-data /usr/share/nginx/photography.v2fy.com

由于nginx默认的用户为www-data, 所以我们创建一个属于www-data 的文件夹,供Nginx使用

image-20231018151304146

在树莓派的etc/nginx/conf.d 目录下新建以.conf 结尾的文件,比如photography.v2fy.com.conf, 并放入以下内容

server {
    listen 8084;
    server_name photography.v2fy.com 127.0.0.1  192.168.50.10;

    location / {
        root /usr/share/nginx/photography.v2fy.com;
        index index.html index.htm;
        try_files $uri $uri/ =404;
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
}

然后使用rsync将_site 的内容传输到/usr/share/nginx/photography.v2fy.com, 命令示例

rsync -avvz --update --no-perms --chown=www-data:www-data --delete ./_site/  root@frp:/usr/share/nginx/photography.v2fy.com/

传输完成后,重启nginx

sudo nginx -t
sudo nginx -s reload

我们可以使用内网访问影视站了

image-20231018151723132

在树莓派的frpc.ini添加以下配置,将本地的8084映射到云服务器的8084

[photography]
type = tcp
local_ip = 127.0.0.1
local_port = 8084
remote_port = 8084

在服务端Nginx配置规则文件/etc/nginx/conf.d/photography.v2fy.com.conf

upstream photography_v2fy_com { server 127.0.0.1:8084; }

server {
    server_name      photography.v2fy.com;
    listen           80;

    #rewrite ^(.*)$ https://$host$1 permanent;

    location / {
        proxy_pass http://photography_v2fy_com;
        proxy_set_header Host $host:80;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  photography.v2fy.com;

    location / {
        proxy_pass http://photography_v2fy_com;
        proxy_set_header Host $host:443;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    ssl_certificate "/etc/nginx/ssl/photography.v2fy.com/fullchain.cer";
    ssl_certificate_key "/etc/nginx/ssl/photography.v2fy.com/photography.v2fy.com.key";
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # Load configuration files for the default server block.

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

证书配置完成后,重启服务端Nginx即可!

image-20231018153742966

小结

随着手机摄影越来越强,相机厂商也越来越卷,而消费者大量购买,也会摊薄研发成本,我们可以用很低的价钱,买到很棒的相机,享受摄影的乐趣,而树莓派摄影网站,可以让我们以极低的成本,将自己的作品展示到互联网。

如果你是一个热爱摄影的人,独立的摄影网站,能为你的爱好增加几分专业,坚持更新自己的摄影网站,学习摄影,查看以往的照片,也能对摄影有更多的思考。

资源下载链接为: https://pan.quark.cn/s/1e68be2bff6a 这些压缩包文件里有大约60个小程序的源码示例,是学习小程序开发的优质资源。小程序是一种无需下载安装就能用的轻量级应用,广泛应用于生活服务、电商购物、社交互动等众多领域。研究这些源码,开发者能深入学习小程序开发技术和最佳实践。wx_app-master.zip可能是一个基础小程序项目模板,涵盖小程序的基本结构和组件使用。学习者可借此了解小程序的目录结构、配置文件,以及wxml、wxss和JavaScript的结合方式。BearDiary-master.zip和weapp-bear-diary-master.zip可能是日记类小程序示例,展示如何实现用户记录、查看和管理个人日记等功能,包括处理用户输入、存储数据和创建交互式界面。WXNews-master.zip和仿知乎日报.zip可能是新闻阅读类小程序的源码,使用网络请求API获取实时新闻数据并展示。学习者能通过这些代码学习处理网络请求、动态加载数据和设计适应性强的布局。wechat-weapp-gank-master.zip可能是一个类似“干货集中营”的技术分享平台小程序示例,涉及数据分类、搜索功能和用户交互设计,可学习如何组织和展示大量数据及实现筛选和搜索功能。Xiaoxiazhihu (知乎日报) 微信小程序 d.zip是仿知乎日报的小程序,涉及数据同步、新闻详情页设计和滑动效果实现,是模仿流行应用界面和用户体验的良好学习案例。仿豆瓣电影-demo.zip提供电影信息查询和展示功能,可能涉及API接口调用、数据解析以及评分和评论系统实现,有助于开发者理解如何集成外部服务和处理展示多媒体内容。仿今日头条app.zip类似今日头条的小程序,涵盖新闻推荐算法、个性化推荐和推送通知等复杂功能,能让开发者学习处理大数据流和提供个性化用户体验。
资源下载链接为: https://pan.quark.cn/s/76d9f06f4cda Vue.js 是一款由尤雨溪开发的轻量级前端 JavaScript 框架,凭借简洁的 API、高效的虚拟 DOM、组件化设计以及强大的生态系统,在现代 Web 开发领域广受欢迎。在开发“基于 Vue 的电商后台管理系统”时,Vue.js 发挥了核心作用,助力构建出高效且易于维护的管理界面。 Vue.js 的核心特性包括:虚拟 DOM,通过计算差异仅更新必要部分,避免直接操作 DOM 产生的性能损耗;双向数据绑定,借助 v-bind 和 v-model 指令,实现视图与模型数据的同步;指令系统,如 v-if、v-for、v-on 等,扩展 HTML 行为,增强模板功能;组件化,允许开发者创建可复用的 UI 部件,每个组件拥有独立的视图和数据逻辑,便于独立开发、测试与重用。 在电商后台管理系统中,常见的组件有商品列表、订单管理、用户管理等,它们通过 props 接收父组件数据,并通过事件向父组件传递信息,组件可嵌套以构建复杂 UI 结构。对于多页面应用,Vue.js 结合 Vue Router 实现页面跳转,Vue Router 支持动态路由匹配、命名路由、路由懒加载等功能,助力单页应用(SPA)的构建。Vuex 作为 Vue.js 的官方状态管理工具,可用于集中管理全局共享状态,如用户登录状态、购物车信息等,通过 actions、mutations 和 getters 实现状态的改变与获取。Vue.js 通常搭配 Axios 库进行 API 请求,处理后端接口数据,在电商后台管理系统中,涉及商品的增删改查、订单的创建更新、用户信息同步等操作,都需要与后端交互。Vue.js 支持使用 Jest 或 Mocha 等测试框架进行单元测试和集成测试,这对于电商后台管理系统尤为重要,能够及时发现并
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值