dify-on-wechat中的entrypoint.sh脚本

注解:因为ntwork类库不支持Linux环境,所以企业微信就放弃了容器部署。

通过dockerfile启动容器:

cd dify-on-wechat/docker       # 进入docker目录
docker compose up -d           # 启动docker容器
docker logs -f dify-on-wechat  # 查看二维码并登录

代码位置:dify-on-wechat/docker/entrypoint.sh。当容器启动时,执行entrypoint.sh脚本:

#!/bin/bash
set -e# build prefix
DIFY_ON_WECHAT_PREFIX=${DIFY_ON_WECHAT_PREFIX:-""}
# path to config.json
DIFY_ON_WECHAT_CONFIG_PATH=${DIFY_ON_WECHAT_CONFIG_PATH:-""}
# execution command line
DIFY_ON_WECHAT_EXEC=${DIFY_ON_WECHAT_EXEC:-""}# use environment variables to pass parameters
# if you have not defined environment variables, set them below
# export OPEN_AI_API_KEY=${OPEN_AI_API_KEY:-'YOUR API KEY'}
# export OPEN_AI_PROXY=${OPEN_AI_PROXY:-""}
# export SINGLE_CHAT_PREFIX=${SINGLE_CHAT_PREFIX:-'["bot", "@bot"]'}
# export SINGLE_CHAT_REPLY_PREFIX=${SINGLE_CHAT_REPLY_PREFIX:-'"[bot] "'}
# export GROUP_CHAT_PREFIX=${GROUP_CHAT_PREFIX:-'["@bot"]'}
# export GROUP_NAME_WHITE_LIST=${GROUP_NAME_WHITE_LIST:-'["ChatGPT测试群", "ChatGPT测试群2"]'}
# export IMAGE_CREATE_PREFIX=${IMAGE_CREATE_PREFIX:-'["画", "看", "找"]'}
# export CONVERSATION_MAX_TOKENS=${CONVERSATION_MAX_TOKENS:-"1000"}
# export SPEECH_RECOGNITION=${SPEECH_RECOGNITION:-"False"}
# export CHARACTER_DESC=${CHARACTER_DESC:-"你是ChatGPT, 一个由OpenAI训练的大型语言模型, 你旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。"}
# export EXPIRES_IN_SECONDS=${EXPIRES_IN_SECONDS:-"3600"}# DIFY_ON_WECHAT_PREFIX is empty, use /app
if [ "$DIFY_ON_WECHAT_PREFIX" == "" ] ; thenDIFY_ON_WECHAT_PREFIX=/app
fi# DIFY_ON_WECHAT_CONFIG_PATH is empty, use '/app/config.json'
if [ "$DIFY_ON_WECHAT_CONFIG_PATH" == "" ] ; thenDIFY_ON_WECHAT_CONFIG_PATH=$DIFY_ON_WECHAT_PREFIX/config.json
fi# DIFY_ON_WECHAT_EXEC is empty, use ‘python app.py’
if [ "$DIFY_ON_WECHAT_EXEC" == "" ] ; thenDIFY_ON_WECHAT_EXEC="python app.py"
fi# modify content in config.json
# if [ "$OPEN_AI_API_KEY" == "YOUR API KEY" ] || [ "$OPEN_AI_API_KEY" == "" ]; then
#     echo -e "\033[31m[Warning] You need to set OPEN_AI_API_KEY before running!\033[0m"
# fi# go to prefix dir
cd $DIFY_ON_WECHAT_PREFIX
# excute
$DIFY_ON_WECHAT_EXEC

这段 Bash 脚本主要用于配置和启动一个 Python 应用程序,脚本中使用了多个环境变量来控制不同的配置选项。下面逐一解释每一部分的功能和用途:

1.设置脚本行为
set -e

这一行让脚本在执行过程中如果遇到任何错误立即退出。set -e 是确保脚本在出现任何非零退出状态的命令后立即终止执行,提高脚本的稳定性和可预测性。

2.定义默认环境变量

这部分代码使用了 Bash 的参数展开功能,如果环境变量未设置,则为其提供默认值。例如:

DIFY_ON_WECHAT_PREFIX=${DIFY_ON_WECHAT_PREFIX:-""}

