Commit 3743e382 authored by Andreas Düren's avatar Andreas Düren
Browse files

Fix unsupported settings in elasticsearch.yml - Remove processors and...

Fix unsupported settings in elasticsearch.yml - Remove processors and bootstrap.system_call_filter settings
parent c2301bb8
Loading
Loading
Loading
Loading
+6 −10
Original line number Diff line number Diff line
@@ -55,15 +55,11 @@ indices.queries.cache.size: 15%
thread_pool.write.queue_size: 1000
thread_pool.search.queue_size: 1000

# I/O optimization
bootstrap.system_call_filter: false

# ---------------------------------- Index Templates ---------------------------
# Instead of setting index settings directly (which is not allowed), 
# we configure index templates that will be applied to new indices.
# Elasticsearch will automatically apply these templates to new indices.

# The following settings MUST be removed from this file:
# IMPORTANT: Index-level settings MUST NOT be placed in this configuration file.
# These settings are now applied using an index template in the start.sh script.
# 
# The following settings have been removed and will be applied via template:
# - index.number_of_shards
# - index.number_of_replicas
# - index.merge.scheduler.max_thread_count
@@ -71,5 +67,5 @@ bootstrap.system_call_filter: false
# - index.merge.policy.max_merge_at_once
# - index.merge.policy.segments_per_tier

# Set processors based on container configuration
processors: ${PROCESSORS:1} 
 No newline at end of file
# The 'processors' setting has been removed as it's no longer supported in Elasticsearch 8.x
# processors: ${PROCESSORS:1} 
 No newline at end of file
+64 −14
Original line number Diff line number Diff line
@@ -127,6 +127,36 @@ configure_elasticsearch() {
        chown -R elasticsearch:elasticsearch $ES_PATH_CONF
    fi
    
    # CRITICAL FIX: Remove any index-level settings from elasticsearch.yml to prevent startup failure
    if [ -f $ES_PATH_CONF/elasticsearch.yml ]; then
        echo "Checking elasticsearch.yml for index-level settings..."
        # Create a temporary file
        TEMP_FILE=$(mktemp)
        
        # Filter out any index.* settings
        grep -v "^index\." $ES_PATH_CONF/elasticsearch.yml > $TEMP_FILE
        
        # Also remove other known problematic settings for 8.x
        grep -v "^processors:" $TEMP_FILE > $TEMP_FILE.2 && mv $TEMP_FILE.2 $TEMP_FILE
        grep -v "^bootstrap.system_call_filter:" $TEMP_FILE > $TEMP_FILE.2 && mv $TEMP_FILE.2 $TEMP_FILE
        
        # Add warning comment
        echo "" >> $TEMP_FILE
        echo "# NOTE: The following settings have been removed from this file:" >> $TEMP_FILE
        echo "# - All index.* settings (applied via index templates)" >> $TEMP_FILE
        echo "# - processors setting (no longer supported in 8.x)" >> $TEMP_FILE
        echo "# - bootstrap.system_call_filter (no longer supported in 8.x)" >> $TEMP_FILE
        echo "# See the create_index_template function in start.sh for details" >> $TEMP_FILE
        
        # Replace the original file
        cat $TEMP_FILE > $ES_PATH_CONF/elasticsearch.yml
        rm $TEMP_FILE
        
        # Ensure proper ownership
        chown elasticsearch:elasticsearch $ES_PATH_CONF/elasticsearch.yml
        echo "Cleaned elasticsearch.yml configuration file"
    fi
    
    # Update JVM options for GC logs
    if [ -f $ES_PATH_CONF/jvm.options ]; then
        echo "Updating JVM options..."
@@ -189,9 +219,9 @@ create_index_template() {
    echo "Creating default index template with optimized settings..."
    
    # Wait a moment to ensure Elasticsearch is fully operational
    sleep 5
    sleep 10
    
    # Define the template JSON
    # Define the template JSON with all the index settings that were previously in elasticsearch.yml
    template_json=$(cat <<EOF
{
  "index_patterns": ["*"],
@@ -219,17 +249,36 @@ create_index_template() {
EOF
)
    
    # Try multiple times in case Elasticsearch is still initializing
    for i in {1..5}; do
        echo "Attempt $i to create index template..."
        
        # Apply the template
    curl -s -X PUT "http://localhost:9200/_index_template/cloudron_defaults" \
        response=$(curl -s -w "\n%{http_code}" -X PUT "http://localhost:9200/_index_template/cloudron_defaults" \
          -H "Content-Type: application/json" \
          -u "elastic:$ELASTIC_PASSWORD" \
      -d "$template_json" > /dev/null
          -d "$template_json")
          
        http_code=$(echo "$response" | tail -n1)
        response_body=$(echo "$response" | sed '$d')
        
    if [ $? -eq 0 ]; then
        echo "Index template created successfully."
        if [ "$http_code" = "200" ] || [ "$http_code" = "201" ]; then
            echo "✅ Index template created successfully with HTTP code $http_code"
            echo "Response: $response_body"
            return 0
        else
        echo "Warning: Failed to create index template. Default settings may not be applied to new indices."
            echo "⚠️ Failed to create index template on attempt $i. HTTP code: $http_code"
            echo "Response: $response_body"
            sleep 5
        fi
    done
    
    echo "⚠️ Warning: Failed to create index template after multiple attempts."
    echo "Default settings may not be applied to new indices, but Elasticsearch will still function."
    echo "You can manually create the template later using Elasticsearch API."
    
    # Don't fail the startup process if template creation fails
    return 0
}

# Set system limits - be more tolerant of container restrictions
@@ -303,7 +352,7 @@ start_elasticsearch() {
    echo "Waiting for Elasticsearch to start..."
    attempts=0
    max_attempts=60
    until $(curl --output /dev/null --silent --head --fail http://localhost:9200); do
    until $(curl --output /dev/null --silent --head --fail -u "elastic:$ELASTIC_PASSWORD" http://localhost:9200); do
        if ! ps -p $(cat /app/data/run/elasticsearch.pid 2>/dev/null) > /dev/null 2>&1; then
            echo "ERROR: Elasticsearch process is not running. Logs:"
            cat /app/data/logs/*.log
@@ -327,6 +376,7 @@ start_elasticsearch() {
    echo "y" | ES_JAVA_HOME=/app/data/jdk bin/elasticsearch-reset-password -u elastic -b -p "$ELASTIC_PASSWORD" --url "http://localhost:9200" || true
    
    # Create index template with the settings we removed from elasticsearch.yml
    echo "Applying index templates with settings removed from elasticsearch.yml..."
    create_index_template
    
    # Create credentials file