时光相册(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 → 设置 → 禁用函数,删除以下函数的禁用:

  • exec
  • shell_exec
  • putenv

时光相册需要 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 创建网站

  1. 宝塔面板 → 网站 → 添加站点

  2. 填写域名,PHP版本选 PHP 7.4

  3. 数据库选 MySQL,记录数据库信息

    5.2 上传文件

  4. photolife-backend.tar.gz 上传到网站根目录

  5. 解压:

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

    5.3 设置权限

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

5.4 安装向导

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

  1. 填写数据库信息
  2. 设置管理员账号密码
  3. 设置访问密码(APP端需要)
  4. 配置存储方式(本地 或 阿里云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 导入项目

  1. 解压 photolife-uniapp.tar.gz
  2. 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           # 认证工具

时光相册 —— 让记忆有处可栖。
【AI分享月】时光相册(私人相册)PHP端+uniappAPP端 第5张插图
【AI分享月】时光相册(私人相册)PHP端+uniappAPP端 第6张插图
【AI分享月】时光相册(私人相册)PHP端+uniappAPP端 第7张插图
【AI分享月】时光相册(私人相册)PHP端+uniappAPP端 第8张插图
【AI分享月】时光相册(私人相册)PHP端+uniappAPP端 第9张插图