绿联NAS Docker实战:把nginxWebUI变成家庭网络的服务管理中枢
绿联NAS上的Docker魔法用nginxWebUI打造智能家庭网络控制中心家里那台绿联NAS已经默默运行了半年多从最初的存储照片到现在承载了十几个服务——Jellyfin媒体库、Bitwarden密码管理、Home Assistant智能家居中枢...每次访问不同服务都要记住对应的端口号连家人都抱怨能不能像正常网站一样用名字访问。直到发现nginxWebUI这个神器才真正把家庭实验室的体验提升到专业水准。1. 为什么家庭网络需要一个服务网关现代家庭网络早已不是简单的上网设备集合。随着智能家居设备增多和个人数据安全意识提升越来越多的技术爱好者选择自建服务。我的绿联NAS上就跑了以下服务媒体服务Jellyfin8096端口、Plex32400端口工具类Bitwarden密码管理器8080端口、Nextcloud私有云8888端口智能家居Home Assistant8123端口、Node-RED1880端口开发环境VS Code Server3000端口、Portainer9000端口这种分散式架构带来三个明显痛点访问复杂需要记忆不同IP和端口组合安全风险每个暴露的服务都是潜在攻击面证书管理为每个服务单独配置HTTPS极其繁琐nginxWebUI作为可视化Nginx管理工具能完美解决这些问题。通过它我们可以用子域名如media.home替代IP:端口集中管理所有SSL证书统一设置访问权限控制实时监控各服务状态2. 绿联Docker环境下的nginxWebUI部署实战2.1 准备工作在绿联NAS的Docker管理器中确保已经完成以下准备创建专用存储目录/UGREEN/nas/docker/nginxwebui用于存放配置文件和数据库记录当前网络信息ifconfig | grep inet addr获取NAS的局域网IP如192.168.1.1002.2 容器部署关键步骤在绿联Docker管理界面执行以下操作拉取镜像cym1102/nginxwebui:latest网络配置选择host网络模式必须端口映射保持默认内部8080存储映射主机路径容器路径权限/UGREEN/nas/docker/nginxwebui/home/nginxWebUI读写环境变量BOOT_OPTIONS--server.port8080 --project.home/home/nginxWebUI重要提示生产环境建议添加--spring.database.typemysql参数连接外部数据库避免数据丢失2.3 验证安装启动容器后在浏览器访问http://[NAS-IP]:8080初始账号/密码为admin/123456首次登录会强制修改。3. 将nginxWebUI打造成家庭网络中枢3.1 统一域名访问方案假设家庭局域网域名为home我们可以为每个服务分配子域名服务原始访问方式新访问方式Jellyfin192.168.1.100:8096media.homeHome Assistant192.168.1.100:8123ha.homeBitwarden192.168.1.100:8080vault.home配置步骤在nginxWebUI控制台创建新的代理主机设置监听端口为80和443配置SSL证书后文详述添加反向代理规则server { listen 443 ssl; server_name media.home; ssl_certificate /home/nginxWebUI/certs/media.home.pem; ssl_certificate_key /home/nginxWebUI/certs/media.home.key; location / { proxy_pass http://127.0.0.1:8096; proxy_set_header Host $host; } }3.2 自动化证书管理使用Lets Encrypt为所有子域名申请证书在nginxWebUI的证书管理中配置ACME账户设置通配符证书申请DNS类型DNS-01验证 域名*.home 密钥类型ECDSA 有效期90天开启自动续期功能注意局域网使用需要配置DNS重绑定保护建议使用专业DNS服务商API3.3 访问控制与安全加固通过nginxWebUI实现企业级安全策略IP白名单allow 192.168.1.0/24; deny all;基础认证# 生成密码文件 printf username:$(openssl passwd -apr1) /home/nginxWebUI/auth/.htpasswd速率限制limit_req_zone $binary_remote_addr zoneone:10m rate1r/s;4. 高级技巧与家庭网络深度集成4.1 与软路由联动在OpenWRT等软路由上配置DNS重定向# 将所有.home域名解析到NAS uci add dhcp domain uci set dhcp.domain[-1].namehome uci set dhcp.domain[-1].ip192.168.1.100防火墙规则iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 80804.2 服务健康监控利用nginxWebUI的API功能import requests def check_service(service_name): url fhttp://192.168.1.100:8080/api/status/{service_name} response requests.get(url) return response.json()[status] up if not check_service(jellyfin): send_alert(媒体服务异常)4.3 自动化备份策略配置每日定时备份0 3 * * * tar -zcvf /mnt/backup/nginxwebui_$(date \%Y\%m\%d).tar.gz /home/nginxWebUI使用rsync同步到异地rsync -avz -e ssh /mnt/backup/ userremote:/backup/nas/5. 故障排查与性能优化当访问出现502错误时按以下步骤排查检查容器日志docker logs nginxwebui --tail 100验证Nginx配置nginx -t网络连通性测试curl -v http://localhost:8096性能优化建议调整worker进程数worker_processes auto; worker_rlimit_nofile 100000;启用缓存proxy_cache_path /tmp/nginx levels1:2 keys_zonemy_cache:10m inactive60m;开启Gzip压缩gzip on; gzip_types text/plain application/json;这套方案运行三个月后家庭网络服务的可用性从92%提升到99.8%家人再也没抱怨过又打不开电视节目的问题。最意外的是通过集中管理SSL证书所有服务的HTTPS评级都达到了A级别。