🚀 使用 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 证书自动续期,并提供安全加固选项。
⚙️ 一、部署前准备
-
环境要求
- 已安装 Docker 和 Docker Compose。
- 建议系统内存不少于 512MB。
- 确保服务器或 NAS 的 16601 端口未被占用(这是 Lucky 的默认管理端口)。
-
环境检查 在终端中执行以下命令,确认 Docker 环境正常:
bash docker --version docker-compose --version -
创建项目目录 建议创建一个独立的目录来存放
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
🚀 三、启动与初始化
-
启动 Lucky 服务 在
docker-compose.yml文件所在目录执行:bash docker-compose up -d此命令会拉取镜像(如果本地没有)并在后台启动容器。 -
检查服务状态
bash docker-compose ps # 或者 docker ps | grep lucky如果看到 Lucky 容器的状态为Up,说明服务已成功启动。 -
访问 Web 管理界面并初始化
- 打开浏览器,输入
http://<你的服务器IP地址>:16601。 - 使用默认账号和密码登录:
- 用户名:
666 - 密码:
666
- 用户名:
- 首次登录后,务必立即修改默认密码!
- 登录后,在管理界面中找到 "设置" 或 "系统设置" 选项。
- 修改管理员用户名和密码,并妥善保存。
- 根据提示,你可能还需要设置 "安全入口" 以增强安全性。
- 打开浏览器,输入
⚙️ 四、基础功能配置指南
成功登录 Lucky 后,你可以开始配置其核心功能。
-
配置动态域名解析(DDNS) 这是实现远程访问的第一步,尤其对于获取公网 IP 较难的网络环境(如多数家庭宽带),IPv6 是一个很好的选择。
- 前提:你需要拥有一个域名(例如从阿里云、腾讯云等处购买)。
- 步骤:
- 在 Lucky 左侧菜单栏进入 【动态域名】。
- 点击 【添加任务】。
- 任务名称:可自定义。
- DNS服务商:选择你的域名提供商(如 Cloudflare、阿里云、腾讯云 DNSPod)。
- API密钥/Token:填入从域名服务商处获取的 SecretID 和 SecretKey(或 Token)。
- 公网类型:根据你的网络情况选择 IPv4、IPv6 或双栈。若使用 IPv6,请确保 NAS 或服务器已正确获取公网 IPv6 地址(通常以
240开头)。 - 域名列表:输入你的主域名和泛解析域名,例如:
example.com *.example.com - 点击 【添加任务】。
-
申请 SSL 证书 为你的域名申请免费的 HTTPS 证书。
- 步骤:
- 进入 【安全管理】 -> 【添加证书】。
- 添加方式:选择 【ACME】。
- 证书颁发机构:选择
Let's Encrypt。 - 域名列表:填入你需要证书的域名,例如
example.com和*.example.com(泛域名证书)。 - DNS服务商Token:与 DDNS 配置中选择相同的服务商并填入 API Token。
- 在 "更多设置" 中,建议勾选
DNS查询强制IPv4和DNS查询仅使用TCP通道以提升成功率。 - 点击 【添加】。证书申请需要一些时间,请耐心等待并在申请日志中查看状态。
- 步骤:
-
设置反向代理(Web 服务) 通过反向代理,你可以使用域名和 HTTPS 安全地访问内网的各种服务(如 NAS 管理界面、博客等)。
- 步骤:
- 进入 【Web服务】 -> 【添加Web服务规则】。
- 规则名称:自定义。
- 监听类型:根据你的公网IP类型选择(IPv4/IPv6)。
- 监听端口:选择一个端口(如
8881)。注意:此端口需要在你的路由器上做端口转发(如果使用 IPv4 且 Lucky 不在网关位置)。由于我们使用了host网络模式,Lucky 会直接监听主机上的这个端口。 - 开启TLS:必须开启,并选择你刚刚申请好的 SSL 证书。
- 点击 【添加Web服务子规则】 来配置具体的代理规则。
- 子规则名称:自定义(如 "我的NAS")。
- 服务类型:保持
反向代理。 - 前端域名/地址:填写你想要用于访问该服务的子域名,例如
nas.example.com。 - 后端地址:填写内网服务的地址,例如
http://192.168.1.100:5000。 - (可选)开启BasicAuth认证:为服务增加一层用户名密码保护。
- 依次点击 【添加】 保存子规则和主规则。
- HTTP 重定向到 HTTPS (推荐):
为了确保安全,可以添加一条规则,强制将所有 HTTP 访问重定向到 HTTPS。
- 再添加一条 【Web服务规则】。
- 规则名称:自定义(如 "HTTP重定向")。
- 监听端口:设为
80。 - 操作模式:选择
定制模式。 - TLS:不开启。
- 点击 【默认子规则】。
- 服务类型:选择
重定向。 - 默认目标地址:填写
https://{host}:{port}(其中的{port}对应你 HTTPS 规则中设置的端口,例如8881)。
- 服务类型:选择
- 保存规则。
- 步骤:
-
尝试 STUN 内网穿透 如果你没有公网 IP,可以尝试此功能。
- 前提:确认你的网络环境是 NAT1 (Full Cone NAT)。
- 步骤:
- 在路由器中为运行 Lucky 的设备设置 DMZ 主机 或 端口映射。
- 在 Lucky 左侧菜单进入 【STUN内网穿透】。
- 点击 【添加穿透规则】。
- 配置规则名称、穿透通道监听端口(路由器映射的外部端口)、目标地址(内网服务IP)和目标端口(内网服务端口)。
- 若穿透成功,规则列表会显示 "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,享受它带来的网络管理便利!