Linux VPS Docker部署S-UI完整总结(含操作步骤、弯路复盘、最终解决方案)






Linux VPS Docker部署S-UI完整总结(含踩坑复盘)


Linux VPS Docker部署S-UI完整总结(含操作步骤、弯路复盘、最终解决方案)

一、整体背景

本次目标:在Linux VPS上通过Docker部署alireza7/s-ui镜像,实现外部浏览器可访问S-UI面板,用于后续相关配置管理。

核心环境:Linux VPS(root权限)、Docker已预装、现有网站占用80端口。

二、完整操作步骤(可直接复现,一步一命令)

步骤1:前期环境准备(创建工作目录)

# 1. 创建S-UI工作目录并进入
mkdir -p ~/s-ui && cd ~/s-ui

# 2. 创建数据卷目录(用于持久化S-UI配置/数据库)
mkdir -p s-ui-db && chmod 777 s-ui-db

步骤2:首次部署S-UI容器(初始端口2095)

# 启动S-UI容器,映射VPS 2095端口→容器2095端口,挂载数据卷
docker run -d \
–name s-ui \
–restart unless-stopped \
-p 2095:2095 \
-p 2096:2096 \
-v $(pwd)/s-ui-db:/app/db \
alireza7/s-ui

步骤3:配置本地防火墙(先iptables,后安装ufw)

3.1 初始iptables放行端口

# 放行2095、2096端口(TCP协议)
iptables -A INPUT -p tcp –dport 2095 -j ACCEPT
iptables -A INPUT -p tcp –dport 2096 -j ACCEPT

# 创建iptables规则保存目录,保存规则
mkdir -p /etc/iptables
iptables-save > /etc/iptables/rules.v4

3.2 后续安装ufw防火墙(兜底防护,更易用)

# 1. 安装ufw
apt update && apt install -y ufw

# 2. 启用ufw,默认规则(拒绝入站,允许出站)
ufw enable
ufw default deny incoming
ufw default allow outgoing

# 3. 放行核心端口(SSH 22必放,避免断连;后续端口同步放行)
ufw allow 22/tcp
ufw allow 2095/tcp
ufw allow 2096/tcp
ufw allow 8888/tcp
ufw allow 8090/tcp
ufw allow 80/tcp(现有网站,无需删除)

# 4. 重载ufw,查看规则状态
ufw reload
ufw status numbered

步骤4:更换映射端口(规避隐性屏蔽,尝试8888→8090)

# 1. 停止并删除现有s-ui容器(端口更换需重建容器)
docker rm -f s-ui

# 2. 重建容器,映射VPS 8888端口→容器2095端口
docker run -d \
–name s-ui \
–restart unless-stopped \
-p 8888:2095 \
-p 2096:2096 \
-v $(pwd)/s-ui-db:/app/db \
alireza7/s-ui

# 3. (后续更换8090端口,重复上述步骤,仅修改映射端口)
docker rm -f s-ui
docker run -d \
–name s-ui \
–restart unless-stopped \
-p 8090:2095 \
-p 2096:2096 \
-v $(pwd)/s-ui-db:/app/db \
alireza7/s-ui

步骤5:配置服务商安全组(关键外部通路)

  1. 登录VPS服务商控制台,找到对应VPS的「安全组/防火墙」配置;
  2. 新增「入站规则」,依次放行端口:2095、8888、8090、2096(协议均为TCP,授权对象0.0.0.0/0,规则启用);
  3. 保存规则,等待1-3分钟生效(无需重启VPS/容器)。

步骤6:验证容器端口映射(确认映射正常)

# 1. 查看指定s-ui容器端口映射
docker port s-ui

# 2. 查看所有运行中容器端口映射(全局验证)
docker ps –format “table {{.Names}}\t{{.Ports}}”

# 3. 查看本地端口监听状态(确认docker-proxy进程正常)
ss -tulpn | grep -E “8090|8888|2095”

步骤7:排查访问路径(最终找到有效路径)

# 1. 本地curl验证链路通畅(查看服务响应)
curl -v http://127.0.0.1:8090

# 2. 进入容器内部,查找可能的访问路径(虽未找到静态文件,但验证服务类型)
docker exec -it s-ui /bin/sh
find / -name “*login*” -o -name “*index*” -o -name “*html*”
exit(退出容器)

