1427 字
7 分钟
Docker部署Lsky图床并配合Openlist网盘存储
本文主要内容本文介绍如何搭建基于Openlist+Lsky的图床系统,包括:
- 使用Docker部署Openlist作为存储后端
- 使用Docker部署Lsky作为图床前端
- Nginx反向代理配置与防盗链设置
2025-8-29:使用Openlist代替Alist
组件说明
- Openlist: 作为存储后端,用于对接各类网盘
- Lsky: 作为图床前端,提供图片上传和管理功能
- Nginx: 提供反向代理和防盗链功能
- PostgreSQL: 为Lsky提供数据存储(配置参考)
部署流程
配置Openlist
基本配置
- 创建并编辑
docker-compose.yaml添加以下内容:Terminal window mkdir -p ~/docker_data/openlist && cd ~/docker_data/openlist && nano docker-compose.yamlservices:openlist:image: 'openlistteam/openlist:latest-aio'networks:- networkcontainer_name: openlistvolumes:- './openlist:/opt/openlist/data'ports:- '65023:5244'environment:- PUID=0- PGID=0- UMASK=022restart: unless-stoppednetworks:network:driver: bridge - 启动Openlist服务
Terminal window docker compose up -d - 访问
http://your-ip:65023,按照下面的流程进行配置。- 配置
Aria2。填入地址和密钥。
注意Aria2地址中的host为你的aria2容器名称。这里为Aria2-Pro - 配置
存储。这里以OneDrive为例(具体配置流程请参考Openlist文档)
注意如果要开启Lsky的原图保护和动态水印的话,那么对应的存储的
WebDAV策略必须是本地代理!!!!否则访问Lsky生成的带水印的图片链接会造成404(直接访问/Blog/图片路径没问题) - 创建一个用于访问图床的账号。注意这里的
基本路径需要和上面存储里的挂载路径一致
- 配置
配置Nginx Proxy Manager反代
- 如图配置(SSL证书获取不赘述)

配置Lsky
基本配置
- 创建并编辑
docker-compose.yaml添加以下内容:Terminal window mkdir -p ~/docker_data/lskypro && cd ~/docker_data/lskypro && nano docker-compose.yamlservices:lskypro:image: halcyonazure/lsky-pro-docker:latestrestart: unless-stoppedhostname: lskyprocontainer_name: lskyprovolumes:- ./web:/var/www/html/ports:- 65022:8089networks:- pgsql_networknetworks:pgsql_network:external: true注networks是用外部数据库网络配置是为了在不暴露数据库端口的情况下,使得在后续网页配置数据库阶段可以直接使用PostgreSQL容器名(参考教程容器名为db)作为数据库连接host。 - 启动LskyPro服务
Terminal window docker compose up -d - 在PostgreSQL数据库中创建一个Database。根据上面教程部署PostgreSQL数据库后,复制下面脚本内容到
~/docker_data/pgsql下,然后写入你想要的Database名称到databases内。这里以lskypro为例。#!/bin/bashset -e# List of databases to create or ensure existdatabases=("lskypro" "typecho-blog")# 定义 PostgreSQL 环境变量DB_USER="typecho_lim" # 替换为您的 Postgres 用户名DB_NAME="postgres" # 替换为默认的初始数据库名称# 遍历数据库列表并创建数据库for db in "${databases[@]}"; do# 执行 SELECT 命令并将结果传递给 grepif ! 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"; thenecho "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"elseecho "Database '$db' already exists."fidoneecho "All databases have been created or verified." - 访问
http://your-ip:65022,如图完成配置。

- 添加一个新存储策略。
存储策略 -> 创建存储策略。Openlist图床文件夹里里必须要对应有Blog这个对于文件夹(可以自行替换,只要保证图床访问域名最后部分在Openlist里有对应名称文件夹即可)
注上文在Openlist搭建部分创建的账号的
基本路径和Openlist的存储的挂载路径一致(这里是图床),意味着通过此账号的/dav接口访问时,直是返回的/图床/*文件夹内的文件(不包括/图床自己)。(例如访问/dav/Blog/1.png对应到Openlist里是/图床/Blog/1.png)因此上图里的路径前缀实际访问的是/图床/Blog。
配置Nginx Proxy Manager
-
如图配置(SSL证书获取不赘述)

-
配置Custom Location
- 这一步主要是为了解决在设置防盗链后,Lsky自己的
thumbnails失效无法访问的问题

- 配置防盗链。注意这里需要指向到Openlist的服务,不是Lksy服务!!
localtion ~ ^/(.*\.(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-Controladd_header X-Cache-Status $upstream_cache_status; # 监控缓存状态,并查看哪些请求被缓存,哪些没有被缓存。HIT:命中缓存,MISS:未命中,可能是第一次请求,BYPASS:缓存被绕过,可能是因为配置或缓存已过期。proxy_pass http://172.17.0.1:65023/dav/$1proxy_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调用; - 把创建的Openlist账户的用户名和密码做base64加密(输入
用户名:密码),然后替换proxy_set_header Authorization里的xxxxx为加密后字符串; valid_referers相当于一个白名单列表,里面配置的都是放行名单,支持正则表达式;none表示允许请求报文中没有referer的情况,目的是为了让图片能直接通过浏览器地址栏打开;blocked表示允许请求报文中有referer,但值为空或无效的情况,主要是为了应对请求通过防火墙或代理服务器时,referer 的值被删除或伪装的情形;*.useforall.com是允许的所有子域名;~\.google\.~\.bing\.~\.baidu\. 等是为了不影响各大搜索引擎收录的,当然,如果还想放行其它的网站也可以继续追加,如github等。
- 这一步主要是为了解决在设置防盗链后,Lsky自己的
Docker部署Lsky图床并配合Openlist网盘存储
https://blog.useforall.com/posts/4/ 最后更新于 2025-09-14,距今已过 63 天
部分内容可能已过时
Lim's Blog