Mobile wallpaper
1427 字
7 分钟

Docker部署Lsky图床并配合Openlist网盘存储

2025-01-07
2025-09-14
浏览量 加载中...
本文主要内容

本文介绍如何搭建基于Openlist+Lsky的图床系统,包括:

  1. 使用Docker部署Openlist作为存储后端
  2. 使用Docker部署Lsky作为图床前端
  3. Nginx反向代理配置与防盗链设置

2025-8-29:使用Openlist代替Alist

组件说明#

  • Openlist: 作为存储后端,用于对接各类网盘
  • Lsky: 作为图床前端,提供图片上传和管理功能
  • Nginx: 提供反向代理和防盗链功能
  • PostgreSQL: 为Lsky提供数据存储(配置参考

部署流程#

配置Openlist#

基本配置#

  1. 创建并编辑docker-compose.yaml
    Terminal window
    mkdir -p ~/docker_data/openlist && cd ~/docker_data/openlist && nano docker-compose.yaml
    添加以下内容:
    services:
    openlist:
    image: 'openlistteam/openlist:latest-aio'
    networks:
    - network
    container_name: openlist
    volumes:
    - './openlist:/opt/openlist/data'
    ports:
    - '65023:5244'
    environment:
    - PUID=0
    - PGID=0
    - UMASK=022
    restart: unless-stopped
    networks:
    network:
    driver: bridge
  2. 启动Openlist服务
    Terminal window
    docker compose up -d
  3. 访问http://your-ip:65023,按照下面的流程进行配置。
    • 配置Aria2。填入地址和密钥。 image.png
      注意

      Aria2地址中的host为你的aria2容器名称。这里为Aria2-Pro

    • 配置存储。这里以OneDrive为例(具体配置流程请参考Openlist文档image.png
      注意

      如果要开启Lsky的原图保护和动态水印的话,那么对应的存储的WebDAV策略必须是本地代理!!!!否则访问Lsky生成的带水印的图片链接会造成404(直接访问/Blog/图片路径没问题)

    • 创建一个用于访问图床的账号。注意这里的基本路径需要和上面存储里的挂载路径一致 image.png

配置Nginx Proxy Manager反代#

  1. 如图配置(SSL证书获取不赘述) image.png

配置Lsky#

基本配置#

  1. 创建并编辑docker-compose.yaml
    Terminal window
    mkdir -p ~/docker_data/lskypro && cd ~/docker_data/lskypro && nano docker-compose.yaml
    添加以下内容:
    services:
    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。

  2. 启动LskyPro服务
    Terminal window
    docker compose up -d
  3. 在PostgreSQL数据库中创建一个Database。根据上面教程部署PostgreSQL数据库后,复制下面脚本内容到~/docker_data/pgsql下,然后写入你想要的Database名称到databases内。这里以lskypro为例。
    #!/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."
  4. 访问http://your-ip:65022,如图完成配置。

    image.pngimage.png

  5. 添加一个新存储策略。存储策略 -> 创建存储策略。Openlist图床文件夹里里必须要对应有Blog这个对于文件夹(可以自行替换,只要保证图床访问域名最后部分在Openlist里有对应名称文件夹即可) image.png

    上文在Openlist搭建部分创建的账号的基本路径和Openlist的存储挂载路径一致(这里是图床),意味着通过此账号的/dav接口访问时,直是返回的/图床/*文件夹内的文件(不包括/图床自己)。(例如访问/dav/Blog/1.png对应到Openlist里是/图床/Blog/1.png)因此上图里的路径前缀实际访问的是/图床/Blog

配置Nginx Proxy Manager#

  1. 如图配置(SSL证书获取不赘述) image.png

  2. 配置Custom Location

    • 这一步主要是为了解决在设置防盗链后,Lsky自己的thumbnails失效无法访问的问题
    image.png
    • 配置防盗链。注意这里需要指向到Openlist的服务,不是Lksy服务!!
    CleanShot 2025-01-08 at 21.54.57@2x.png

    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-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;
    }
    }
    讲解
    1. 如果访问链接内包含thumbnails,那么还是指向Lsky服务自己;
    2. 其次,如果访问的是jpeg|jpg|png|gif|tif|bmp|ico|psd|webp这些文件,那么赋值到$1然后在proxy_pass调用;
    3. 把创建的Openlist账户的用户名和密码做base64加密(输入用户名:密码),然后替换proxy_set_header Authorization里的xxxxx为加密后字符串;
    4. valid_referers 相当于一个白名单列表,里面配置的都是放行名单,支持正则表达式;
    5. none 表示允许请求报文中没有 referer 的情况,目的是为了让图片能直接通过浏览器地址栏打开;
    6. blocked 表示允许请求报文中有 referer,但值为空或无效的情况,主要是为了应对请求通过防火墙或代理服务器时,referer 的值被删除或伪装的情形;
    7. *.useforall.com 是允许的所有子域名;
    8. ~\.google\. ~\.bing\. ~\.baidu\. 等是为了不影响各大搜索引擎收录的,当然,如果还想放行其它的网站也可以继续追加,如github等。
Docker部署Lsky图床并配合Openlist网盘存储
https://blog.useforall.com/posts/4/
最后更新于 2025-09-14,距今已过 63 天

部分内容可能已过时

评论区

目录