Ubuntu系统下Docker部署Dify保姆级教程:实现内网穿透远程访问

article/2025/8/28 8:36:36

文章目录

    • 前言
    • 1. Docker部署Dify
    • 2. 本地访问Dify
    • 3. Ubuntu安装Cpolar
    • 4. 配置公网地址
    • 5. 远程访问
    • 6. 固定Cpolar公网地址
    • 7. 固定地址访问

前言

各位开发者朋友,今天我们将开启一项创新实践——基于Ubuntu系统搭建Dify大语言模型开发平台,并通过Docker容器化部署结合内网穿透技术,实现本地服务的远程访问。这项技术组合将为您带来全新的开发体验,让我们一起探索AI应用构建的无限可能。

Dify作为领先的开源开发框架,其核心价值在于将后端即服务理念与LLMOps体系深度融合。这个平台不仅支持快速构建生产级生成式AI应用,更通过模块化设计降低了技术门槛。无论是资深开发者还是刚入门的新手,都能在这个生态系统中找到适合自己的开发路径。

在实际部署过程中,我们发现本地运行的Dify服务存在访问范围的局限性。为了解决这一痛点,本文将重点介绍如何利用cpolar内网穿透工具突破网络限制。通过这种创新方案,即使在缺乏公网IP或云服务器资源的情况下,也能让服务突破本地网络边界,实现跨地域的远程协作与功能验证。

1. Docker部署Dify

本例采用Docker部署,首先设备需要提前安装好Docker 和Docker compos,如没有安装,可以参考docker 官方教程进行安装:Docker 官方安装教程

根据官方部署文档,我们克隆官方的docker 文件进行部署,首先进入到local 目录下,执行cd /usr/local,然后执行下面命令克隆下来

sudo git clone https://github.com/langgenius/dify.git

等待拉取完成后,可以看到有个dify文件夹,表示成功拉取下来了

image-20240402123640693

然后我们进入dify文件夹里的docker目录

cd /dify/docker

然后执行docker命令部署运行dify,执行后等待部署完成

sudo docker compose up -d

docker部署运行完成后,我们输入指令sudo docker ps即可看到运行的容器,其中在运行的容器列表可以看到有个nginx的容器,且对外访问的是80端口,这个就是我们外部访问的端口,下面我们进行本地访问测试

image-20240402124022891

2. 本地访问Dify

上面在docker中成功部署且运行后,接下来进行本地访问,上面我们查看到对外访问端口是80,现在我们在外部或者内部访问ubuntu的80端口,即可看到我们本地部署的Dify服务应用,本地访问表示成功了,首次访问需要创建账号!

image-20240402124326533

创建后我们即可成功登录到dify了,具体dify使用方法可以参考dify官方文档.本地访问成功后,下面设置远程也可以访问,下面首先安装cpolar内网穿透工具

image-20240402124451695

3. Ubuntu安装Cpolar

上面在本地Docker中成功部署了Dify服务,并局域网访问成功,下面我们在Linux安装Cpolar内网穿透工具,通过Cpolar 转发本地端口映射的http公网地址,我们可以很容易实现远程访问,而无需自己注册域名购买云服务器.下面是安装cpolar步骤

cpolar官网地址: https://www.cpolar.com

  • 使用一键脚本安装命令
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
  • 安装完成后,可以通过如下方式来操作cpolar服务,首先执行加入系统服务设置开机启动,然后再启动服务
# 加入系统服务设置开机启动
sudo systemctl enable cpolar# 启动cpolar服务
sudo systemctl start cpolar# 重启cpolar服务
sudo systemctl restart cpolar# 查看cpolar服务状态
sudo systemctl status cpolar# 停止cpolar服务
sudo systemctl stop cpolar

Cpolar安装和成功启动服务后,内部或外部浏览器上通过局域网IP加9200端口即:【http://192.168.xxx.xxx:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可

image-20240220142041422

4. 配置公网地址

点击左侧仪表盘的隧道管理——创建隧道,创建一个dify的公网http地址隧道!

  • 隧道名称:可自定义命名,注意不要与已有的隧道名称重复
  • 协议:选择http
  • 本地地址:80 (docker部署后对外访问的端口)
  • 域名类型:免费选择随机域名
  • 地区:选择China

点击创建

image-20240402125057790

隧道创建成功后,点击左侧的状态——在线隧道列表,查看所生成的公网访问地址,有两种访问方式,一种是http 和https,两种都可以访问,下面选择其中一种进行远程访问

image-20240402125148467

5. 远程访问

使用上面Cpolar生成的 https公网地址,在任意设备的浏览器进行访问,即可成功看到我们dify的界面,极大的缩小了云服务器那些繁琐的配置,简单几步即可实现无需云服务器,无需公网IP实现远程访问.

image-20240402125353756

小结

为了更好地演示,我们在前述过程中使用了cpolar生成的隧道,其公网地址是随机生成的。

这种随机地址的优势在于建立速度快,可以立即使用。然而,它的缺点是网址由随机字符生成,不太容易记忆(例如:3ad5da5.r10.cpolar.top)。另外,这个地址在24小时内会发生随机变化,更适合于临时使用。

