🌟 时光相册(PhotoLife)— 自托管私人相册

记录生活,留住每一刻的温柔

【童年】通过百度网盘分享的文件:时光相册(自用相…
链接:https://pan.baidu.com/s/11LvXjw4PogUyua6isvrwDA?pwd=1u48 
复制这段内容打开「百度网盘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+(视频封面必须)

二、宝塔面板安装

bash
1 2 3

# 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 → 设置 → 禁用函数,删除以下函数的禁用:

  • exec
  • shell_exec
  • putenv

时光相册需要 exec 调用 ffmpeg 生成视频封面,不开启则视频无封面。

3.2 安装 PHP 扩展

宝塔面板 → 软件商店 → PHP → 设置 → 安装扩展,确保已安装:

  • fileinfo(必须)
  • openssl(必须)
  • curl(必须)
  • gd(推荐)
  • mbstring(推荐)
  • pdo_mysql(必须)

3.3 修改上传限制

宝塔面板 → 软件商店 → PHP → 设置 → 配置修改:

text
1 2 3 4 5

upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 300
memory_limit = 256M

四、安装 ffmpeg

bash
1 2 3 4 5 6 7 8 9 10 11 12

# CentOS 7
yum install -y epel-release
yum install -y ffmpeg


# Ubuntu
apt install -y ffmpeg


# 验证
ffmpeg -version

⚠️ 必须安装!否则视频无封面、时长显示0.00

五、部署后端

5.1 创建网站

  1. 宝塔面板 → 网站 → 添加站点
  2. 填写域名,PHP版本选 PHP 7.4
  3. 数据库选 MySQL,记录数据库信息

5.2 上传文件

  1. photolife-backend.tar.gz 上传到网站根目录
  2. 解压:
    ```bash

cd /www/wwwroot/你的域名
tar xzf photolife-backend.tar.gz

text
1 2 3 4 5 6 7 8 9 10 11



#### 5.3 设置权限


```bash

chmod -R 755 .
chmod -R 777 uploads/
chmod -R 777 config.php   # 安装前需可写

5.4 安装向导

浏览器访问 [http://你的域名/install.php,按提示完成:](http://你的域名/install.php`,按提示完成:)

  1. 填写数据库信息
  2. 设置管理员账号密码
  3. 设置访问密码(APP端需要)
  4. 配置存储方式(本地 或 阿里云OSS)

5.5 安装后清理

bash
1 2

rm -f /www/wwwroot/你的域名/install.php

六、Nginx 伪静态

宝塔面板 → 网站 → 设置 → 伪静态:

nginx
1 2 3 4

location / {
try_files $uri $uri/ /index.php?$query_string;
}

七、APP端编译

7.1 安装 HBuilderX

下载 HBuilderX](https://www.dcloud.io/hbuilderx.html))

7.2 导入项目

  1. 解压 photolife-uniapp.tar.gz
  2. HBuilderX → 文件 → 导入 → 选择 photolife-app 目录

7.3 修改配置

编辑 config.js

javascript
1 2

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 配置:

nginx
1 2

client_max_body_size 100m;

📁 后端文件结构

text
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

├── 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文件结构

text
1 2 3 4 5 6 7 8 9 10 11 12 13

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           # 认证工具

时光相册 —— 让记忆有处可栖。
描述
描述
描述
描述
描述