From d4b0af3dbae3e672ed181b0c61f1d154a618976a Mon Sep 17 00:00:00 2001 From: Ivan Dachev Date: Wed, 27 Mar 2024 16:07:04 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=92=BD=20feat:=20Add=20CONSOLE=5FJSON=20f?= =?UTF-8?q?or=20deploying=20to=20GCP=20K8S=20env=20(#2146)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add CONSOLE_JSON * Update example env * Moved to utils --- .env.example | 27 +++++++++++++++++---------- api/config/winston.js | 28 +++++++++++++++++++++------- utils/docker/docker-build.sh | 21 +++++++++++++++++++++ utils/docker/docker-push.sh | 31 +++++++++++++++++++++++++++++++ 4 files changed, 90 insertions(+), 17 deletions(-) create mode 100755 utils/docker/docker-build.sh create mode 100755 utils/docker/docker-push.sh diff --git a/.env.example b/.env.example index ea1623d8d4..959f50a2d5 100644 --- a/.env.example +++ b/.env.example @@ -23,6 +23,13 @@ DOMAIN_SERVER=http://localhost:3080 NO_INDEX=true +#===============# +# JSON Logging # +#===============# + +# Use when process console logs in cloud deployment like GCP/AWS +CONSOLE_JSON=false + #===============# # Debug Logging # #===============# @@ -128,7 +135,7 @@ DEBUG_OPENAI=false # OPENAI_REVERSE_PROXY= -# OPENAI_ORGANIZATION= +# OPENAI_ORGANIZATION= #====================# # Assistants API # @@ -317,15 +324,15 @@ OPENID_IMAGE_URL= # Email Password Reset # #========================# -EMAIL_SERVICE= -EMAIL_HOST= -EMAIL_PORT=25 -EMAIL_ENCRYPTION= -EMAIL_ENCRYPTION_HOSTNAME= -EMAIL_ALLOW_SELFSIGNED= -EMAIL_USERNAME= -EMAIL_PASSWORD= -EMAIL_FROM_NAME= +EMAIL_SERVICE= +EMAIL_HOST= +EMAIL_PORT=25 +EMAIL_ENCRYPTION= +EMAIL_ENCRYPTION_HOSTNAME= +EMAIL_ALLOW_SELFSIGNED= +EMAIL_USERNAME= +EMAIL_PASSWORD= +EMAIL_FROM_NAME= EMAIL_FROM=noreply@librechat.ai #========================# diff --git a/api/config/winston.js b/api/config/winston.js index 0c167b807f..81e972fbbc 100644 --- a/api/config/winston.js +++ b/api/config/winston.js @@ -5,7 +5,15 @@ const { redactFormat, redactMessage, debugTraverse } = require('./parsers'); const logDir = path.join(__dirname, '..', 'logs'); -const { NODE_ENV, DEBUG_LOGGING = true, DEBUG_CONSOLE = false } = process.env; +const { NODE_ENV, DEBUG_LOGGING = true, DEBUG_CONSOLE = false, CONSOLE_JSON = false } = process.env; + +const useConsoleJson = + (typeof CONSOLE_JSON === 'string' && CONSOLE_JSON?.toLowerCase() === 'true') || + CONSOLE_JSON === true; + +const useDebugConsole = + (typeof DEBUG_CONSOLE === 'string' && DEBUG_CONSOLE?.toLowerCase() === 'true') || + DEBUG_CONSOLE === true; const levels = { error: 0, @@ -33,7 +41,7 @@ const level = () => { const fileFormat = winston.format.combine( redactFormat(), - winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), + winston.format.timestamp({ format: () => new Date().toISOString() }), winston.format.errors({ stack: true }), winston.format.splat(), // redactErrors(), @@ -99,14 +107,20 @@ const consoleFormat = winston.format.combine( }), ); -if ( - (typeof DEBUG_CONSOLE === 'string' && DEBUG_CONSOLE?.toLowerCase() === 'true') || - DEBUG_CONSOLE === true -) { +if (useDebugConsole) { transports.push( new winston.transports.Console({ level: 'debug', - format: winston.format.combine(fileFormat, debugTraverse), + format: useConsoleJson + ? winston.format.combine(fileFormat, debugTraverse, winston.format.json()) + : winston.format.combine(fileFormat, debugTraverse), + }), + ); +} else if (useConsoleJson) { + transports.push( + new winston.transports.Console({ + level: 'info', + format: winston.format.combine(fileFormat, winston.format.json()), }), ); } else { diff --git a/utils/docker/docker-build.sh b/utils/docker/docker-build.sh new file mode 100755 index 0000000000..086a64d7d5 --- /dev/null +++ b/utils/docker/docker-build.sh @@ -0,0 +1,21 @@ +#!/bin/bash +[ "$1" = -x ] && shift && set -x +DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +cd ${DIR}/../.. + +TAG=$1 + +if [[ -z "${TAG}" ]]; then + TAG=${LIBRE_CHAT_DOCKER_TAG} +fi + +if [[ -z "${TAG}" ]]; then + TAG=latest +fi + +LOCAL_DOCKER_IMG=librechat:${TAG} + +set -e + +docker build -t ${LOCAL_DOCKER_IMG} . diff --git a/utils/docker/docker-push.sh b/utils/docker/docker-push.sh new file mode 100755 index 0000000000..2e1df51e3b --- /dev/null +++ b/utils/docker/docker-push.sh @@ -0,0 +1,31 @@ +#!/bin/bash +[ "$1" = -x ] && shift && set -x +DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +cd ${DIR}/../.. + +TAG=$1 + +if [[ -z "${TAG}" ]]; then + TAG=${LIBRE_CHAT_DOCKER_TAG} +fi + +if [[ -z "${TAG}" ]]; then + TAG=latest +fi + +LOCAL_DOCKER_IMG=librechat:${TAG} + +if [[ -z "${DOCKER_REMOTE_REGISTRY}" ]]; then + echo "DOCKER_REMOTE_REGISTRY is not set" >&2 + + exit 1 +fi + +REMOTE_DOCKER_IMG=${DOCKER_REMOTE_REGISTRY}/${LOCAL_DOCKER_IMG} + +set -e + +docker tag ${LOCAL_DOCKER_IMG} ${REMOTE_DOCKER_IMG} + +docker push ${REMOTE_DOCKER_IMG}