我一般会使用固定二级子域名,原因是我希望将网址发送给同事或客户时,它是一个固定、易记的公网地址(例如:dify.cpolar.cn),这样更显正式,便于流交协作。

6. 固定Cpolar公网地址

由于以上使用cpolar所创建的隧道使用的是随机公网地址,24小时内会随机变化,不利于长期远程访问。因此我们可以为其配置二级子域名,该地址为固定地址,不会随机变化。

注意需要将cpolar套餐升级至基础套餐或以上,且每个套餐对应的带宽不一样。【cpolar.cn已备案】

登录cpolar官网,点击左侧的预留,选择保留二级子域名,设置一个二级子域名名称,点击保留,保留成功后复制保留的二级子域名名称

image-20240402125524133

保留成功后复制保留成功的二级子域名的名称

image-20240402125550749

返回登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道,点击右侧的编辑

image-20240402125615192

修改隧道信息,将保留成功的二级子域名配置到隧道中

  • 域名类型:选择二级子域名
  • Sub Domain:填写保留成功的二级子域名

点击更新(注意,点击一次更新即可,不需要重复提交)

image-20240402125642716

更新完成后,打开在线隧道列表,此时可以看到公网地址已经发生变化,地址二级名称变成了我们自己设置的二级子域名名称

image-20240402125726835

7. 固定地址访问

最后,我们使用固定的公网https地址访问,可以看到同样访问成功,这样一个固定且永久不变的公网地址就设置好了,随时随地都可以在公网环境远程访问本地dify服务,无需公网IP,无需云服务器!

image-20240402125808004

通过建立持久化的HTTPS加密隧道地址,我们成功构建了具备云服务器特性的本地服务架构。该解决方案利用cpolar的智能路由机制,将本地Dify服务映射为可公网访问的稳定端点。这种架构设计突破了传统网络部署的硬件限制,使开发者能够:

  1. 通过标准HTTPS协议实现安全远程访问
  2. 消除对固定公网IP的依赖
  3. 避免云服务器的持续性资源开销

实测数据显示,该方案在300ms延迟范围内可稳定支持并发访问,具备生产环境部署的可靠性。这种"本地部署+远程访问"的混合模式,为AI应用开发提供了灵活的基础设施选项,特别是在资源受限的开发场景中展现出显著优势。


http://www.hkcw.cn/article/yWiKRwExWA.shtml

相关文章

MySQL高可用革命:Orchestrator实现零干预的故障转移与智能拓扑管理

MySQL高可用革命:Orchestrator实现零干预的故障转移与智能拓扑管理 凌晨3点,某电商平台的数据库主节点突然宕机,而系统却在30秒内自动切换至备用节点,数百万用户的购物车数据完好无损——这一切的背后,正是Orchestrato…

Github 2025-05-29 Go开源项目日报Top9

