本文主要内容
本文介绍如何搭建基于Alist+Lsky的图床系统,包括:
docker-compose.yaml
bashmkdir -p ~/docker_data/alist && cd ~/docker_data/alist && nano docker-compose.yaml
添加以下内容:
yamlservices:
alist:
image: 'xhofe/alist:latest'
networks:
- network
container_name: alist
volumes:
- './alist:/opt/alist/data'
ports:
- '65023:5244'
environment:
- PUID=0
- PGID=0
- UMASK=022
restart: unless-stopped
Aria2-Pro:
container_name: aria2-pro
image: p3terx/aria2-pro
environment:
- PUID=0
- PGID=0
- UMASK_SET=022
- RPC_SECRET=CcARDo2PM7qJazYj1ywpKBNz9VSY # 修改成自己的RPC密码
- RPC_PORT=6800
- LISTEN_PORT=6888
- DISK_CACHE=64M
- IPV6_MODE=false
- UPDATE_TRACKERS=true
- CUSTOM_TRACKER_URL=
- TZ=Asia/Shanghai
- SPECIAL_MODE=rclone
volumes:
- ./aria2-config:/config
- ./downloads:/downloads
- ./alist/alist/temp/aria2:/opt/alist/data/temp/aria2 # 必须共享alist的缓存文件夹,否则alist使用aria2离线下载会报错找不到文件
networks:
- network
#ports:
#- 6800:6800
#- 6888:6888
#- 6888:6888/udp
restart: unless-stopped
# 限制log大小
logging:
driver: json-file
options:
max-size: 1m
networks:
network:
driver: bridge
bashdocker compose up -d
http://your-ip:65023
,按照下面的流程进行配置。
Aria2
。填入地址和密钥。
注意
Aria2地址
中的host为你的aria2容器名称。这里为Aria2-Pro
存储
。这里以OneDrive为例(具体配置流程请参考Alist文档)
注意
如果要开启Lsky的原图保护和动态水印的话,那么对应的存储的WebDAV策略
必须是本地代理
!!!!否则访问Lsky生成的带水印的图片链接会造成404(直接访问/Blog/图片路径
没问题)
基本路径
需要和上面存储里的挂载路径
一致
docker-compose.yaml
bashmkdir -p ~/docker_data/lskypro && cd ~/docker_data/lskypro && nano docker-compose.yaml
添加以下内容:
yamlservices:
lskypro:
image: halcyonazure/lsky-pro-docker:latest
restart: unless-stopped
hostname: lskypro
container_name: lskypro
volumes:
- ./web:/var/www/html/
ports:
- 65022:8089
networks:
- pgsql_network
networks:
pgsql_network:
external: true
注
networks
是用外部数据库网络配置是为了在不暴露数据库端口的情况下,使得在后续网页配置数据库阶段可以直接使用PostgreSQL容器名(参考教程容器名为db
)作为数据库连接host。
bashdocker compose up -d
~/docker_data/pgsql
下,然后写入你想要的Database名称到databases
内。这里以lskypro
为例。
bash#!/bin/bash
set -e
# List of databases to create or ensure exist
databases=("lskypro" "typecho-blog")
# 定义 PostgreSQL 环境变量
DB_USER="typecho_lim" # 替换为您的 Postgres 用户名
DB_NAME="postgres" # 替换为默认的初始数据库名称
# 遍历数据库列表并创建数据库
for db in "${databases[@]}"; do
# 执行 SELECT 命令并将结果传递给 grep
if ! docker compose exec db psql -v ON_ERROR_STOP=1 --username "$DB_USER" --dbname "$DB_NAME" -c "SELECT 1 FROM pg_database WHERE datname='$db'" | grep -q "1"; then
echo "Database '$db' does not exist, creating it..."
docker compose exec db psql -v ON_ERROR_STOP=1 --username "$DB_USER" --dbname "$DB_NAME" -c "CREATE DATABASE $db"
else
echo "Database '$db' already exists."
fi
done
echo "All databases have been created or verified."
http://your-ip:65022
,如图完成配置。
存储策略 -> 创建存储策略
。Alist图床
文件夹里里必须要对应有Blog
这个对于文件夹(可以自行替换,只要保证图床访问域名最后部分在Alist里有对应名称文件夹即可)
注
上文在Alist搭建部分创建的账号的基本路径
和Alist的存储
的挂载路径
一致(这里是图床
),意味着通过此账号的/dav
接口访问时,直是返回的/图床/*
文件夹内的文件(不包括/图床
自己)。(例如访问/dav/Blog/1.png
对应到Alist里是/图床/Blog/1.png
)因此上图里的路径前缀
实际访问的是/图床/Blog
。
如图配置(SSL证书获取不赘述)
配置Custom Location
- 这一步主要是为了解决在设置防盗链后,Lsky自己的thumbnails
失效无法访问的问题
- 配置防盗链。注意这里需要指向到Alist的服务,不是Lksy服务!!
nginxlocaltion ~ ^/(.*\.(jpeg|jpg|png|gif|tif|bmp|ico|psd|webp))$ { proxy_cache public-cache; # 设置缓存区域。进入NPM docker容器,cat /etc/nginx/nginx.conf | grep proxy_cache_path,可以看到有public-cach和private-cache两个选择 proxy_cache_valid 200 301 302 1d; # 当后端返回状态码为 200,301,302时,将该响应缓存 1 天。 proxy_cache_valid 404 1m; # 404 页面缓存 1 分钟 proxy_ignore_headers Cache-Control Set-Cookie; # 由于上有服务器有Cache-Control,会导致前端访问图片返回x-cache:CONFIG_NOCACHE,因此需要ignore上游的Cache-Control add_header X-Cache-Status $upstream_cache_status; # 监控缓存状态,并查看哪些请求被缓存,哪些没有被缓存。HIT:命中缓存,MISS:未命中,可能是第一次请求,BYPASS:缓存被绕过,可能是因为配置或缓存已过期。 proxy_pass http://172.17.0.1:65023/dav/$1 proxy_set_header Authorization "Basic xxxxx"; valid_referers none blocked server_names *.useforall.com ~\.google\. ~\.bing\. ~\.baidu\. ; if ($invalid_referer) { rewrite ^/ http://img.buo.us.kg/i/2025/01/05/zgqtqm.webp; } }
讲解
thumbnails
,那么还是指向Lsky服务自己;jpeg|jpg|png|gif|tif|bmp|ico|psd|webp
这些文件,那么赋值到$1然后在proxy_pass调用;用户名:密码
),然后替换proxy_set_header Authorization
里的xxxxx
为加密后字符串;
valid_referers
相当于一个白名单列表,里面配置的都是放行名单,支持正则表达式;none
表示允许请求报文中没有 referer
的情况,目的是为了让图片能直接通过浏览器地址栏打开;blocked
表示允许请求报文中有 referer
,但值为空或无效的情况,主要是为了应对请求通过防火墙或代理服务器时,referer 的值被删除或伪装的情形;*.useforall.com
是允许的所有子域名;~\.google\.
~\.bing\.
~\.baidu\
. 等是为了不影响各大搜索引擎收录的,当然,如果还想放行其它的网站也可以继续追加,如github等。本文作者:Lim
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!