@@ -97,6 +97,7 @@ CURRENT_POSTGRES_PORT=$(env_get 'POSTGRES_PORT' '5432')
9797CURRENT_REDIS_PORT=$( env_get ' REDIS_PORT' ' 6379' )
9898CURRENT_MINIO_PORT=$( env_get ' MINIO_PORT' ' 9000' )
9999CURRENT_MINIO_CONSOLE=$( env_get ' MINIO_CONSOLE' ' 9001' )
100+ CURRENT_UMAMI_PORT=$( env_get ' UMAMI_PORT' ' ' )
100101CURRENT_MINIO_USER=$( env_get ' MINIO_USER' ' lrmcloud' )
101102CURRENT_MINIO_PASSWORD=$( env_get ' MINIO_PASSWORD' ' ' )
102103
@@ -120,6 +121,8 @@ OLD_MINIO_PASSWORD="$CURRENT_MINIO_PASSWORD"
120121CURRENT_JWT=$( config_get ' .auth.jwtSecret' ' ' )
121122CURRENT_ENCRYPTION=$( config_get ' .encryption.tokenKey' ' ' )
122123CURRENT_API_KEY_SECRET=$( config_get ' .apiKeyMasterSecret' ' ' )
124+ CURRENT_UMAMI_SECRET=$( config_get ' .analytics.umamiSecret' ' ' )
125+ CURRENT_WEBSITE_ID=$( config_get ' .analytics.websiteId' ' ' )
123126
124127CURRENT_MAIL_BACKEND=$( config_get ' .mail.backend' ' smtp' )
125128CURRENT_MAIL_HOST=$( config_get ' .mail.host' ' localhost' )
@@ -210,6 +213,26 @@ MINIO_PORT=${MINIO_PORT:-$CURRENT_MINIO_PORT}
210213read -p " MinIO Console Port (0=internal only) [$CURRENT_MINIO_CONSOLE ]: " MINIO_CONSOLE
211214MINIO_CONSOLE=${MINIO_CONSOLE:- $CURRENT_MINIO_CONSOLE }
212215
216+ # Umami Analytics Dashboard Port
217+ if [ -n " $CURRENT_UMAMI_PORT " ]; then
218+ CURRENT_UMAMI_ENABLED=" y"
219+ UMAMI_DEFAULT=" Y/n"
220+ else
221+ CURRENT_UMAMI_ENABLED=" n"
222+ UMAMI_DEFAULT=" y/N"
223+ fi
224+ print_info " Umami dashboard requires direct port access (tracking works via main site)"
225+ read -p " Expose Umami dashboard port? [$UMAMI_DEFAULT ]: " ENABLE_UMAMI
226+ ENABLE_UMAMI=${ENABLE_UMAMI:- $CURRENT_UMAMI_ENABLED }
227+
228+ if [ " $ENABLE_UMAMI " = " y" ] || [ " $ENABLE_UMAMI " = " Y" ]; then
229+ DEFAULT_UMAMI_PORT=${CURRENT_UMAMI_PORT:- 3006}
230+ read -p " Umami Direct Port [$DEFAULT_UMAMI_PORT ]: " UMAMI_PORT
231+ UMAMI_PORT=${UMAMI_PORT:- $DEFAULT_UMAMI_PORT }
232+ else
233+ UMAMI_PORT=" "
234+ fi
235+
213236read -p " Environment [$CURRENT_ENV ]: " ENVIRONMENT
214237ENVIRONMENT=${ENVIRONMENT:- $CURRENT_ENV }
215238
@@ -420,6 +443,7 @@ DEFAULT_JWT_SECRET=${CURRENT_JWT:-$(generate_password)$(generate_password)}
420443DEFAULT_ENCRYPTION_KEY=${CURRENT_ENCRYPTION:- $(generate_key)}
421444DEFAULT_API_KEY_SECRET=${CURRENT_API_KEY_SECRET:- $(generate_password)$(generate_password)}
422445DEFAULT_MINIO_PASSWORD=${CURRENT_MINIO_PASSWORD:- $(generate_password)}
446+ DEFAULT_UMAMI_SECRET=${CURRENT_UMAMI_SECRET:- $(generate_password)}
423447
424448# Prompt for PostgreSQL password
425449if [ -n " $CURRENT_DB_PASSWORD " ]; then
@@ -475,6 +499,20 @@ else
475499fi
476500API_KEY_SECRET=${INPUT_API_KEY_SECRET:- $DEFAULT_API_KEY_SECRET }
477501
502+ # Prompt for Umami analytics secret
503+ if [ -n " $CURRENT_UMAMI_SECRET " ]; then
504+ print_info " Umami secret exists (hidden)"
505+ read -p " Umami Secret [keep existing]: " INPUT_UMAMI_SECRET
506+ else
507+ read -p " Umami Secret [$DEFAULT_UMAMI_SECRET ]: " INPUT_UMAMI_SECRET
508+ fi
509+ UMAMI_SECRET=${INPUT_UMAMI_SECRET:- $DEFAULT_UMAMI_SECRET }
510+
511+ # Prompt for Analytics Website ID
512+ print_info " Website ID is obtained from Umami dashboard after creating a website"
513+ read -p " Analytics Website ID [${CURRENT_WEBSITE_ID:- skip for now} ]: " INPUT_WEBSITE_ID
514+ WEBSITE_ID=${INPUT_WEBSITE_ID:- $CURRENT_WEBSITE_ID }
515+
478516# ============================================================================
479517# GitHub OAuth Configuration (optional)
480518# ============================================================================
@@ -626,6 +664,10 @@ NEW_CONFIG=$(cat <<EOF
626664 "enterpriseTranslationChars": ${CURRENT_ENTERPRISE_TRANSLATION_CHARS} ,
627665 "enterpriseOtherChars": ${CURRENT_ENTERPRISE_OTHER_CHARS} ,
628666 "maxKeysPerProject": ${CURRENT_MAX_KEYS}
667+ },
668+ "analytics": {
669+ "umamiSecret": "${UMAMI_SECRET} ",
670+ "websiteId": "${WEBSITE_ID} "
629671 }
630672}
631673EOF
@@ -678,6 +720,11 @@ REDIS_PASSWORD=${REDIS_PASSWORD}
678720MINIO_USER=lrmcloud
679721MINIO_PASSWORD=${MINIO_PASSWORD}
680722
723+ # Analytics
724+ UMAMI_SECRET=${UMAMI_SECRET}
725+ WEBSITE_ID=${WEBSITE_ID}
726+ UMAMI_PORT=${UMAMI_PORT}
727+
681728# Environment
682729ENVIRONMENT=${ENVIRONMENT}
683730EOF
@@ -814,6 +861,16 @@ elif [ -n "$MINIO_CONSOLE" ] && [ "$MINIO_CONSOLE" != "0" ]; then
814861EOF
815862fi
816863
864+ # Add Umami port if direct access enabled
865+ if [ -n " $UMAMI_PORT " ] && [ " $UMAMI_PORT " != " 0" ]; then
866+ cat >> " $OVERRIDE_FILE " << EOF
867+
868+ umami:
869+ ports:
870+ - "${UMAMI_PORT} :3000"
871+ EOF
872+ fi
873+
817874print_success " Created docker-compose.override.yml"
818875
819876# ============================================================================
@@ -924,6 +981,14 @@ until docker exec lrmcloud-postgres pg_isready -U lrm -d lrmcloud &> /dev/null;
924981done
925982print_success " PostgreSQL is ready"
926983
984+ # Ensure umami database exists (for analytics)
985+ if docker exec lrmcloud-postgres psql -U lrm -d postgres -lqt | cut -d \| -f 1 | grep -qw umami; then
986+ print_info " Umami database already exists"
987+ else
988+ docker exec lrmcloud-postgres psql -U lrm -d postgres -c " CREATE DATABASE umami;"
989+ print_success " Created umami database"
990+ fi
991+
927992# Update PostgreSQL password if changed
928993if [ -n " $OLD_POSTGRES_PASSWORD " ] && [ " $POSTGRES_PASSWORD " != " $OLD_POSTGRES_PASSWORD " ]; then
929994 print_step " Updating PostgreSQL password..."
@@ -1004,6 +1069,11 @@ if [ -n "$MINIO_CONSOLE" ] && [ "$MINIO_CONSOLE" != "0" ]; then
10041069else
10051070 echo " • MinIO Console: (internal only)"
10061071fi
1072+ if [ -n " $UMAMI_PORT " ] && [ " $UMAMI_PORT " != " 0" ]; then
1073+ echo " • Analytics: http://localhost:${UMAMI_PORT} "
1074+ else
1075+ echo " • Analytics: (internal only)"
1076+ fi
10071077echo " "
10081078echo " Configuration: $CONFIG_FILE "
10091079echo " "
0 commit comments