找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3515

积分

0

好友

470

主题
发表于 1 小时前 | 查看: 1| 回复: 0

本地服务没有公网IP怎么给外网演示?本文手把手教你在Ubuntu环境下,使用Docker快速部署Nginx容器,并结合cpolar内网穿透工具,将本地8080端口安全暴露到公网。文章涵盖了从环境安装、镜像拉取到随机/固定域名配置的全流程,并补充了生产环境下的Volume挂载与安全避坑指南,告别来回传压缩包的低效协作。
本文由《云栈运维云原生》编辑整理
内容来源:CSDN 博主 @学无止尽5 ( felix-jy.blog.csdn.net )
本文在原文基础上补充了生产环境运维规范、工具选型对比及安全加固建议,转载请注明来源。

每天在技术群里摸鱼,总能看到有人问类似的问题:我在本地跑了个服务,测试页面调得差不多了,怎么让异地的客户或者前端同学看一眼效果?

老实说,都 2024 年了,如果你的解决方案还是“打个 zip 包发过去让他自己跑”,或者“花钱买台云服务器重新部署一遍”,那效率真的有点低。前者容易因为环境不一致跑不起来,后者纯属杀鸡用牛刀,改一行代码还得重新传一遍。

根本痛点只有一个:你的本地服务没有公网 IP,外面的人进不来。

今天咱们就来点实在的,手把手教你在没有公网 IP 的情况下,用 Docker 跑起 Nginx,再套个内网穿透工具,直接把本地服务暴露出去。整个过程不超过 10 分钟,主打一个简单粗暴。

Nginx Docker 官方镜像标识

1. 别在宿主机瞎折腾,先装 Docker

作为一个合格的运维/开发,别动不动就在宿主机上直接装环境,用 容器化 隔离才是正经事。本教程环境是 Linux Ubuntu,先把 Docker 搞定。

在终端中依次执行:

添加 Docker 源

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

安装 Docker 包

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

验证安装是否成功

sudo docker run hello-world

看到 Hello from Docker! 就说明底座搭好了。

2. 拉取 Nginx 镜像

直接上官方最新版:

sudo docker pull nginx:latest

Docker 拉取 nginx:latest 镜像的终端输出

拉完之后瞅一眼本地镜像列表,确认东西在:

sudo docker images

Docker 镜像列表,显示 nginx 镜像已成功拉取

3. 一键起飞:运行 Nginx 容器

镜像有了,直接跑起来。这里我们把宿主机的 8080 端口映射给容器的 80 端口。

$ sudo docker run --name nginx-test -p 8080:80 -d nginx

参数很简单:

  • --name mynginx:给容器起个名,我这里叫 mynginx。
  • -p 8080:80:端口映射,别和本地其他服务冲突就行。
  • -d nginx:后台静默运行。

Docker 运行 mynginx 容器的终端输出及容器 ID

顺手查一下存活状态:

sudo docker ps

Docker 容器列表,mynginx 容器状态为 Up

看到 Up 就稳了。打开浏览器访问 本机ip:8080,熟悉的 Welcome to nginx 页面出现,本地测试搞定。

浏览器访问 192.168.1.128:8080 显示 Nginx 欢迎页面

4. 重点来了:用 cpolar 打通公网

现在只能你自己看,怎么让外网访问?这时候就需要内网穿透工具登场了。这里我们用 cpolar,图它个配置简单,不用自己备服务器。

一键安装脚本:

curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash

加入开机自启并启动:

sudo systemctl enable cpolar
sudo systemctl start cpolar

装好后,在浏览器访问 http://局域网ip:9200,用 cpolar 账号登录 Web 管理界面。

cpolar 登录界面,输入邮箱账号和密码

4.1 搞个临时公网地址(随机域名)

进仪表盘后,点左侧的 隧道管理 -> 创建隧道

  • 隧道名称:mynginx(别重名就行)
  • 协议:http
  • 本地地址:8080
  • 域名类型:随机域名
  • 地区:China Top

创建

cpolar 创建隧道配置界面,填写 mynginx 隧道信息

状态 -> 在线隧道列表 里看一眼,它会给你生成两个公网地址(HTTP 和 HTTPS)。把这个链接发给你的客户,他就能直接看到你本地的页面了。

cpolar 在线隧道列表,显示 mynginx 的 HTTP/HTTPS 公网地址

通过 cpolar 随机公网地址访问本地 Nginx 欢迎页面

4.2 嫌地址太丑?上固定域名

随机域名有个毛病,24小时变一次,当个一次性消耗品还行。要是想长期用,建议搞个固定的二级子域名。

去 cpolar 官网后台,点 预留 -> 保留二级子域名,地区选 China VIP,自己编个名字(比如 nginx123),点保留。

cpolar 保留二级子域名页面,输入 nginx123 并选择 China VIP 地区

保留成功的二级子域名 nginx123 显示在列表中

拿着这个名字,回到你本地的 9200 管理界面,编辑刚才那个隧道:

  • 域名类型:改选 二级子域名
  • Sub Domain:填你刚保留的 nginx123
  • 地区:China VIP

cpolar 隧道列表,mynginx 隧道状态为 active

cpolar 编辑隧道界面,配置固定二级子域名 nginx123

更新之后,你的公网地址就变成了固定域名,以后怎么重启都不变了。

cpolar 在线隧道列表,mynginx 公网地址已变为固定域名 nginx123.vip.cpolarr.cn

通过固定公网域名 nginx123.vip.cpolarr.cn 访问本地 Nginx 欢迎页面

5. 运维老司机的几句碎碎念

如果你只是拿来给客户做个临时 Demo,上面的步骤完全够用了。但作为一个有追求的工程师,在云栈社区的日常讨论中,我们通常不建议把这种“玩具级”配置直接扔上生产环境。

这套方案有几个明显的坑,你要心里有数:

  1. 配置不挂载,重启两行泪:上面的 docker run 连个 Volume 都不挂。容器一删,你的 Nginx 配置直接灰飞烟灭。正确的姿势是把 nginx.confhtml 目录挂载到宿主机。
  2. 安全防护等于裸奔:公网暴露本地服务,意味着扫描器也能扫到你。建议在 Nginx 里加上基础的安全响应头,隐藏版本号,并且在宿主机用 UFW 把防火墙收紧。
  3. 工具鄙视链:cpolar 确实简单,对新手友好。但如果你懂点 网络 知识,手里又恰好有一台便宜的公网 VPS,自己搭个 frp 显然是更硬核、更稳定且完全免费的选择;或者如果你有自己的域名,白嫖 Cloudflare Tunnel 也是极好的。

不管黑猫白猫,能快速搞定需求的方案就是好方案。你平时做本地穿透最喜欢用哪个工具?frp、ngrok 还是 Tailscale?欢迎在评论区教教我。

关注《云栈运维云原生》,系统永不宕机,部署一键完成。

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-3 23:16 , Processed in 0.228439 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表