基于 Laravel 开源项目 Pixelfed 构建照片上传和分享平台
项目简介
Pixelfed 是一个基于 Laravel 开发的、免费开源的照片分享平台,运行该项目需要机器具备以下条件:
- HTTP Web 服务器,如 Nginx、Apache;
- 数据库,如 MySQL(5.7+)、PostgreSQL(10+);
- PHP 7.3+;
- 其他程序:Composer、Git、Redis、GD/ImageMagick、JPEGOptim、OptiPNG、PNGQuant。
下面我们以 Homestead 作为本地开发环境演示如何在本地安装并启动该应用。
环境准备
由于 Homestead 已经为我们准备好了 Laravel 项目开发所需要的必要软件环境,我们只需要在宿主机下载项目代码并将其映射到 Homestead 指定目录,然后在 Homestead 配置文件中配置对应站点域名、数据库即可。
比如我在本地 ~/Devlopment/php/laravel
目录下克隆项目代码:
git clone https://github.com/pixelfed/pixelfed
然后进入项目根目录,通过 Composer 安装 PHP 依赖:
cd pixelfed
composer install --no-ansi --no-interaction --optimize-autoloader
安装完成后,运行 cp .env.testing .env
命令生成本地环境配置文件(生成环境请使用 cp .env.example .env
),然后修改如下几个配置项:
APP_NAME="Pixelfed"
APP_URL=https://pixelfed.test
APP_DOMAIN="pixelfed.test"
ADMIN_DOMAIN="pixelfed.test"
SESSION_DOMAIN="pixelfed.test"
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=pixelfed
DB_USERNAME=homestead
DB_PASSWORD=secret
CACHE_DRIVER=file
SESSION_DRIVER=file
接下来运行如下命令生成图片目录软链接到 public
目录:
php artisan storage:link
至此,基础配置就已经完成了。
下面我们打开 Homestead 配置文件 Homestead.yaml
,配置目录映射如下:
folders:
... // 其它目录映射
- map: ~/Devlopment/php/laravel/pixelfed
to: /home/vagrant/pixelfed
配置站点映射如下(指定 PHP 版本为 7.3):
sites:
... // 其它站点
- map: pixelfed.test
to: /home/vagrant/pixelfed/public
php: "7.3"
配置数据库连接信息如下:
databases:
... //其它数据库
- pixelfed
接下来就可以运行如下命令重启 Homestead 让配置生效了:
vagrant reload --provision
然后运行 homestead ssh
命令登录到 Homestead 虚拟机,进入 pixelfed
目录运行数据库迁移命令生成数据表:
我们可以在本地连接到 Homestead 数据库查看生成的数据表:
如果你希望通过 Web 页面访问 Horizon 的话,还要进行如下初始化操作:
php artisan horizon:install
php artisan horizon:assets
然后运行 php artisan horizon
启动 Horizon,当然你也可以通过 Supervisor 来管理 Horizon 进程。
最后我们在本地 /etc/hosts
中新增域名映射:
192.168.10.10 pixelfed.test
就可以通过 http://pixelfed.test
在浏览器中访问 Pixelfed 应用了,Homestead 在配置 Nginx 站点时默认已经支持 HTTPS 访问,但是这是通过 OpenSSL 生成的自签名证书,还没有得到操作系统认可,为此我们需要配置操作系统信任该证书:
以 MacOS 系统为例,按住证书拖到桌面,然后打开「钥匙串」将桌面上的证书拖到系统列表:
然后双击该证书在弹出框选择始终信任该证书:
这样 pixelfed.test
域名的证书就可以被操作系统识别并信任,接下来就可以通过 https://pixelfed.test
访问应用了:
访问应用
注册成功后即可进入应用首页:
注:如果报错,响应状态码为 419,可以去错误日志中定位错误原因,一般是 Redis 门面类和 PHP Redis 扩展提供的 Redis 类同名冲突导致的,可以到
app/Services/UserFilterService.php
引用完整的 Redis 门面类解决:Illuminate\Support\Facades\Redis
。
点击右上角的相机按钮即可上传照片:
发布后即可在时间线上看到刚刚发布的照片:
一次上传多张图片的效果是这样的:
此外你还可以到详情页对照片进行喜欢、评论、分享:
我们也可以通过创建相册将多张照片聚合起来(URL 输入框填写之前创建过的 Post 详情页链接):
你还可以对其他人进行关注,以便看到他们的最新动态:
以及到后台对个人信息进行编辑:
如果对某些功能不熟悉,还可以通过帮助中心 https://pixelfed.test/site/help
进行了解:
另外,还可以通过 Tinker 命令行交互将某个用户升级为后台管理员:
然后我们就可以通过页面右上角用户图标下拉列表中的「Admin」链接进入后台管理页面:
6 Comments
不错不错 通过国外的开源项目加深实践基础
院长,这个项目我本地跑起来了,修改样式后,
cnpm run dev
编译的时候老是跑到一半卡住,实在是没找到办法,跑过来问一下。Homestead虚拟机上跑是会卡 尽量在本地宿主机跑 你要看看卡的时候是不是CPU是不是打满了 还是因为网络或其它原因导致
看了下 确实是CPU满了卡住,在宿主机里运行成功了。谢谢~
发现在虚拟机里挂了好久之后也成功了。。
就是慢 虚拟机里CPU性能只是宿主机的几分之一 npm run 是一个耗CPU资源的命令