Parcourir la source

docker: use environment args to set parameters

lanvent il y a 3 ans
Parent
commit
46a6223a43
5 fichiers modifiés avec 23 ajouts et 63 suppressions
  1. 6 2
      config.py
  2. 1 1
      docker/Dockerfile.latest
  3. 1 1
      docker/build.latest.sh
  4. 1 1
      docker/docker-compose.yaml
  5. 14 58
      docker/entrypoint.sh

+ 6 - 2
config.py

@@ -4,7 +4,7 @@ import json
 import os
 from common.log import logger
 
-# 将所有可用的配置项写在字典里
+# 将所有可用的配置项写在字典里, 请使用小写字母
 available_setting ={
     #openai api配置
     "open_ai_api_key": "", # openai api key
@@ -106,9 +106,13 @@ def load_config():
     # override config with environment variables.
     # Some online deployment platforms (e.g. Railway) deploy project from github directly. So you shouldn't put your secrets like api key in a config file, instead use environment variables to override the default config.
     for name, value in os.environ.items():
+        name = name.lower()
         if name in available_setting:
             logger.info("[INIT] override config by environ args: {}={}".format(name, value))
-            config[name] = value
+            try:
+                config[name] = eval(value)
+            except:
+                config[name] = value
 
     logger.info("[INIT] load config: {}".format(config))
 

+ 1 - 1
docker/Dockerfile.latest

@@ -28,7 +28,7 @@ ADD ./entrypoint.sh /entrypoint.sh
 
 RUN chmod +x /entrypoint.sh \
     && adduser -D -h /home/noroot -u 1000 -s /bin/bash noroot \
-    && chown noroot:noroot ${BUILD_PREFIX}
+    && chown -R noroot:noroot ${BUILD_PREFIX}
 
 USER noroot
 

+ 1 - 1
docker/build.latest.sh

@@ -4,5 +4,5 @@
 tar -zcf chatgpt-on-wechat.tar.gz --exclude=../../chatgpt-on-wechat/docker  ../../chatgpt-on-wechat
 
 # build image
-docker build -f Dockerfile.alpine \
+docker build -f Dockerfile.latest \
              -t zhayujie/chatgpt-on-wechat .

+ 1 - 1
docker/docker-compose.yaml

@@ -15,6 +15,6 @@ services:
       GROUP_NAME_WHITE_LIST: '["ChatGPT测试群", "ChatGPT测试群2"]'
       IMAGE_CREATE_PREFIX: '["画", "看", "找"]'
       CONVERSATION_MAX_TOKENS: 1000
-      SPEECH_RECOGNITION: 'false'
+      SPEECH_RECOGNITION: "False"
       CHARACTER_DESC: '你是ChatGPT, 一个由OpenAI训练的大型语言模型, 你旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。'
       EXPIRES_IN_SECONDS: 3600

+ 14 - 58
docker/entrypoint.sh

@@ -8,17 +8,19 @@ CHATGPT_ON_WECHAT_CONFIG_PATH=${CHATGPT_ON_WECHAT_CONFIG_PATH:-""}
 # execution command line
 CHATGPT_ON_WECHAT_EXEC=${CHATGPT_ON_WECHAT_EXEC:-""}
 
-OPEN_AI_API_KEY=${OPEN_AI_API_KEY:-""}
-OPEN_AI_PROXY=${OPEN_AI_PROXY:-""}
-SINGLE_CHAT_PREFIX=${SINGLE_CHAT_PREFIX:-""}
-SINGLE_CHAT_REPLY_PREFIX=${SINGLE_CHAT_REPLY_PREFIX:-""}
-GROUP_CHAT_PREFIX=${GROUP_CHAT_PREFIX:-""}
-GROUP_NAME_WHITE_LIST=${GROUP_NAME_WHITE_LIST:-""}
-IMAGE_CREATE_PREFIX=${IMAGE_CREATE_PREFIX:-""}
-CONVERSATION_MAX_TOKENS=${CONVERSATION_MAX_TOKENS:-""}
-SPEECH_RECOGNITION=${SPEECH_RECOGNITION:-""}
-CHARACTER_DESC=${CHARACTER_DESC:-""}
-EXPIRES_IN_SECONDS=${EXPIRES_IN_SECONDS:-""}
+# use environment variables to pass parameters
+# if you have not defined environment variables, set them bwlow
+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"}
 
 # CHATGPT_ON_WECHAT_PREFIX is empty, use /app
 if [ "$CHATGPT_ON_WECHAT_PREFIX" == "" ] ; then
@@ -36,56 +38,10 @@ if [ "$CHATGPT_ON_WECHAT_EXEC" == "" ] ; then
 fi
 
 # modify content in config.json
-if [ "$OPEN_AI_API_KEY" != "" ] ; then
-    sed -i "s/\"open_ai_api_key\".*,$/\"open_ai_api_key\": \"$OPEN_AI_API_KEY\",/" $CHATGPT_ON_WECHAT_CONFIG_PATH
-else
+if [ "$OPEN_AI_API_KEY" == "YOUR API KEY" ] ; then
     echo -e "\033[31m[Warning] You need to set OPEN_AI_API_KEY before running!\033[0m"
 fi
 
-# use http_proxy as default
-if [ "$HTTP_PROXY" != "" ] ; then
-    sed -i "s/\"proxy\".*,$/\"proxy\": \"$HTTP_PROXY\",/" $CHATGPT_ON_WECHAT_CONFIG_PATH
-fi
-
-if [ "$OPEN_AI_PROXY" != "" ] ; then
-    sed -i "s/\"proxy\".*,$/\"proxy\": \"$OPEN_AI_PROXY\",/" $CHATGPT_ON_WECHAT_CONFIG_PATH
-fi
-
-if [ "$SINGLE_CHAT_PREFIX" != "" ] ; then
-    sed -i "s/\"single_chat_prefix\".*,$/\"single_chat_prefix\": $SINGLE_CHAT_PREFIX,/" $CHATGPT_ON_WECHAT_CONFIG_PATH
-fi
-
-if [ "$SINGLE_CHAT_REPLY_PREFIX" != "" ] ; then
-    sed -i "s/\"single_chat_reply_prefix\".*,$/\"single_chat_reply_prefix\": $SINGLE_CHAT_REPLY_PREFIX,/" $CHATGPT_ON_WECHAT_CONFIG_PATH
-fi
-
-if [ "$GROUP_CHAT_PREFIX" != "" ] ; then
-    sed -i "s/\"group_chat_prefix\".*,$/\"group_chat_prefix\": $GROUP_CHAT_PREFIX,/" $CHATGPT_ON_WECHAT_CONFIG_PATH
-fi
-
-if [ "$GROUP_NAME_WHITE_LIST" != "" ] ; then
-    sed -i "s/\"group_name_white_list\".*,$/\"group_name_white_list\": $GROUP_NAME_WHITE_LIST,/" $CHATGPT_ON_WECHAT_CONFIG_PATH
-fi
-
-if [ "$IMAGE_CREATE_PREFIX" != "" ] ; then
-    sed -i "s/\"image_create_prefix\".*,$/\"image_create_prefix\": $IMAGE_CREATE_PREFIX,/" $CHATGPT_ON_WECHAT_CONFIG_PATH
-fi
-
-if [ "$CONVERSATION_MAX_TOKENS" != "" ] ; then
-    sed -i "s/\"conversation_max_tokens\".*,$/\"conversation_max_tokens\": $CONVERSATION_MAX_TOKENS,/" $CHATGPT_ON_WECHAT_CONFIG_PATH
-fi
-
-if [ "$SPEECH_RECOGNITION" != "" ] ; then
-    sed -i "s/\"speech_recognition\".*,$/\"speech_recognition\": $SPEECH_RECOGNITION,/" $CHATGPT_ON_WECHAT_CONFIG_PATH
-fi
-
-if [ "$CHARACTER_DESC" != "" ] ; then
-    sed -i "s/\"character_desc\".*,$/\"character_desc\": \"$CHARACTER_DESC\",/" $CHATGPT_ON_WECHAT_CONFIG_PATH
-fi
-
-if [ "$EXPIRES_IN_SECONDS" != "" ] ; then
-    sed -i "s/\"expires_in_seconds\".*$/\"expires_in_seconds\": $EXPIRES_IN_SECONDS,/" $CHATGPT_ON_WECHAT_CONFIG_PATH
-fi
 
 # go to prefix dir
 cd $CHATGPT_ON_WECHAT_PREFIX