#!/usr/bin/env bash # ------------------------------------------------------------------------- # SyspanelLamp - Entrypoint # Author: Marco Costa & Syspanel (www.syspanel.com.br) # Creation date: 05/09/2026 # License: MIT # ------------------------------------------------------------------------- echo "==========================================" echo " SyspanelLamp - Starting services" echo "==========================================" echo " Database: ${DATABASE:-mysql8}" DATABASE="${DATABASE:-}" # Auto-detect database type if DATABASE is not set if [ -z "$DATABASE" ]; then if [ -f "/var/lib/mysql/auto.cnf" ]; then DATABASE="mysql8" else DATABASE="mysql8" fi echo " DATABASE auto-detected: $DATABASE" fi DB_ROOT_PASS="${DB_ROOT_PASS:-admin123}" # ------------------------------------------------------------------------- # Fix ownership and permissions of data directories (bind mount safety) # ------------------------------------------------------------------------- if [ "$DATABASE" = "mysql8" ] || [ "$DATABASE" = "mariadb" ]; then if [ -d "/var/lib/mysql" ]; then chown -R mysql:mysql /var/lib/mysql chmod 755 /var/lib/mysql fi if [ -d "/var/lib/mysql/mysql" ]; then chmod 755 /var/lib/mysql/mysql fi fi # ------------------------------------------------------------------------- # MySQL 8.0 / MariaDB startup # ------------------------------------------------------------------------- start_mysql() { echo ">> Starting MySQL/MariaDB..." mysqld --user=mysql --datadir=/var/lib/mysql --skip-networking=0 --bind-address=0.0.0.0 --port=3306 & MYSQL_PID=$! for i in $(seq 1 60); do if mysqladmin ping --silent 2>/dev/null; then echo ">> MySQL/MariaDB is ready." return 0 fi sleep 1 done echo ">> ERROR: MySQL/MariaDB failed to start." return 1 } init_mysql_first_boot() { echo ">> [First boot] Setting root password and creating databases..." mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '${DB_ROOT_PASS}'; FLUSH PRIVILEGES;" 2>/dev/null || \ mysql -u root -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('${DB_ROOT_PASS}');" 2>/dev/null || true if [ -f /docker-entrypoint-initdb.d/init.sql ]; then echo ">> Running init.sql..." mysql -u root -p"${DB_ROOT_PASS}" < /docker-entrypoint-initdb.d/init.sql 2>/dev/null || \ mysql -u root < /docker-entrypoint-initdb.d/init.sql 2>/dev/null || true fi echo ">> MySQL/MariaDB first boot setup complete." } # ------------------------------------------------------------------------- # Initialize and start database # ------------------------------------------------------------------------- FIRST_BOOT=0 if [ "$DATABASE" = "mysql8" ] || [ "$DATABASE" = "mariadb" ]; then # Initialize data directory if not yet initialized or corrupted if [ ! -f "/var/lib/mysql/auto.cnf" ]; then if [ -n "$(ls -A /var/lib/mysql/ 2>/dev/null)" ]; then echo ">> WARNING: /var/lib/mysql contains files but no auto.cnf — cleaning and reinitializing..." rm -rf /var/lib/mysql/* chown -R mysql:mysql /var/lib/mysql fi echo ">> Initializing MySQL/MariaDB data directory..." mysqld --initialize-insecure --user=mysql --datadir=/var/lib/mysql FIRST_BOOT=1 elif [ ! -d "/var/lib/mysql/mysql/system" ] || [ -z "$(ls -A /var/lib/mysql/mysql/ 2>/dev/null)" ]; then echo ">> WARNING: MySQL/MariaDB data directory appears corrupted. Reinitializing..." rm -rf /var/lib/mysql/* chown -R mysql:mysql /var/lib/mysql mysqld --initialize-insecure --user=mysql --datadir=/var/lib/mysql FIRST_BOOT=1 fi start_mysql if [ "$FIRST_BOOT" = "1" ]; then init_mysql_first_boot fi else echo ">> ERROR: Unknown DATABASE type: $DATABASE" echo ">> Supported: mysql8, mariadb" exit 1 fi # ------------------------------------------------------------------------- # Start Redis # ------------------------------------------------------------------------- echo ">> Starting Redis..." redis-server --daemonize yes 2>/dev/null || true # ------------------------------------------------------------------------- # Ensure /app directory exists # ------------------------------------------------------------------------- mkdir -p /app /var/www/html/public chown -R www-data:www-data /app /var/www/html/public # ------------------------------------------------------------------------- # Start Apache in foreground (handled by CMD) # ------------------------------------------------------------------------- echo ">> Starting Apache..." echo ">> All services started successfully (DB: ${DATABASE})." exec "$@"