步骤8:最终成功访问(外部浏览器验证)

  1. 浏览器开启「无痕模式」(Chrome/Edge:Ctrl+Shift+N);
  2. 输入完整访问地址:http://213.210.5.42:8090/app/
  3. Ctrl+F5强制刷新2-3次,优先使用手机流量访问(避开路由器拦截);
  4. 成功进入S-UI面板,完成部署目标。

步骤9:(可选)环境清理(若需重新部署)

# 1. 强制删除s-ui容器
docker rm -f s-ui

# 2. 彻底删除S-UI工作目录(含配置/数据卷)
rm -rf ~/s-ui

# 3. (可选)删除ufw对应端口规则(先查编号,再删除)
ufw status numbered
ufw delete 对应规则编号

三、核心弯路复盘(踩坑点+原因分析+解决方案)

弯路1:初期仅配置本地iptables,忽略服务商安全组(外部请求无法到达VPS)

表现:容器运行正常、本地端口监听正常,外部浏览器访问超时/无法连接,在线端口扫描显示端口关闭;

原因:服务商安全组是「外部网络第一道防火墙」,优先级高于VPS本地防火墙,未放行对应端口时,外部请求根本无法到达VPS;

解决方案:本地防火墙(iptables/ufw)放行端口后,必须同步在服务商控制台配置安全组入站规则,放行相同端口(TCP协议)。

弯路2:执着于根路径/访问,未意识到S-UI有指定面板路径(返回404误以为服务故障)

表现:本地curl http://127.0.0.1:8090返回404 Not Found,尝试/login//admin路径仍无效,误以为容器服务异常;

原因:S-UI面板并非部署在根路径/,而是有专属访问路径/app/,且S-UI为前后端分离服务,根路径无有效静态页面;

解决方案:通过论坛求助/官方文档,获取有效访问路径/app/,补充到IP+端口后完成访问。

弯路3:初期使用2095端口,遭遇隐性网络屏蔽(更换端口后链路通畅)

表现:2095端口配置全正常(本地监听、防火墙、安全组),但外部始终无法访问,curl返回无响应;

原因:部分运营商/路由器会隐性屏蔽2095这类非常规端口,导致请求被拦截;

解决方案:更换更通用的端口(8888、8090),重建容器映射,同步更新防火墙/安全组规则,规避端口屏蔽。

弯路4:误解「本地curl无输出/404」的含义,过度排查容器服务(忽略链路通畅核心)

表现:本地curl根路径无输出/返回404,误以为容器内S-UI服务未启动,反复重启/重建容器,浪费大量时间;

原因:① S-UI是后端API服务+专属前端路径,根路径无有效响应;② 404 Not Found是标准HTTP响应,说明本地链路(VPS→Docker→容器服务)已完全通畅,仅路径不正确;

解决方案curl -v返回完整HTTP响应(即使404),即可确认本地链路正常,无需再排查容器服务,聚焦「访问路径」和「外部网络限制」即可。

弯路5:未开启浏览器无痕模式/使用WiFi访问,遭遇本地缓存/路由器拦截(误以为配置无效)

表现:配置全部正确,访问http://213.210.5.42:8090/app/仍无法打开,显示「无法访问」;

原因:① 浏览器缓存旧请求结果,未发起新请求;② 家庭/公司路由器会拦截8090这类非默认端口(80/443),导致请求无法传出;

解决方案:① 开启浏览器无痕模式,避免缓存/插件干扰;② 优先使用手机流量访问,避开路由器拦截,快速验证配置有效性。

四、最终结论与经验总结

核心总结与复用经验

  1. 部署核心三要素:容器服务正常(运行+端口映射)、本地防火墙放行、服务商安全组放行,三者缺一不可,外部通路才能打通;
  2. 访问关键两要点:正确的「IP+端口+访问路径」、规避本地网络限制(无痕模式+手机流量),解决路径问题和本地拦截问题,即可成功访问;
  3. 排障优先级:先验证本地链路(docker port+curl -v)→ 再排查外部通路(安全组+端口屏蔽)→ 最后聚焦访问细节(路径+本地网络),避免本末倒置,浪费排障时间;
  4. 经验复用:后续部署同类Docker服务时,可直接复用本次步骤(目录创建→容器部署→双防火墙配置→路径验证),有效规避同类踩坑。

本次部署从踩坑到成功,核心在于逐步排查「通路」和「细节」,明确每一步的验证标准,最终通过更换端口、找到有效路径、规避本地限制,实现了S-UI面板的外部成功访问。


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