first commit
This commit is contained in:
116
Linux/Server/startup-proxy.sh
Normal file
116
Linux/Server/startup-proxy.sh
Normal file
@@ -0,0 +1,116 @@
|
||||
#!/bin/sh
|
||||
# Check if Git repo needs updating
|
||||
if [ -d .git ]; then
|
||||
echo "Pulling latest changes from the repository..."
|
||||
git pull "https://${GIT_USERNAME}:${GIT_PAT}@${GIT_REPO_URL}" "${GIT_BRANCH}" || true
|
||||
fi
|
||||
|
||||
# Constants
|
||||
EXTENSIONS="yml json conf toml" # Space-separated list of extensions
|
||||
ENV="production" # Change this to the environment you need
|
||||
DRY_RUN="false" # Change to true if you want to simulate changes without modifying files
|
||||
MAX_BACKUPS=3 # Maximum number of backup files to keep
|
||||
# Load environment variables from .env.production file
|
||||
ENV_FILE=".env.production"
|
||||
if [ -f "$ENV_FILE" ]; then
|
||||
echo "Loading environment variables from $ENV_FILE..."
|
||||
# Read each line in .env.production
|
||||
while IFS='=' read -r key value; do
|
||||
# Skip empty lines and comments
|
||||
if [ -z "$key" ] || [ "$(printf '%s' "$key" | cut -c1)" = "#" ]; then
|
||||
continue
|
||||
fi
|
||||
# Remove potential spaces around the variable and export it
|
||||
key=$(echo "$key" | xargs)
|
||||
value=$(echo "$value" | xargs)
|
||||
export "$key=$value"
|
||||
done < "$ENV_FILE"
|
||||
echo "Environment variables loaded successfully."
|
||||
else
|
||||
echo "Error: $ENV_FILE not found!"
|
||||
exit 1
|
||||
fi
|
||||
# Function to escape special characters for sed
|
||||
escape_sed_special_chars() {
|
||||
echo "$1" | sed 's/[][\/.^$*]/\\&/g'
|
||||
}
|
||||
# Function to manage backups
|
||||
manage_backups() {
|
||||
local output_file="$1"
|
||||
local timestamp
|
||||
timestamp=$(date +"%Y%m%d_%H%M%S")
|
||||
local backup_file="${output_file}_${timestamp}.bak"
|
||||
|
||||
# Create backup
|
||||
cp "$output_file" "$backup_file"
|
||||
echo "Backed up $output_file to $backup_file"
|
||||
|
||||
# Find and remove old backups, keeping only the most recent MAX_BACKUPS
|
||||
find "$(dirname "$output_file")" -maxdepth 1 \
|
||||
-name "$(basename "$output_file")_*.bak" | \
|
||||
sort -r | \
|
||||
tail -n +$((MAX_BACKUPS + 1)) | \
|
||||
xargs -r rm
|
||||
}
|
||||
|
||||
echo "Environment setup complete. Starting template processing..."
|
||||
# Process template files for each extension
|
||||
for EXT in $EXTENSIONS; do
|
||||
echo "Processing files with extension .template.$EXT..."
|
||||
|
||||
# Find template files recursively
|
||||
TEMPLATES=$(find . -type f -name "*.template.$EXT")
|
||||
|
||||
if [ -z "$TEMPLATES" ]; then
|
||||
echo "No template files found for extension .template.$EXT"
|
||||
continue
|
||||
fi
|
||||
|
||||
echo "Found the following template files:"
|
||||
echo "$TEMPLATES"
|
||||
|
||||
echo "$TEMPLATES" | while read -r TEMPLATE_FILE; do
|
||||
# Remove .template from the end to generate output file
|
||||
OUTPUT_FILE="${TEMPLATE_FILE%.template.$EXT}.$EXT"
|
||||
echo "Processing $TEMPLATE_FILE into $OUTPUT_FILE..."
|
||||
|
||||
if [ "$DRY_RUN" = "true" ]; then
|
||||
echo "Dry run: Would process $TEMPLATE_FILE into $OUTPUT_FILE"
|
||||
continue
|
||||
fi
|
||||
|
||||
# Create backup if output file already exists
|
||||
if [ -f "$OUTPUT_FILE" ]; then
|
||||
manage_backups "$OUTPUT_FILE"
|
||||
fi
|
||||
|
||||
# Validate unresolved placeholders
|
||||
UNRESOLVED=$(grep -o '\${[A-Za-z_][A-Za-z0-9_]*}' "$TEMPLATE_FILE" | sed 's/[${}]//g' | while read -r var; do
|
||||
if [ -z "$(eval echo "\$$var")" ]; then
|
||||
echo "$var"
|
||||
fi
|
||||
done)
|
||||
if [ -n "$UNRESOLVED" ]; then
|
||||
echo "Error: Unresolved variables detected in $TEMPLATE_FILE!"
|
||||
echo "Ensure the following variables are defined in $ENV_FILE: $UNRESOLVED"
|
||||
exit 1
|
||||
fi
|
||||
# Replace placeholders with environment variable values
|
||||
sed_script=""
|
||||
while IFS='=' read -r key value; do
|
||||
if [ -n "$key" ] && [ "${key#\#}" = "$key" ]; then
|
||||
escaped_key=$(escape_sed_special_chars "$key")
|
||||
escaped_value=$(escape_sed_special_chars "$(eval echo "\$$key")")
|
||||
sed_script="${sed_script}s|\${${escaped_key}}|${escaped_value}|g;"
|
||||
fi
|
||||
done < "$ENV_FILE"
|
||||
# Generate the output file
|
||||
sed -e "$sed_script" "$TEMPLATE_FILE" > "$OUTPUT_FILE"
|
||||
echo "Processed $TEMPLATE_FILE into $OUTPUT_FILE"
|
||||
done
|
||||
done
|
||||
echo "Template processing complete. Starting the server in 5 seconds..."
|
||||
sleep 5
|
||||
|
||||
|
||||
java -Xms${SERVER_MIN_MEMORY}M -Xmx${SERVER_MEMORY}M -XX:+UseG1GC -XX:G1HeapRegionSize=4M -XX:+UnlockExperimentalVMOptions -XX:+ParallelRefProcEnabled -XX:+AlwaysPreTouch -XX:MaxInlineLevel=15 -jar ${SERVER_JARFILE}
|
||||
Reference in New Issue
Block a user