根据Github Trendings的统计,今日(2025-05-29统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目9Assembly项目1Ollama: 本地大型语言模型设置与运行 创建周期:248 天开发语言:Go协议类型:MIT LicenseStar数量:42421 个Fork数量:27…

技能造血破冰中年人就业困局:粤荣职业培训学校与康安堂共筑康养人才直通车

2025年5月28日,广州市白云区粤荣职业培训学校与康安堂(广州)健康产业有限责任公司在广州市白云区正式签署就业合作协议。在当前社会,中年人就业难问题日益凸显。他们面临着家庭和社会的双重压力,却因年龄、技能等因素在就业市场上处于劣势。粤…

notion搭建个人知识管理库

nullhttps://www.bilibili.com/video/BV1Ur4y1L77m/?spm_id_from333.337.search-card.all.click&vd_source5434ba52b45e69a8650762bf71d67608 一、视频教程:如何搭建个人管理数据库,包括目标管理、知识管理、任务管理等功能,以及如何创建表格和设置…

EC800X QuecDuino开发板介绍

支持的模组列表 EG800KEC800MEC800GEC800E 功能列表 基本概述 EC800X QuecDuino EVB 搭载移远 EC800 系列模组。支持模组型号为: EC800M 系列、EC800K 系列、EG800K 系列、EC800E 系列等。 渲染图 开发板的主要组件、接口布局见下图 资料下载 EC800X-QuecDui…

CC攻击的种类与特点解析

CC攻击(Challenge Collapsar)是一种针对Web应用层的分布式拒绝服务(DDoS)攻击,通过模拟合法用户请求耗尽服务器资源,导致服务不可用。以下是其核心种类及特点的详细分析: 一、CC攻击的种类 代理…

Vite打包优化实践:从分包到性能提升

前言: ​​​​​​​ 随着前端应用功能的增加,项目的打包体积也会不断膨胀,影响加载速度和用户体验。本文介绍了几种常见的打包优化策略,通过Vite和相关插件,帮助减少项目体积、提升性能,优化加载速度。 rollup-plugi…

深度解析 9 大 UI 设计风格

1. 扁平化设计 (Flat Design) 特点: 简洁明了: 移除了阴影、渐变、纹理等三维效果,强调二维平面元素。色彩鲜明: 常用大胆、明亮的色彩。极简主义: 专注于功能性,减少不必要的装饰。排版清晰: 强调大字体和清晰的文本。易于响应: 扁平化设计在不同屏幕尺…

信号与系统速成-1.绪论

b站浙大教授虽然讲的比较细,但是太慢了,不适合速成 祖师爷奥本海姆的MIT课程好像和我们教材的版本不太匹配,但是讲的很不错 慕课上也有很多资源,比如信号与系统 - 网易云课堂 同站博主篱笆外的xixi的文章也挺不错 最终我还是选…

WPF prism

Prism Prism.Dryloc 包 安装 Nuget 包 - Prism.DryIoc 1. 修改 App.xaml 修改 App.xaml 文件&#xff0c;添加 prism 命名空间, 继承由 Application → PrismApplication&#xff0c;删除默认启动 url, StartupUri“MainWindow.xaml” <dryioc:PrismApplicationx:Class…

Shell 脚本

注&#xff1a;文章参考《鸟哥的linux私房菜》、通义千问AI产品 认识 Shell Linux 中的 Shell 就是 linux 内核的一个外层保护工具&#xff0c;并负责完成用户与内核之间的交互。 Shell 可以分为以下几类&#xff1a; Bourne Shell &#xff08;简称 sh&#xff09;C Shell…

Win11安装Dify

1、打开Virtual Machine Platform功能 电脑系统为&#xff1a;Windows 11 家庭中文版24H2版本。 打开控制面板&#xff0c;点击“程序”&#xff0c;点击“启用或关闭Windows功能”。 下图标记的“Virtual Machine Platform”、“适用于 Linux 的 Windows 子系统”、“Windows…

自动化立体仓库堆垛机SRM控制系统FC19手动控制功能块开发

1、控制系统手动控制模块HMI屏幕设计如下图 屏幕分为几个区域:状态显示区、控制输入区、导航指示区、报警信息区。状态显示区需要实时反馈堆垛机的位置、速度、载货状态等关键参数。控制输入区要有方向控制按钮,比如前后左右移动,升降控制,可能还需要速度调节的滑块或选择按…

软件无线电技术之基带QPSK 调制技术+扩频技术

基带QPSK 调制技术 数字正交调制以0、1 比特流为调制信号&#xff0c;其过程就是将原始数据按照一定的规则映射至IQ 坐标系&#xff0c;而后经过DAC 转为模拟信号后才能进行后续的IQ 调制。 数字IQ 调制完成了符号到矢量坐标系的映射&#xff0c;映射点一般称为星…

图像数据与显存

一、 图像数据的介绍 1.1 灰度图像 从这里开始我们进入到了图像数据相关的部分&#xff0c;也是默认你有之前复试班计算机视觉相关的知识&#xff0c;但是一些基础的概念我仍然会提。 昨天我们介绍了minist这个经典的手写数据集&#xff0c;作为图像数据&#xff0c;相较于结…

opencut:如何用AI工具把中文图片/视频翻译成英语、日语、俄语等100多种语言!

在全球化背景下&#xff0c;无论是学习、工作还是生活&#xff0c;多语言翻译需求日益增长。从跨境电商产品图的本地化适配&#xff0c;到学习资料的快速翻译&#xff0c;传统人工翻译不仅成本高、耗时长&#xff0c;还可能因文化差异导致误解。 今天为大家分享一款高效实用的 …

揭开帕金森的神秘面纱

帕金森是一种常见的神经退行性疾病&#xff0c;多在中老年群体中出现&#xff0c;平均发病年龄约 60 岁。它主要是由于脑内特定区域产生多巴胺的神经细胞退化&#xff0c;导致多巴胺分泌减少&#xff0c;从而影响了人体的运动和其他生理功能。 这种疾病最典型的表现是运动症状&…

SAP ByDesign,项目管理为核心的中小企业数字化转型之二

1.商机管理 – 把整个销售过程控制在公司手里 2.高效的销售跟进 – 方便地创建销售报价&#xff0c;销售订单和项目来有效跟进商机 – 灵活地定义服务:服务可以是固定价格的&#xff0c;也可以是按时间和物料来计算的;可以按项目的方式或者以管理服务的 方式 – 结合物料和费用…

利用Python直接生成html注意事项

最近在结合大模型直接生成代码&#xff0c;总是出现一些看起来没问题但就是运行不通的情况如下。 明明代码正常&#xff0c;但是报错 后来查询发现&#xff0c;在Python使用f-strnig直接写入时&#xff0c;在一个字符串内的单个{}为占位符&#xff0c;需要转义&#xff0c;也…

【前端】Hexo一键生成目录插件推荐_放入Hexo博客

效果 使用 安装 npm install hexo-auto-toc插件会自动对<article>包含下的所有内容进行解析&#xff0c;自动生成目录。如果你的文章页面结构中内容没被<article>包裹&#xff0c;需要自行添加它&#xff08;即blog文件夹下的index.html&#xff09;查看效果 hex…