Files
sugar-crm/init.sh
root 707d285e54
All checks were successful
Docker Build & Push SugarCRM 6.5 CE / build-and-push (push) Successful in 13s
fix: init.sh - wait MySQL first, then silent install for DB schema
2026-05-24 15:03:52 +02:00

166 lines
5.4 KiB
Bash

#!/bin/sh
# SugarCRM 6.5 CE Docker Entrypoint
# ==================================
# 1. Warten auf MySQL + Apache
# 2. Silent Install (erstellt DB-Schema + config.php)
# 3. AdminWizard deaktivieren
# Resolve DB connection from env
if [ -z "$DB_HOST_NAME" ]; then
export DB_HOST_NAME=${DB_PORT_3306_TCP_ADDR:-db}
fi
if [ -z "$DB_TCP_PORT" ]; then
export DB_TCP_PORT=${DB_PORT_3306_TCP_PORT:-3306}
fi
if [ -z "$DB_USER_NAME" ]; then
export DB_USER_NAME=${DB_ENV_MYSQL_USER:-sugarcrm}
fi
if [ -z "$DB_PASSWORD" ]; then
export DB_PASSWORD=${DB_ENV_MYSQL_PASSWORD:-sugarcrm_secret}
fi
if [ -z "$DATABASE_NAME" ]; then
export DATABASE_NAME=${DB_ENV_MYSQL_DATABASE:-sugarcrm}
fi
# Generate config_override.php from template
/usr/local/bin/envtemplate.py -i /usr/local/src/config_override.php.pyt -o /var/www/html/config_override.php 2>/dev/null || true
# Start Apache
echo "Starting Apache..."
apachectl -DFOREGROUND &
APACHE_PID=$!
# Wait for Apache
echo "Waiting for Apache..."
for i in $(seq 1 30); do
if curl -s http://localhost/ >/dev/null 2>&1; then
echo "Apache ready"
break
fi
sleep 1
done
# Wait for MySQL FIRST
echo "Waiting for MySQL..."
for i in $(seq 1 30); do
if php -r "\$c=@mysql_connect('$DB_HOST_NAME:$DB_TCP_PORT','$DB_USER_NAME','$DB_PASSWORD');if(\$c){mysql_close(\$c);exit(0);}exit(1);" 2>/dev/null; then
echo "MySQL ready"
break
fi
sleep 2
done
# Run silent install if config.php missing or empty
CONFIG_PHP=/var/www/html/config.php
if [ ! -s "$CONFIG_PHP" ]; then
echo "Creating config_si.php for silent install..."
cat > /var/www/html/config_si.php << SIEOF
<?php
\$sugar_config_si = array(
'setup_db_host_name' => 'DB_HOST',
'setup_db_database_name' => 'DB_NAME',
'setup_db_admin_user_name' => 'DB_USER',
'setup_db_admin_password' => 'DB_PASS',
'setup_db_type' => 'mysql',
'setup_db_port_num' => 'DB_PORT',
'setup_db_drop_tables' => false,
'setup_db_create_database' => false,
'setup_db_create_sugarsales_user' => false,
'setup_license_key' => 'free',
'setup_license_accept' => true,
'setup_site_url' => 'http://localhost:2080',
'setup_system_name' => 'SugarCRM 6.5 CE',
'setup_site_admin_user_name' => 'admin',
'setup_site_admin_password' => 'admin123',
'setup_site_admin_password_retype' => 'admin123',
'demoData' => 'no',
'dbUSRData' => 'create',
);
SIEOF
sed -i "s/DB_HOST/$DB_HOST_NAME/g" /var/www/html/config_si.php
sed -i "s/DB_NAME/$DATABASE_NAME/g" /var/www/html/config_si.php
sed -i "s/DB_USER/$DB_USER_NAME/g" /var/www/html/config_si.php
sed -i "s/DB_PASS/$DB_PASSWORD/g" /var/www/html/config_si.php
sed -i "s/DB_PORT/$DB_TCP_PORT/g" /var/www/html/config_si.php
echo "Running silent install..."
curl -s "http://localhost/install.php?goto=SilentInstall&cli=true" > /tmp/install_output.html 2>&1
if [ -s "$CONFIG_PHP" ]; then
echo "Silent install complete ($(wc -l < "$CONFIG_PHP") lines)"
# Fix: installer_locked = true
sed -i "s/'installer_locked' *=> *false/'installer_locked' => true/" "$CONFIG_PHP" 2>/dev/null || true
if ! grep -q "'installer_locked' => true" "$CONFIG_PHP"; then
echo " 'installer_locked' => true," >> "$CONFIG_PHP"
fi
# Add adminwizard
if ! grep -q adminwizard "$CONFIG_PHP"; then
sed -i "/'site_url' =>/a\\
'adminwizard' => array('completed' => true)," "$CONFIG_PHP" 2>/dev/null || true
fi
echo "Admin Wizard disabled"
else
echo "FAILED: config.php empty after silent install!"
cat /tmp/install_output.html 2>/dev/null | head -20
# Fallback: write config manually + run SQL setup
echo "Attempting manual setup..."
cat > "$CONFIG_PHP" << 'CONFIGEOF'
<?php
$sugar_config = array(
'adminwizard' => array('completed' => true),
'dbconfig' => array(
'db_host_name' => '__DB_HOST__',
'db_user_name' => '__DB_USER__',
'db_password' => '__DB_PASS__',
'db_name' => '__DB_NAME__',
'db_type' => 'mysql',
'db_port' => '__DB_PORT__',
'db_manager' => 'MysqlManager',
),
'default_currency_iso4217' => 'EUR',
'default_date_format' => 'd.m.Y',
'default_time_format' => 'H:i',
'default_language' => 'en_us',
'installer_locked' => true,
'site_url' => 'http://localhost:2080',
'unique_key' => 'manual-setup',
'sugar_version' => '6.5.26',
);
CONFIGEOF
sed -i "s/__DB_HOST__/$DB_HOST_NAME/g" "$CONFIG_PHP"
sed -i "s/__DB_NAME__/$DATABASE_NAME/g" "$CONFIG_PHP"
sed -i "s/__DB_USER__/$DB_USER_NAME/g" "$CONFIG_PHP"
sed -i "s/__DB_PASS__/$DB_PASSWORD/g" "$CONFIG_PHP"
sed -i "s/__DB_PORT__/$DB_TCP_PORT/g" "$CONFIG_PHP"
echo "Manual config.php written"
fi
else
echo "SugarCRM already configured ($(wc -l < "$CONFIG_PHP") lines)"
# Ensure installer_locked
if grep -q "'installer_locked' => false" "$CONFIG_PHP" 2>/dev/null; then
sed -i "s/'installer_locked' => false/'installer_locked' => true/" "$CONFIG_PHP"
echo "Fixed installer_locked"
fi
# Ensure adminwizard
if ! grep -q adminwizard "$CONFIG_PHP" 2>/dev/null; then
sed -i "/'site_url' =>/a\\
'adminwizard' => array('completed' => true)," "$CONFIG_PHP" 2>/dev/null || true
echo "Admin Wizard disabled"
fi
fi
# Clean up
rm -f /var/www/html/config_si.php /tmp/install_output.html
# Start cron
/usr/sbin/cron
echo "Setup complete. SugarCRM 6.5.26 CE ready."
wait $APACHE_PID