时光相册(PhotoLife)— 自托管私人相册
记录生活,留住每一刻的温柔
【童年】通过百度网盘分享的文件:时光相册(自用相…
链接:点击下载
提取码:q8qa
复制这段内容打开「百度网盘APP 即可获取」
注:APP内图标须自配,自己寻找倒入即可
这是什么?
时光相册是一款轻量自托管相册程序,专为追求隐私与品质的你设计。把回忆牢牢掌握在自己手中——无论是日常随手拍下的晚霞、孩子成长的珍贵记录,还是旅行途中的风景大片,都能帮你妥善安放。
- 隐私至上:数据在自己服务器,不依赖任何第三方云
- 全端覆盖:PC网页 + UniApp移动端(iOS/Android/H5)
- ️ 灵活存储:本地 / 阿里云OSS / 腾讯云COS / 七牛云 / 又拍云
- 视频支持:自动提取封面、时长,全屏播放
- 时光轴:日历视图,按日期梳理生活轨迹
功能一览
| 模块 | 功能 |
|---|---|
| 图片 | 多图上传、拍照上传、瀑布流展示、全屏查看、长按保存/删除 |
| 视频 | 视频上传、自动提取封面+时长、全屏播放、长按保存/删除 |
| 浏览 | 日期分组、日历选择器、照片/视频Tab切换、下拉刷新 |
| 安全 | 访问密码保护、独立管理员系统、APP端Token认证 |
| ️ 存储 | 本地/OSS/COS/七牛/又拍云,OSS直传+中转回退 |
| ️ Web端 | 响应式布局、批量删除、管理后台 |
| APP端 | 原生Android应用、上传进度条、视频时长显示 |
技术栈
- 后端:PHP 7.4+ / 8.0 + MySQL,纯原生开发,无框架依赖
- 前端:纯 JS/CSS/HTML,无 Vue/React 等框架
- 移动端:UniApp(Vue 2),支持 iOS / Android / H5
- 视频处理:ffmpeg 自动提取封面和时长
源码说明
| 包名 | 内容 |
|---|---|
photolife-backend.tar.gz |
后端源码(含PC网页前端+管理后台) |
photolife-uniapp.tar.gz |
UniApp移动端源码 |
搭建教程
一、服务器环境要求
| 组件 | 最低要求 | 推荐 |
|---|---|---|
| 系统 | CentOS 7+ / Ubuntu 18+ | CentOS 7.9 |
| Web服务器 | Nginx 1.18+ | Nginx 1.22 |
| PHP | 7.4+ | PHP 7.4 / 8.0 |
| MySQL | 5.7+ | MySQL 5.7 |
| ffmpeg | 2.8+ | ffmpeg 4+(视频封面必须) |
二、宝塔面板安装
# CentOS 安装宝塔
yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec
安装后在宝塔面板中安装:Nginx、PHP 7.4(或8.0)、MySQL 5.7
三、PHP 配置(重要!)
3.1 启用 exec 函数
宝塔面板 → 软件商店 → PHP → 设置 → 禁用函数,删除以下函数的禁用:
execshell_execputenv
时光相册需要
exec调用 ffmpeg 生成视频封面,不开启则视频无封面。
3.2 安装 PHP 扩展
宝塔面板 → 软件商店 → PHP → 设置 → 安装扩展,确保已安装:
fileinfo(必须)openssl(必须)curl(必须)gd(推荐)mbstring(推荐)-
pdo_mysql(必须)3.3 修改上传限制
宝塔面板 → 软件商店 → PHP → 设置 → 配置修改:
upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 300
memory_limit = 256M
四、安装 ffmpeg
# CentOS 7
yum install -y epel-release
yum install -y ffmpeg
apt install -y ffmpeg
ffmpeg -version
️ 必须安装!否则视频无封面、时长显示0.00
五、部署后端
5.1 创建网站
-
宝塔面板 → 网站 → 添加站点
-
填写域名,PHP版本选
PHP 7.4 -
数据库选
MySQL,记录数据库信息5.2 上传文件
-
将
photolife-backend.tar.gz上传到网站根目录 -
解压:
cd /www/wwwroot/你的域名 tar xzf photolife-backend.tar.gz5.3 设置权限
chmod -R 755 .
chmod -R 777 uploads/
chmod -R 777 config.php # 安装前需可写
5.4 安装向导
浏览器访问 http://你的域名/install.php,按提示完成:
- 填写数据库信息
- 设置管理员账号密码
- 设置访问密码(APP端需要)
-
配置存储方式(本地 或 阿里云OSS)
5.5 安装后清理
rm -f /www/wwwroot/你的域名/install.php
六、Nginx 伪静态
宝塔面板 → 网站 → 设置 → 伪静态:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
七、APP端编译
7.1 安装 HBuilderX
下载 点击下载
7.2 导入项目
- 解压
photolife-uniapp.tar.gz -
HBuilderX → 文件 → 导入 → 选择
photolife-app目录7.3 修改配置
编辑 config.js:
const BASE_URL = 'http://你的域名/api';
7.4 配置 manifest.json
-
App模块配置:勾选 Gallery、Camera、VideoPlayer
-
App权限配置:添加存储和相机权限
7.5 编译/打包
-
运行到手机:HBuilderX → 运行 → 运行到手机或模拟器
-
打包APK:HBuilderX → 发行 → 原生App-云打包 → Android
八、阿里云OSS配置(可选)
| 配置项 | 说明 |
|---|---|
| AccessKeyId | 阿里云RAM用户的AccessKey ID |
| AccessKeySecret | 阿里云RAM用户的AccessKey Secret |
| Bucket | OSS存储桶名称 |
| Endpoint | OSS区域节点 |
OSS CORS 配置(直传模式需要):
- 来源:
* - 允许 Methods:
GET, POST, PUT, DELETE, HEAD - 允许 Headers:
*
不配置CORS也能用,系统会自动回退到服务器中转上传。
常见问题
Q: 图片加载不出来?
APP端不支持HTTP图片,时光相册已使用服务器代理方式加载,确保 media.php 文件完整。
Q: 视频无封面?
服务器未安装 ffmpeg,参考第四节安装。
Q: 长按删除提示 Unauthorized?
确保后端 media.php 已部署最新版本。
Q: 上传大文件失败?
修改 PHP 上传限制(参考3.3节),同时检查 nginx 配置:
client_max_body_size 100m;
后端文件结构
├── api/
│ ├── media.php # 媒体接口(列表、详情、删除)
│ ├── upload.php # 上传接口(含ffmpeg封面提取)
│ ├── auth.php # 认证接口
│ ├── app.php # APP专用接口
│ ├── dates.php # 日期查询接口
│ └── serve.php # 媒体代理加载
├── includes/
│ ├── db.php # 数据库连接
│ ├── functions.php # 公共函数
│ ├── storage.php # 存储驱动(本地/OSS/COS/七牛/又拍云)
│ └── exif.php # EXIF信息解析
├── assets/ # PC前端资源
├── admin/ # 管理后台
├── uploads/ # 本地上传目录
├── config.php # 配置文件
├── index.php # 前端入口
└── install.php # 安装向导
UniApp文件结构
photolife-app/
├── pages/
│ ├── index/index.vue # 首页(瀑布流+日历)
│ ├── viewer/viewer.vue # 全屏查看器
│ └── upload/upload.vue # 上传页
├── components/
│ ├── MediaGrid/ # 瀑布流网格组件
│ ├── Calendar/ # 日历选择器组件
│ └── UploadProgress/ # 上传进度组件
├── api/index.js # API封装
├── config.js # 全局配置
└── utils/auth.js # 认证工具
时光相册 —— 让记忆有处可栖。





请登录后发表评论
注册
停留在世界边缘,与之惜别