Skip to content

🚀 使用 Docker Compose 部署 lucky

以下是使用 Docker Compose 部署 Lucky 的详细教程。Lucky 是一款功能强大的网络工具,集成了动态域名解析(DDNS)、端口转发、反向代理、SSL 证书管理、STUN 内网穿透等多种网络功能,能帮助你轻松实现内网服务的远程安全访问。

🚀 Lucky 简介与核心优势

Lucky 是一个集多种网络功能于一体的开源工具,特别适合家庭实验室、NAS 用户以及需要远程访问内网服务的场景。

主要功能: * 动态域名解析(DDNS):支持多家域名服务商(如 Cloudflare、阿里云、腾讯云 DNSPod 等),即使没有公网 IPv4,也能利用 IPv6 进行解析。 * SSL 证书管理:支持通过 ACME(例如 Let's Encrypt)自动申请和续签泛域名证书,轻松实现 HTTPS 加密访问。 * 反向代理:通过 Web 服务规则,实现端口复用和统一的安全访问入口,让你可以使用不同的子域名或路径访问内网的不同服务。 * STUN 内网穿透:在 NAT1(全锥形 NAT)网络环境下,可以帮助你实现内网穿透,无需公网 IP 也能将内网服务暴露到外网。 * 端口转发:支持界面化管理转发规则。 * 网络唤醒 & 计划任务:支持远程唤醒网络设备,并可设置定时任务。 * 网络存储:可挂载磁盘和网盘,功能类似 Alist。

核心优势: * 功能全面:一个工具整合多种常用网络功能。 * 易于使用:提供友好的 Web 图形化界面进行配置。 * 自动化和安全:支持 SSL 证书自动续期,并提供安全加固选项。

⚙️ 一、部署前准备

  1. 环境要求

    • 已安装 DockerDocker Compose
    • 建议系统内存不少于 512MB
    • 确保服务器或 NAS 的 16601 端口未被占用(这是 Lucky 的默认管理端口)。
  2. 环境检查 在终端中执行以下命令,确认 Docker 环境正常: bash docker --version docker-compose --version

  3. 创建项目目录 建议创建一个独立的目录来存放 docker-compose.yml 文件和相关数据卷: bash mkdir -p /opt/docker/lucky cd /opt/docker/lucky

🛠️ 二、配置 Docker Compose 文件

在你创建的目录下(例如 /opt/docker/lucky),新建一个 docker-compose.yml 文件,并写入以下内容。这里以你提供的配置为基础,并参考了搜索结果的建议。

#version: '3.8'  # 建议使用较新的版本以更好地支持特性

services:
  lucky:
    image: gdy666/lucky  # 可以考虑锁定一个具体版本,例如 gdy666/lucky:2.15.7,以保持稳定性
    container_name: lucky
    #sysctls:
    #- net.ipv6.conf.all.disable_ipv6=1
    network_mode: host  # 使用 host 网络模式,可以避免端口映射的复杂性,并同时支持 IPv4 和 IPv6
    #ports:
      #- "16602:16601"  # 映射 IPv4 和 IPv6 的 16601 端口
      #- "443:443"      # 映射 IPv4 和 IPv6 的 443 端口
    # 移除了 network_mode: host,默认使用桥接模式
    volumes:
      - ./goodluck:/goodluck # 主配置存储目录,用于持久化 Lucky 的配置和证书
      - /mnt/10t/file/lucky:/mnt/10t/file/lucky
      # 你可以根据需要挂载其他目录,例如用于文件服务的目录
      # - /path/to/your/files:/mnt/files

      #- ./mnt:/mnt
      #- /mnt/10t/file/1:/mnt/1
      #- /mnt/10t/file/lucky:/mnt/2
      #- /mnt/10t/file/webdav:/mnt/webdav
      #- /mnt/10t/file/media:/mnt/media
      #- /mnt/10t/videos:/mnt/videos
      #- ./mnt/0:/mnt/0
    restart: always  # 推荐使用 unless-stopped
    #environment:
      # 尝试设置环境变量,但可能被忽略或需要特定名称
      # 根据实际效果,你可能需要查找 Lucky 项目确切的变量名
      #STGUI_ADDRESS: "0.0.0.0:16601"  # 改为监听 16601,但优先级可能低于配置卷
      #PUID: "0"
      #PGID: "0"
    # 资源限制可根据你的实际硬件情况调整
    deploy:
      resources:
        limits:
          #cpus: '5'
          #memory: 2G
          cpus: '1.0'  # 限制使用 1 个 CPU 核心,可根据需要调整
          memory: 1G    # 限制使用 1G 内存,可根据需要调整


#太坑内网ipv6没法直接访问,无法锁定到本设备。

# 以下部分用于定义自定义网络(可选,但推荐用于更复杂的设置)
#networks:
  #default:
    #driver: bridge
    #enable_ipv6: true  # 在自定义网络中启用 IPv6
    #ipam:
      #config:
        #- subnet: 172.50.0.0/16  # IPv4 子网
          #gateway: 172.50.0.1
        #- subnet: 2001:db8::/64  # IPv6 子网示例,需替换为真实可用网段

#http://ip:16601/  默认账号密码是666


关键配置说明

配置项 说明与建议
image 建议锁定具体版本(如 gdy666/lucky:2.15.7)以获得更稳定的体验。使用 latest 标签可能会自动更新到最新版。
network_mode: host 强烈推荐使用此模式。它使容器与主机共享网络命名空间,简化配置,并原生支持 IPv6,对于 DDNS 和端口转发等功能非常友好。
volumes ./goodluck:/goodluck 用于持久化保存 Lucky 的所有配置、证书文件。删除容器后,只要此目录存在,配置就不会丢失。
restart: unless-stopped 容器退出时总是重启,除非被手动停止。
资源限制 设置合理的 CPU 和内存限制,防止 Lucky 过度消耗资源。1核1G对于大多数场景已足够。

注意:使用 host 网络模式时,容器内使用的端口直接映射到主机,无需在 ports 部分再次声明。在 host 模式下,在 ports 中映射端口是无效的,甚至可能导致冲突。

#vps小鸡版
#version: '3.8'  # 建议使用较新的版本以更好地支持特性

services:
  lucky:
    image: gdy666/lucky
    container_name: lucky
    #sysctls:
    #- net.ipv6.conf.all.disable_ipv6=1
    network_mode: host
    #ports:
      #- "16602:16601"  # 映射 IPv4 和 IPv6 的 16601 端口
      #- "443:443"      # 映射 IPv4 和 IPv6 的 443 端口
    # 移除了 network_mode: host,默认使用桥接模式
    volumes:
      - ./goodluck:/goodluck
      #- /mnt/10t/file/lucky:/mnt/10t/file/lucky
      #- ./mnt:/mnt
      #- /mnt/10t/file/1:/mnt/1
      #- /mnt/10t/file/lucky:/mnt/2
      #- /mnt/10t/file/webdav:/mnt/webdav
      #- /mnt/10t/file/media:/mnt/media
      #- /mnt/10t/videos:/mnt/videos
      #- ./mnt/0:/mnt/0
    restart: always
    #environment:
      # 尝试设置环境变量,但可能被忽略或需要特定名称
      # 根据实际效果,你可能需要查找 Lucky 项目确切的变量名
      #STGUI_ADDRESS: "0.0.0.0:16601"  # 改为监听 16601,但优先级可能低于配置卷
      #PUID: "0"
      #PGID: "0"
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 2G


#太坑内网ipv6没法直接访问,无法锁定到本设备。

# 以下部分用于定义自定义网络(可选,但推荐用于更复杂的设置)
#networks:
  #default:
    #driver: bridge
    #enable_ipv6: true  # 在自定义网络中启用 IPv6
    #ipam:
      #config:
        #- subnet: 172.50.0.0/16  # IPv4 子网
          #gateway: 172.50.0.1
        #- subnet: 2001:db8::/64  # IPv6 子网示例,需替换为真实可用网段

#http://ip:16601/  默认账号密码是666

🚀 三、启动与初始化

  1. 启动 Lucky 服务docker-compose.yml 文件所在目录执行: bash docker-compose up -d 此命令会拉取镜像(如果本地没有)并在后台启动容器。

  2. 检查服务状态 bash docker-compose ps # 或者 docker ps | grep lucky 如果看到 Lucky 容器的状态为 Up,说明服务已成功启动。

  3. 访问 Web 管理界面并初始化

    • 打开浏览器,输入 http://<你的服务器IP地址>:16601
    • 使用默认账号和密码登录:
      • 用户名666
      • 密码666
    • 首次登录后,务必立即修改默认密码!
      • 登录后,在管理界面中找到 "设置""系统设置" 选项。
      • 修改管理员用户名和密码,并妥善保存。
      • 根据提示,你可能还需要设置 "安全入口" 以增强安全性。

⚙️ 四、基础功能配置指南

成功登录 Lucky 后,你可以开始配置其核心功能。

  1. 配置动态域名解析(DDNS) 这是实现远程访问的第一步,尤其对于获取公网 IP 较难的网络环境(如多数家庭宽带),IPv6 是一个很好的选择。

    • 前提:你需要拥有一个域名(例如从阿里云、腾讯云等处购买)。
    • 步骤
      1. 在 Lucky 左侧菜单栏进入 【动态域名】
      2. 点击 【添加任务】
      3. 任务名称:可自定义。
      4. DNS服务商:选择你的域名提供商(如 Cloudflare、阿里云、腾讯云 DNSPod)。
      5. API密钥/Token:填入从域名服务商处获取的 SecretID 和 SecretKey(或 Token)。
      6. 公网类型:根据你的网络情况选择 IPv4、IPv6 或双栈。若使用 IPv6,请确保 NAS 或服务器已正确获取公网 IPv6 地址(通常以 240 开头)。
      7. 域名列表:输入你的主域名和泛解析域名,例如: example.com *.example.com
      8. 点击 【添加任务】
  2. 申请 SSL 证书 为你的域名申请免费的 HTTPS 证书。

    • 步骤
      1. 进入 【安全管理】 -> 【添加证书】
      2. 添加方式:选择 【ACME】
      3. 证书颁发机构:选择 Let's Encrypt
      4. 域名列表:填入你需要证书的域名,例如 example.com*.example.com(泛域名证书)。
      5. DNS服务商Token:与 DDNS 配置中选择相同的服务商并填入 API Token。
      6. "更多设置" 中,建议勾选 DNS查询强制IPv4DNS查询仅使用TCP通道 以提升成功率。
      7. 点击 【添加】。证书申请需要一些时间,请耐心等待并在申请日志中查看状态。
  3. 设置反向代理(Web 服务) 通过反向代理,你可以使用域名和 HTTPS 安全地访问内网的各种服务(如 NAS 管理界面、博客等)。

    • 步骤
      1. 进入 【Web服务】 -> 【添加Web服务规则】
      2. 规则名称:自定义。
      3. 监听类型:根据你的公网IP类型选择(IPv4/IPv6)。
      4. 监听端口:选择一个端口(如 8881)。注意:此端口需要在你的路由器上做端口转发(如果使用 IPv4 且 Lucky 不在网关位置)。由于我们使用了 host 网络模式,Lucky 会直接监听主机上的这个端口。
      5. 开启TLS必须开启,并选择你刚刚申请好的 SSL 证书。
      6. 点击 【添加Web服务子规则】 来配置具体的代理规则。
        • 子规则名称:自定义(如 "我的NAS")。
        • 服务类型:保持 反向代理
        • 前端域名/地址:填写你想要用于访问该服务的子域名,例如 nas.example.com
        • 后端地址:填写内网服务的地址,例如 http://192.168.1.100:5000
        • (可选)开启BasicAuth认证:为服务增加一层用户名密码保护。
      7. 依次点击 【添加】 保存子规则和主规则。
    • HTTP 重定向到 HTTPS (推荐): 为了确保安全,可以添加一条规则,强制将所有 HTTP 访问重定向到 HTTPS。
      1. 再添加一条 【Web服务规则】
      2. 规则名称:自定义(如 "HTTP重定向")。
      3. 监听端口:设为 80
      4. 操作模式:选择 定制模式
      5. TLS不开启
      6. 点击 【默认子规则】
        • 服务类型:选择 重定向
        • 默认目标地址:填写 https://{host}:{port}(其中的 {port} 对应你 HTTPS 规则中设置的端口,例如 8881)。
      7. 保存规则。
  4. 尝试 STUN 内网穿透 如果你没有公网 IP,可以尝试此功能。

    • 前提:确认你的网络环境是 NAT1 (Full Cone NAT)
    • 步骤
      1. 在路由器中为运行 Lucky 的设备设置 DMZ 主机端口映射
      2. 在 Lucky 左侧菜单进入 【STUN内网穿透】
      3. 点击 【添加穿透规则】
      4. 配置规则名称、穿透通道监听端口(路由器映射的外部端口)、目标地址(内网服务IP)和目标端口(内网服务端口)。
      5. 若穿透成功,规则列表会显示 "STUN穿透公网地址",使用此地址即可访问内网服务。

🔒 五、维护与安全建议

  • 数据备份:定期备份 docker-compose.yml 文件所在的整个目录(尤其是 goodluck 卷映射的目录),其中包含了 Lucky 的所有配置和证书。
  • 版本更新bash # 进入 docker-compose.yml 所在目录 docker-compose down docker-compose pull docker-compose up -d
  • 安全加固
    • 务必修改默认密码和安全入口
    • 在 Web 服务规则中,可为不需要公开的服务开启 BasicAuth 认证
    • 考虑将 Lucky 的管理界面(16601 端口)仅限内网访问。
    • 关注 Lucky 的版本更新,及时修复安全漏洞。

🐛 六、常见问题排查

问题现象 可能原因与解决方法
无法访问管理界面 检查防火墙/安全组是否放行了 16601 端口;确认容器是否正常运行 docker-compose ps
DDNS 解析失败 检查域名服务商的 API 密钥是否正确;检查网络是否正常获取到公网 IP(特别是 IPv6)。
SSL 证书申请失败 检查域名解析是否已生效;检查 DNS 服务商 Token 是否有权限;尝试勾选 "强制IPv4" 和 "仅TCP" 选项。
反向代理后无法访问服务 检查后端地址是否正确且服务本身正常;检查监听端口是否在路由器上正确转发(IPv4环境下);检查子规则的前端域名是否已正确解析到你的公网 IP。

希望这篇教程能帮助你顺利部署和使用 Lucky,享受它带来的网络管理便利!