lychee是啥

lychee是一个基于php实现的动态网站,可以实现一个轻量的功能简单的相册,但是由于本人对php毫无概念,又不愿意使用docker,所以配置过程较为艰难,再加上网上资料太少,官网的文档更是点到为止,这里先做一下笔记。绝对不是涩图太多了所以才想到搞相册的,虽然但是这玩意功能确实有限
注,这里的操作都是在arch linux系统下完成的

安装

PHP

发行版包管理器直接安装即可,(写这篇文章的时候archlinux的php包里是8.2的版本),需要安装php-fpm,对应数据库mod,根据发行版的配置文件开启mod.
archlinux是在php.ini里打开。但是官方给的说明里面mod也可以在/etc/php/conf.d/目录里面启用(不过这个目录下面已经有imagick.ini了,所以还是在这个里头启用吧),但是php.ini里面已经给了一堆注释过的mod名称,这就很蠢了。
需要额外安装的mod有php-gd,Imagemagick,我这里比较懒就直接用sqlite了
应该要开这些东西

1
2
3
4
5
6
7
extension=pdo_sqlite
extension=sqlite3
extension=zip
extension=gd
extension=bcmath
extension=curl
extension=exif

可能需要并运行systemctl edit php-fpm,更改选项为ProtectSystem=false

ProtectSystem 可以设置为 true/false/full. 设置为 true, /usr, /boot 被设置为只读. 设置为 full, /usr, /boot, /etc 被设置为只读. 设置为 false, 则应用可以正常访问上述目录. 这个选项可以保护系统目录不会被应用修改, 建议所有长时间运行的服务开启该选项.

lychee

下载本体

直接git clone

1
git clone https://www.github.com/LycheeOrg/Lychee /var/www/html/Lychee

然后到目录下运行,当然需要安装composer先

1
composer install --no-dev

目录权限

owner需要改成服务器的用户,archlinux下nginx的用户名叫http

.env会在安装后自动从.env.example中生成。

然后public下开2775权限

此时其实你也可以对.env进行一些基本设置,如url,database,和储存目录进行设置

nginx

这里是一个示例配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
server {
listen 80;
server_name <mydomain>.<tld>;

##### Path to the Lychee public/ directory.
root /var/www/Lychee/public/;
index index.php;

# If the request is not for a valid file (image, js, css, etc.), send to bootstrap
if (!-e $request_filename)
{
rewrite ^/(.*)$ /index.php?/$1 last;
break;
}

# Serve /index.php through PHP
location = /index.php {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;

# Mitigate https://httpoxy.org/ vulnerabilities
fastcgi_param HTTP_PROXY "";

######### Make sure this is the correct socket for your system
fastcgi_pass unix:/run/php-fpm/php-fpm.sock; # archlinux下面是这个地址
fastcgi_index index.php;
######## You may need to replace $document_root with the absolute path to your public folder.
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE "post_max_size=100M
max_execution_time=200
upload_max_filesize=30M
memory_limit=300M";
fastcgi_param PATH /usr/local/bin:/usr/bin:/bin;
include fastcgi_params;
}
# Deny access to other .php files, rather than exposing their contents
location ~ [^/]\.php(/|$) {
return 403;
}

# [Optional] Lychee-specific logs
error_log /var/log/nginx/lychee.error.log;
access_log /var/log/nginx/lychee.access.log;

# [Optional] Remove trailing slashes from requests (prevents SEO duplicate content issues)
rewrite ^/(.+)/$ /$1 permanent;
}

然后启动nginx和php-fpm

配置

如果上面的配置都完成了的话,现在你应该可以走域名来访问这个服务,然后你会进入一个配置检查页面,可能会让你对目录权限,插件什么的进行调整。

exiftool

这是用来获取图片元数据的,该工具需要额外安装,并在./vendor/lychee-org/php-exif/lib/PHPExif/Adapter/Exiftool.php中的tool-path当中填写exiftool的位置,可以用which exiftool获取其位置。然后到设置的图形界面里的全部设置里头把has_exiftool设置为1

命令行导入图片

官方给了从命令行导入图片的cli命令php artisan lychee:sync /path/to/import --album_id="album ID" --owner_id=1 --resync_metadata --import_via_symlink=%s --skip_duplicates=%s,可以通过一些方式实现自动导入不过还是挺废的我觉得,目前发现有’[‘ ‘]’的目录无法被导入,虽然看到issue里提过甚至说已经被修改了,但是貌似还是有问题的。