如果 `DIFY_ON_WECHAT_PREFIX 没有被设置,它将默认为一个空字符串。这种模式在脚本中用于多个变量,确保所有重要的配置都有明确的值。

3.条件赋值
if [ "$DIFY_ON_WECHAT_PREFIX" == "" ] ; thenDIFY_ON_WECHAT_PREFIX=/app
fi

这个条件检查 DIFY_ON_WECHAT_PREFIX 是否为空,如果为空,则将其设置为 /app。这样的条件赋值确保了即使环境变量未被外部明确设置,应用也能有一个合理的默认运行目录。

4.配置文件路径设置
if [ "$DIFY_ON_WECHAT_CONFIG_PATH" == "" ] ; thenDIFY_ON_WECHAT_CONFIG_PATH=$DIFY_ON_WECHAT_PREFIX/config.json
fi

这里设置配置文件的路径,默认位置是在 DIFY_ON_WECHAT_PREFIX 目录下的 config.json

5.执行命令设置
if [ "$DIFY_ON_WECHAT_EXEC" == "" ] ; thenDIFY_ON_WECHAT_EXEC="python app.py"
fi

设置启动应用程序的命令,默认为 python app.py。这允许通过环境变量覆盖执行命令,从而增加灵活性。

6.目录切换与应用执行
cd $DIFY_ON_WECHAT_PREFIX
$DIFY_ON_WECHAT_EXEC

脚本会改变当前目录到 DIFY_ON_WECHAT_PREFIX 指定的目录,然后执行 DIFY_ON_WECHAT_EXEC 指定的命令来启动应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/42667.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XML Schema 属性

XML Schema 属性 XML Schema 是一种用于定义 XML 文档结构和内容的语言。它提供了一种强大的方式来描述 XML 文档中的元素、属性和数据类型。在 XML Schema 中,属性是用于提供有关元素的额外信息的标记,它们可以增强元素的功能和表达能力。本文将详细介绍 XML Schema 中的属…

基于Java+SpringMvc+Vue技术的实验室管理系统设计与实现

博主介绍:硕士研究生,专注于信息化技术领域开发与管理,会使用java、标准c/c等开发语言,以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年,拥有近12年的管理工作经验,拥有较丰富的技术架…

游戏开发面试题4

局部变量全局变量 全局变量是定义在函数外部的变量,它可以在函数的内外部的任何地方被访问和使用。全局变量通常定义在程序的开头,在整个程序运行期间都是可用的。局部变量是定义在函数内部的变量,它只能在函数的内部被访问和使用。局部变量…

SUSAN

1995年英国牛津大学的S.M.Smith提出了一种新的图像边缘检测算法SUSAN算法,不同于以前经典边缘检测算法,SUSAN算法基于灰度相似性比较,采用圆形模板,对图像进行灰度差统计,无需计算方向导数,而且具备积分特性,它简单而且有效,适用于图像中边缘和角点的检测,可以去除图像…

土豆炒肉做法

菜单:土豆、葱、铁辣子、纯瘦肉、淀粉、生抽、酱油、刀、案板、十三香、盐巴、擦板 流程: 洗土豆,削皮,擦成条,用凉水过滤两遍淀粉,顺便放个燥里洗肉,切成条,按照生抽、酱油、淀粉、…

js好用的动态分页插件

js好用的动态分页插件是一款简单的分页样式插件,支持样式类型,当前页,每页显示数量,按钮数量,总条数,上一页文字,下一页文字,输入框跳转等功能。 js好用的动态分页插件

通过IDEA生成webapp及web.xml配置文件

1、选择File->Project Structure 2、选择Modules-> + -> Web 有的springboot工程选择是war工程,这个web可能已经存在了。 如果不存在,就手动创建,创建后,需要修改pom.xml中的配置 <packaging>war</packaging> 3、创建webapp根目录 这步重点就是创建…

介绍一款Java开发的商业开源MES系统

介绍一款Java开发的开源MES系统&#xff0c;万界星空科技开源的MES系统。该系统基于Java开发&#xff0c;具有广泛的适用性和高度的可定制性&#xff0c;能够满足不同行业、不同规模企业的智能制造需求。 一、系统概述 万界星空科技开源的MES系统是一款面向制造企业车间执行层…

第五十章 Web Service URL 汇总

文章目录 第五十章 Web Service URL 汇总Web 服务 URLWeb 服务的端点WSDL 使用受密码保护的 WSDL URL 第五十章 Web Service URL 汇总 本主题总结了与 IRIS 数据平台 Web 服务相关的 URL。 Web 服务 URL 与 IRIS Web 服务相关的 URL 如下&#xff1a; Web 服务的端点 http…

昇思25天学习打卡营第19天 | CycleGAN图像风格迁移互换

内容介绍&#xff1a; CycleGAN(Cycle Generative Adversarial Network) 即循环对抗生成网络&#xff0c;该模型实现了一种在没有配对示例的情况下学习将图像从源域 X 转换到目标域 Y 的方法。 该模型一个重要应用领域是域迁移(Domain Adaptation)&#xff0c;可以通俗地理解…

Java中获取Class对象的三种方式

Java中获取Class对象的三种方式 1、对象调用getClass()方法2、类名.class的方式3、通过Class.forName()静态方法4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java中&#xff0c;Class对象是一个非常重要的概念&#xff0c;它代…

JVM原理(二十):JVM虚拟机内存的三特性详解

1. 原子性、可进行、有序性 1.1. 原子性 Java内存模型围绕着在并发过程中如何处理原子性、可见性和有序性这三个特征来建立的。 Java内存模型来直接保证的原子性变量操作包括read、load、assign、use、store和write这六个。我们大致可以认为&#xff0c;基本数据类型的访问、…

呼叫中心被DDOS攻击怎么办?

呼叫中心作为企业与客户沟通的重要桥梁&#xff0c;其稳定性和安全性直接关系到企业的运营效率和客户满意度。然而&#xff0c;面对日益猖獗的DDoS&#xff08;分布式拒绝服务&#xff09;攻击&#xff0c;如何保障呼叫中心的稳定运行成为了每一家企业都不得不面对的问题。 遭…

科普新能源充电桩

充电桩是新能源电动车的配套基础设施&#xff0c;为电动车提供充电服务&#xff0c;与我们的生活也是息息相关&#xff0c;本篇文章来科普一下充电桩基础知识。 充电桩的分类 按照供电方式分类 交流充电桩&#xff1a;特点是小电流、桩体较小、安装灵活&#xff1b;直流充电…

Vuetify3:v-data-table增加下拉筛选

我们在做列表显示的时候为了让用户快速找到自己想要的数据&#xff0c;都会提供快捷筛选&#xff0c;我们就需要在 v-data-table 表头中提供下拉选择&#xff0c;我们可以参考v-data-table Headers 插槽 &#xff0c;扩展很强&#xff0c;我们可以自定义&#xff0c;代码&…

算法整理——【动态规划练习(2)01背包】

一、背包问题简述以及01背包解题思路 背包问题包括01背包、完全背包、多重背包等。其中基础和重点就是01背包和完全背包&#xff0c;所以我们现在就背包问题中的01背包和完全背包问题进行学习&#xff0c;使用动态规划解决背包问题。 01背包是其他背包的基础&#xff0c;我们…

【TB作品】51单片机 Proteus仿真 超声波LCD1602ADC0832 身高体重测量仪

00024 超声波LCD1602ADC0832 实验报告&#xff1a;基于51单片机的身高体重测量仪设计 背景介绍 本实验设计并实现了一个基于51单片机的身高体重测量仪。该系统利用超声波传感器测量高度&#xff0c;通过ADC0832模数转换芯片获取重量数据&#xff0c;并使用LCD1602显示屏显示…

Alt与Tab切换窗口时将Edge多个标签页作为一个整体参与切换的方法

本文介绍在Windows电脑中&#xff0c;使用Alt与Tab切换窗口时&#xff0c;将Edge浏览器作为一个整体参与切换&#xff0c;而不是其中若干个页面参与切换的方法。 最近&#xff0c;需要将主要使用的浏览器由原本的Chrome换为Edge&#xff1b;但是&#xff0c;在更换后发现&#…

桌面快充插线板+伸缩数据线,轻松实现1+1>2

手机、平板、笔记本等电子设备已成为我们日常工作和学习的必备工具。然而,随着设备数量的增加,充电问题也日益凸显。桌面空间有限,多个快充头不仅显得杂乱无章,而且效率低下,无法满足我们高效办公的需求。 在这样的背景下,倍思Nomos氮化镓100W桌面充电站凭借其创新的设计和强大…

SpringBoot新手快速入门系列教程七:基于一个低配centoos服务器,如何通过宝塔面板部署一个SpringBoot项目

1&#xff0c;如何打包一个项目 通过IDEA自带的命令行&#xff0c;执行 ./gradlew clean build 2&#xff0c;检查生成的JAR文件 进入 build/libs 目录&#xff0c;你应该会看到一个类似 helloredis-0.0.1-SNAPSHOT.jar 的文件。 3&#xff1a;运行生成的JAR文件 你可以在…