#!/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 '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' 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