Dify大语言模型应用开发环境搭建:打造个性化本地LLM应用开发工作台
文章目录
- 前言
- 1. Docker部署Dify
- 2. 本地访问Dify
- 3. Ubuntu安装Cpolar
- 4. 配置公网地址
- 5. 远程访问
- 6. 固定Cpolar公网地址
- 7. 固定地址访问
前言
各位小伙伴们,大家好!今天我们要来一场技术大冒险,手把手教你如何在Linux Ubuntu系统上使用Docker快速部署大语言模型应用开发平台Dify,并且借助神奇的内网穿透工具cpolar,在没有公网IP或云服务器的情况下也能让朋友们轻松访问你的本地Dify服务。是不是听起来很带劲?
Dify可是个宝,它不仅是一个开源的大语言模型(LLM)应用开发平台,还完美融合了后端即服务(Backend as Service)和LLMOps的理念,让开发者们可以迅速构建出生产级的生成式AI应用。哪怕你是技术小白,也能轻松上手,参与到AI应用的开发中来。
不过,本地部署Dify后,默认情况下只能在本地访问。如果你想分享给小伙伴们或者自己远程使用,就需要一些特别的技巧了。别担心,接下来我就要教你一个绝招——用cpolar实现内网穿透,让你的Dify服务畅通无阻,就像拥有了自己的云服务器一样!
1. Docker部署Dify
本例采用Docker部署,首先设备需要提前安装好Docker 和Docker compos,如没有安装,可以参考docker 官方教程进行安装:Docker 官方安装教程
根据官方部署文档,我们克隆官方的docker 文件进行部署,首先进入到local 目录下,执行cd /usr/local
,然后执行下面命令克隆下来
sudo git clone https://github.com/langgenius/dify.git
等待拉取完成后,可以看到有个dify文件夹,表示成功拉取下来了
然后我们进入dify文件夹里的docker目录
cd /dify/docker
然后执行docker命令部署运行dify,执行后等待部署完成
sudo docker compose up -d
docker部署运行完成后,我们输入指令sudo docker ps
即可看到运行的容器,其中在运行的容器列表可以看到有个nginx的容器,且对外访问的是80端口,这个就是我们外部访问的端口,下面我们进行本地访问测试
2. 本地访问Dify
上面在docker中成功部署且运行后,接下来进行本地访问,上面我们查看到对外访问端口是80,现在我们在外部或者内部访问ubuntu的80端口,即可看到我们本地部署的Dify服务应用,本地访问表示成功了,首次访问需要创建账号!
创建后我们即可成功登录到dify了,具体dify使用方法可以参考dify官方文档.本地访问成功后,下面设置远程也可以访问,下面首先安装cpolar内网穿透工具
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 界面配置即可
4. 配置公网地址
点击左侧仪表盘的隧道管理——创建隧道,创建一个dify的公网http地址隧道!
- 隧道名称:可自定义命名,注意不要与已有的隧道名称重复
- 协议:选择http
- 本地地址:80 (docker部署后对外访问的端口)
- 域名类型:免费选择随机域名
- 地区:选择China
点击创建
隧道创建成功后,点击左侧的状态——在线隧道列表,查看所生成的公网访问地址,有两种访问方式,一种是http 和https,两种都可以访问,下面选择其中一种进行远程访问
5. 远程访问
使用上面Cpolar生成的 https公网地址,在任意设备的浏览器进行访问,即可成功看到我们dify的界面,极大的缩小了云服务器那些繁琐的配置,简单几步即可实现无需云服务器,无需公网IP实现远程访问.
小结
为了更好地演示,我们在前述过程中使用了cpolar生成的隧道,其公网地址是随机生成的。
这种随机地址的优势在于建立速度快,可以立即使用。然而,它的缺点是网址由随机字符生成,不太容易记忆(例如:3ad5da5.r10.cpolar.top)。另外,这个地址在24小时内会发生随机变化,更适合于临时使用。
我一般会使用固定二级子域名,原因是我希望将网址发送给同事或客户时,它是一个固定、易记的公网地址(例如:dify.cpolar.cn),这样更显正式,便于流交协作。
6. 固定Cpolar公网地址
由于以上使用cpolar所创建的隧道使用的是随机公网地址,24小时内会随机变化,不利于长期远程访问。因此我们可以为其配置二级子域名,该地址为固定地址,不会随机变化。
注意需要将cpolar套餐升级至基础套餐或以上,且每个套餐对应的带宽不一样。【cpolar.cn已备案】
登录cpolar官网,点击左侧的预留,选择保留二级子域名,设置一个二级子域名名称,点击保留,保留成功后复制保留的二级子域名名称
保留成功后复制保留成功的二级子域名的名称
返回登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道,点击右侧的编辑
修改隧道信息,将保留成功的二级子域名配置到隧道中
- 域名类型:选择二级子域名
- Sub Domain:填写保留成功的二级子域名
点击更新
(注意,点击一次更新即可,不需要重复提交)
更新完成后,打开在线隧道列表,此时可以看到公网地址已经发生变化,地址二级名称变成了我们自己设置的二级子域名名称
7. 固定地址访问
最后,我们使用固定的公网https地址访问,可以看到同样访问成功,这样一个固定且永久不变的公网地址就设置好了,随时随地都可以在公网环境远程访问本地dify服务,无需公网IP,无需云服务器!
最后,我们使用固定的公网https地址访问,可以看到同样访问成功,这样一个固定且永久不变的公网地址就设置好了,随时随地都可以在公网环境远程访问本地dify服务,无需公网IP,无需云服务器! 哈哈,通过以上步骤,你现在已经拥有了一台‘私人定制’的云服务器啦!随时随地都能在公网环境远程访问你的本地Dify服务。再也不用担心没有公网IP的问题了,简直不要太爽!
相关文章:
Dify大语言模型应用开发环境搭建:打造个性化本地LLM应用开发工作台
文章目录 前言1. Docker部署Dify2. 本地访问Dify3. Ubuntu安装Cpolar4. 配置公网地址5. 远程访问6. 固定Cpolar公网地址7. 固定地址访问 前言 各位小伙伴们,大家好!今天我们要来一场技术大冒险,手把手教你如何在Linux Ubuntu系统上使用Docke…...
MySQL索引事务
索引 通过索引可以对查询操作进行优化,通过减少全表扫描,快速定位数据,原本的查询操作是对表进行遍历,如果是大表效率较低 1)注意事项 占用了更多的空间,由于生成索引需要依赖于数据结构和额外数据&…...
Seay代码审计工具
Seay代码审计工具 介绍 Seay代码审计工具是一款由国内安全研究人员"Seay"开发的源代码安全审计工具,主要用于帮助安全人员快速发现PHP代码中的安全漏洞,快速定位代码中的安全风险点。 主要功能特点 自动化审计功能 支持自动扫描PHP代码中的…...
【人工智障生成日记1】从零开始训练本地小语言模型
🎯 从零开始训练本地小语言模型:MiniGPT TinyStories(4090Ti) 🧭 项目背景 本项目旨在以学习为目的,从头构建一个完整的本地语言模型训练管线。目标是: ✅ 不依赖外部云计算✅ 完全本地运行…...
技术分享:大数据挖掘平台架构设计与行业应用实践
在数字化转型浪潮下,企业数据规模呈指数级增长。如何构建高效的数据挖掘体系,实现数据价值变现,成为技术团队面临的重要课题。本文将深入探讨大数据挖掘平台的核心架构、关键技术及行业应用实践。 一、平台架构设计 1. 数据采集层 支持多源异…...
线性Wi-Fi FEM被卷死,非线性FEM是未来?
在跑了一圈路由器客户之后,我的内心反而平静下来,被卷死的不只是Wi-Fi FEM赛道,还有家用路由器市场。 尽管路由器市场比较惨淡,不过客户还是很愿意接见我,并做更广泛的交流和探讨。一方面之前推Wi-Fi FEM的众多厂商在渐…...
OpenCV CUDA模块图像过滤------用于创建一个最小值盒式滤波器(Minimum Box Filter)函数createBoxMinFilter()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数创建的是一个 最小值滤波器(Minimum Filter),它对图像中每个像素邻域内的像素值取最小值。常用于&…...
【MySQL】06.MySQL表的增删查改
1. insert 我们先创建一个表结构,这部分操作我们使用这张表完成我们的操作: mysql> create table student(-> id int primary key auto_increment,-> name varchar(20) not null,-> qq varchar(20) unique-> ); Query OK, 0 rows affec…...
MySQL 索引失效及其解决办法
一、前言 在数据库优化中,索引(Index)是一项至关重要的技术手段,可以显著提升查询性能。然而,在实际开发过程中,MySQL 索引并不总是如预期生效。本文将从原理出发,系统地介绍索引失效的常见场景及其解决方案,帮助开发者有效规避性能陷阱。 二、索引基础回顾 MySQL 支…...
在线时间戳(Unix TimeStamp)转换器
做了一个在线时间戳转换器,简单、好用,提供多种日期格式。 移动端友好。 目标是做一套在线工具集,时间戳转换只是第一步。 欢迎试用...
flutter 项目调试、flutter run --debug调试模式 devtools界面说明
Flutter DevTools 网页界面说明 1. 顶部导航栏 Inspector:查看和调试 Widget 树,实时定位 UI 问题。Performance-- 性能分析面板,查看帧率、CPU 和 GPU 使用情况,识别卡顿和性能瓶颈。Memory-- 内存使用和对象分配分析ÿ…...
Qt C++实现马的遍历问题
在这个项目中,我们面对的是一个基于中国象棋的马的遍历问题,使用了C++编程语言,并结合了Qt5库来实现图形界面和棋盘的绘制。以下是这个项目涉及的关键知识点: 马的移动规则:马在象棋中具有独特的“日”字形移动方式,即每次可以向前、后、左或右移动一格,然后在同一行或同…...
web第六次课后作业--使用ApiFox实现请求响应操作
一、实体参数 1.1 简单实体参数 1.2 复杂实体对象 如果请求参数比较多,通过上述的方式一个参数一个参数的接收会比较繁琐。此时,我们可以考虑将请求参数封装到一个实体类对象中。 要想完成数据封装,需要遵守如下规则:请求参数名…...
第十周作业
一、CSRF 1、DVWA-High等级 2、使用Burp生成CSRF利用POC并实现攻击 二、SSRF:file_get_content实验,要求获取ssrf.php的源码 三、RCE 1、 ThinkPHP 2、 Weblogic 3、Shiro...
Excel合并单元格后,如何自动批量生成序号列
1.选择整列 2.组合键:CtrlG 3.定位条件,选择“空值” 4.在第一个框中输入“MAX(”,鼠标选中A1框,后加“:”,鼠标选中前方“A1”,按“F4”绝对引用,补全右括号,后输入“1…...
数据结构 -- B树和B+树
B树 B树 5叉查找树 最少1个关键字,2个分叉 最多4个关键字,5个分叉 如何保证查找效率 (1)eg.对于5叉排序树,规定除了根节点外,任意结点都至少有3个分叉,2个关键字 (若每个结点内关…...
el-table高度自适应、数据查询后高度展示错误问题
在很多场景中我们需要实现表格的高度自适应,即不同屏幕大小下需要使用不同的高度来设置表格,那么我们应该如何实现呢? 1.el-table实现高度自适应 通过以下代码可以实现表格根据屏幕进行自适应 设置表格的高度 <el-table ref"tableD…...
unittest
1.什么是unittest? unittest是Python自带的一个单元测试框架, 它可以做单元测试, 也能用于编写和运行重复的测试工作。它给自动化测试用例开发和执行提供了丰富的断言方法, 判断测试用例是否通过, 并最终生成测试结果. 2.unittest组成 2.1 TestCase TestCase即测试…...
【Linux学习笔记】ext2文件系统的深度剖析
【Linux学习笔记】ext2文件系统的深度剖析 🔥个人主页:大白的编程日记 🔥专栏:Linux学习笔记 文章目录 【Linux学习笔记】ext2文件系统的深度剖析前言一.ext2文件系统1.1宏观认识 二. Block Group三. 块组内部构成3.1 超级块&am…...
Vue 3 官方 Hooks 的用法与实现原理
Vue 3 引入了 Composition API,使得生命周期钩子(hooks)在函数式风格中更清晰地表达。本篇文章将从官方 hooks 的使用、实现原理以及自定义 hooks 的结构化思路出发,全面理解 Vue 3 的 hooks 系统。 📘 1. Vue 3 官方生…...
通过现代数学语言重构《道德经》核心概念体系,形成一个兼具形式化与启发性的理论框架
以下是对《道德经》的数学转述尝试,通过现代数学语言重构其核心概念,形成一个兼具形式化与启发性的理论框架: 0. 基础公理体系 定义: 《道德经》是一个动态宇宙模型 U(D,V,Φ),其中: D 为“道”的无限维…...
openai-whisper-asr-webservice接入dify
openai-whisper-asr-webservice提供的asr的api其实并不兼容openai的api,所以在dify中是不能直接添加到语音转文字的模型中,对比了下两个api的传参情况,其实只要改动一处,就能支持: openai兼容的asr调用中formdata中音频…...
曾经在知乎上看到一个回答:“入职做FPGA,后续是否还可以转数字IC设计?”
曾经在知乎上看到一个回答:“入职做FPGA,后续是否还可以转数字IC设计?” 对比FPGA的行业薪资水平,数字IC行业中的一些基础性岗位薪资比FPGA要高一些。 除了薪资之外,更多FPGA开发者考虑转向数字IC设计的原因如下&…...
第4周_作业题_逐步构建你的深度神经网络
文章目录 ***逐步构建你的深度神经网络***0. 背景0.1 要解决的问题0.2 作业大纲0.3 构建深层神经网络步骤 1. 导入包2. 初始化参数2.1 2层神经网络2.2 L层神经网络 3. 前项传播函数3.1 前项传播步骤3.2 线性前向3.3 线性激活部分3.4 L层前项传播模型3.5 计算成本 4. 反向传播模…...
Linux 搭建FTP服务器(vsftpd)
搭建FTP服务器(vsftpd): 文章目录 搭建FTP服务器(vsftpd):配置镜像安装vsftpd配置vsftpd关闭SELinux:配置防火墙启动vsfptd服务并设置开机自启创建FTP用户测试windows中测试Linux测试下载get/mget上传put/mput删除文件delete 搭建SCP服务器(基…...
AWS中国区中API Gateway中403的AccessDeniedException问题
问题 在互联网使用API Gateway的域名访问接口,出现403问题AccessDeniedException。具体如下: 前提 这里API Gateway相关配置都没有问题。而且,vpc内网都能访问被代理的服务。这里api gateway不需要使用自定义域名。 解决 向客服发个工单…...
计量单片机 RN8302:特性、使用与应用
在现代电力监测与能源管理领域,精确的电能计量至关重要。计量单片机 RN8302 作为一款高性能的电能计量芯片,凭借其卓越的特性与功能,在众多应用场景中发挥着关键作用。本文将全面深入地介绍 RN8302 的各项特性、使用方法、注意事项以及广泛的…...
Flutter生物识别认证之Flutter指纹认证Flutter人脸认证
Flutter介绍: Flutter是谷歌开发的开源UI软件开发工具包,用于高效构建跨平台的应用程序,支持iOS、Android、Web、Windows、macOS和Linux。它使用Dart语言编写,提供了丰富的组件和工具,使开发者能够创建高质量、高性能…...
了解Android studio 初学者零基础推荐(2)
在kotlin中编写条件语句 if条件语句 fun main() {val trafficLight "gray"if (trafficLight "red") {println("Stop!")} else if (trafficLight "green") {println("go!")} else if (trafficLight "yellow")…...
【Java Web】1.Maven
📘博客主页:程序员葵安 🫶感谢大家点赞👍🏻收藏⭐评论✍🏻 文章目录 一、初始Maven 1.1 什么是Maven 1.2 Maven的作用 二、Maven概述 2.1 Maven模型 2.2 Maven仓库 2.3 创建Maven项目 2.4 POM配置…...
【Spark集成HBase】Spark读写HBase表
Spark读写HBase表 摘要一、实验环境准备1. 技术版本2. Maven 依赖配置 二、实验步骤1. 数据准备2. HBase 表结构设计3. 代码实现3.1 数据写入 HBase(writeDataToHBase 方法)3.2 数据读取与分析(readHBaseData 方法3.3 Spark SQL 分析3.4 完整…...
【Linux】借助gcc源码修改,搜索头文件当前进展
从上图可以看出对于每次的搜索,都是从第一个目录开始搜索,图里也可以看到修改源代码所在的目录,函数,行,昨天的博客感觉对于找到的位置还是不太好。 在使用修改源代码编译的GCC,进行编译内核源代码时&#…...
jmeter登录接口生成一批token并写入csv文件
背景:大部分项目真实的业务接口都是需要token鉴权的,想对一批核心业务接口进行并发压测,必然要先生成一批token给这些接口并发循环调用。 基本的思路是这样的:一批手机号csv文件 -》登录接口循环读取csv文件并生成token -》每次…...
利用 Redis 设计高效分布式锁机制:保障操作原子性
利用 Redis 设计高效分布式锁机制:保障操作原子性 引言 在分布式系统中,多个节点可能会同时操作共享资源,导致数据不一致或竞争条件问题。因此,构建一个高效的 分布式锁机制 是保障数据完整性的重要策略。 Redis 作为一个高性能的内存数据库,因其 单线程特性 和 丰富的数…...
Redis 的速度为什么这么快
这里的速度快,Redis 的速度快是与 MySQL 等数据库相比较的,与直接操作内存数据相比,Redis 还是略有逊色。 Redis 是一个单线程模型,为什么比其他的多线程程序还要快,原因有以几点: 1、访问的对象不同 Re…...
Spring Cloud Gateway高并发限流——基于Redis实现方案解析
本文是一个基于 Spring Cloud Gateway 的分布式限流方案,使用Redis Lua实现高并发场景下的精准流量控制。该方案支持动态配置、多维度限流(API路径/IP/用户),并包含完整的代码实现和性能优化建议。 一、架构设计 #mermaid-svg-vg…...
【VScode】python初学者的有力工具
还记得23年11月,我还在欣喜Spyder像Rstudio一样方便。 但苦于打开软件打开太卡、太耗时(初始化-再加载一些东西),一度耗费了我学习的热情。 就在24年5月份,别人推荐下发现了一个更加轻量级、方便又快速的ID࿰…...
融合蛋白质语言模型和图像修复模型,麻省理工与哈佛联手提出PUPS ,实现单细胞级蛋白质定位
蛋白质亚细胞定位(subcellular localization of a protein)是指蛋白质在细胞结构中具体的定位情况, 这对蛋白质行使其生物学功能至关重要。举个简单例子,如果把细胞想象成一个庞大的企业,其中细胞核、线粒体、细胞膜等…...
火山引擎火山云带宽价格
首先,成本结构方面,火山云可能用的是高质量的带宽资源,比如BGP多线网络,这种网络能保证更好的连通性和稳定性,但成本更高。另外,如果火山云的数据中心节点分布在多个地区,尤其是海外,…...
可信计算是什么?可信逻辑:计算系统安全的形式化分析框架
参考书籍《人工智能安全 (陈左宁 主编;卢锡城 、方滨兴 副主编)》第二章内容; 相关博客:可信执行环境(TEE):保障数据安全的核心技术 文章目录 一、可信计算的逻辑学基础1.1 可信性的逻辑定义与范畴1.2 双体系架构的逻…...
大模型应用开发之Dify进阶版使用教程—react前端+django后端+dify-API制作聊天界面
Dify进阶使用教程 文章目录 Dify进阶使用教程前言一、dify-docker环境搭建及简单使用二、本篇使用API源码部署启动dify后端启动dify前端基于通义模型的智能客服机器人应用与自己项目联动实战1. 使用API进行项目与dify联动1.1 在控制台主页,点击创建访问API1.2 进入API页面,这…...
快速创建 Vue 3 项目
安装 Node.js 和 Vue CL 安装 Node.js:访问 https://nodejs.org/ 下载并安装 LTS 版本。 安装完后,在终端检查版本: node -v npm -v安装 Vue CLI(全局): npm install -g vue/cli创建 Vue 3 项目 vue cr…...
【VLNs篇】05:TGS-在无地图室外环境中使用视觉语言模型进行轨迹生成和选择
栏目内容论文标题TGS: Trajectory Generation and Selection using Vision Language Models in Mapless Outdoor Environments (TGS:在无地图室外环境中使用视觉语言模型进行轨迹生成和选择)研究问题在具有非结构化越野特征(如建筑物、草地、路缘&#x…...
【未来展望】云、AI与元宇宙的融合架构
未来展望:云、AI与元宇宙的融合架构 一、技术背景与发展:从独立演进到深度融合二、技术特点:异构协同与场景化适配三、技术细节:架构层解构与核心组件四、未来发展:技术趋势与产业机遇五、结语:硅基与碳基文明的共生演进一、技术背景与发展:从独立演进到深度融合 云计算…...
React+Taro 微信小程序做一个页面,背景图需贴手机屏幕最上边覆盖展示
话不多说 直接上图 第一步 import { getSystemInfoSync } from tarojs/taro;第二步 render() {const cardBanner getImageUrlByGlobal(member-merge-bg.png);const { safeArea, statusBarHeight } getSystemInfoSync();const NAV_BAR_HEIGHT 44;const navBarHeight NAV…...
Linux笔记---信号(下)
1. sigaction函数 #include <signal.h>int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); 功能:sigaction函数用于检查或修改与指定信号相关联的处理动作。它可以用来设置信号处理函数、信号掩码等。 参数 signum&#…...
腾讯云媒体AI解码全球视频出海智能密码
当短剧平台撞上多语种字幕困境,当直播电商遭遇文化审核危机,当经典影视困于格式壁垒——这些内容出海的难题,正被腾讯云媒体AI的智能引擎逐个破解。从东南亚的直播卡顿到中东的宗教符号雷区,从老片的低清画质到元宇宙的渲染瓶颈&a…...
Django的请求和响应+template模板
🌟 如果这篇文章触动了你的心弦,请不要吝啬你的支持! 亲爱的读者, 感谢你花时间阅读这篇分享。希望这里的每一个字都能为你带来启发或是让你会心一笑。如果你觉得这篇文章有价值,或者它解决了你一直以来的一个疑问&a…...
JAVA8怎么使用9的List.of
在 Java 8 中,List.of 方法并不可用,因为这是从 Java 9 开始引入的用于创建不可变列表的便捷方法。要在 Java 8 中达到类似的效果,您需要使用其他方式来创建列表。常规的方法是先创建集合对象然后再添加元素 List<String> list new A…...
无人机避障——深蓝学院浙大Ego-Planner规划部分
ESDF-free: 被这种类型的障碍物死死卡住的情况: 在一定范围内建立ESDF: Ego-Planner框架: 找到{p,v} pair: 【注意】:首先根据在障碍物内航迹上的点Q,以及与它相邻但不在障碍物内的两个点&#…...