Files
nexusphp/.docker/php/entrypoint.sh

129 lines
4.1 KiB
Bash
Raw Normal View History

#!/bin/sh
2025-04-27 21:09:42 +07:00
2025-04-28 20:21:32 +07:00
# 定义颜色
COLOR_RED='\033[0;31m'
COLOR_GREEN='\033[0;32m'
COLOR_YELLOW='\033[1;33m'
COLOR_BLUE='\033[0;34m'
COLOR_RESET='\033[0m'
# 封装彩色输出函数
echo_info() {
echo -e "${COLOR_BLUE}[INFO]${COLOR_RESET} $*"
}
echo_success() {
echo -e "${COLOR_GREEN}[SUCCESS]${COLOR_RESET} $*"
}
echo_warn() {
echo -e "${COLOR_YELLOW}[WARN]${COLOR_RESET} $*"
}
echo_error() {
echo -e "${COLOR_RED}[ERROR]${COLOR_RESET} $*"
}
wait_for_service() {
name="$1"
host="$2"
port="$3"
maxWaitSeconds="$4"
waited=0
echo_info "🔍 Checking $name at $host:$port..."
until nc -z "$host" "$port" >/dev/null 2>&1; do
if [ "$waited" -ge "$maxWaitSeconds" ]; then
echo_error "$name not available after ${maxWaitSeconds}s. Exiting."
exit 1
fi
echo_info "⏳ Waiting for $name... (${waited}s elapsed)"
sleep 2
waited=$((waited + 2))
done
echo_success "$name is available."
}
wait_for_service "MySQL" mysql 3306 30
wait_for_service "Redis" redis 6379 30
2025-04-28 20:21:32 +07:00
# 正式开始
echo_info "Starting container for SERVICE_NAME=$SERVICE_NAME..."
2025-04-27 21:09:42 +07:00
ROOT_PATH="/var/www/html"
SOURCE_DIR="${ROOT_PATH}/nexus/Install/install"
TARGET_DIR="${ROOT_PATH}/public"
ENV_FILE="${ROOT_PATH}/.env"
2025-10-21 00:11:43 +07:00
VENDOR_AUTOLOAD_FILE="${ROOT_PATH}/vendor/autoload.php"
2025-04-27 21:09:42 +07:00
2025-04-28 21:33:02 +07:00
chown -R www-data:www-data $ROOT_PATH
2025-04-28 20:21:32 +07:00
if [ "$SERVICE_NAME" = "php" ]; then
2025-10-21 00:11:43 +07:00
if [ ! -f "$ENV_FILE" ] || [ ! -f "$VENDOR_AUTOLOAD_FILE" ]; then
echo_info ".env file: $ENV_FILE or vendor autoload file: $VENDOR_AUTOLOAD_FILE not exists, copy $SOURCE_DIR to $TARGET_DIR ..."
2025-04-28 20:21:32 +07:00
cp -r "$SOURCE_DIR" "$TARGET_DIR"
2025-04-29 01:52:43 +07:00
sed -i 's|LOG_FILE.*|LOG_FILE=php://stdout|g' "$ROOT_PATH/.env.example"
2025-10-21 00:11:43 +07:00
if [ -f "$ENV_FILE" ]; then
2026-01-31 12:34:44 +07:00
echo_info "update LOG_FILE + DB_HOST + REDIS_HOST ..."
2025-10-21 00:11:43 +07:00
sed -i 's|LOG_FILE.*|LOG_FILE=php://stdout|g' "$ENV_FILE"
2026-01-31 12:34:44 +07:00
sed -i 's|DB_HOST.*|DB_HOST=mysql|g' "$ENV_FILE"
sed -i 's|REDIS_HOST.*|REDIS_HOST=redis|g' "$ENV_FILE"
2025-10-21 00:11:43 +07:00
fi
2025-04-28 20:21:32 +07:00
else
2025-10-21 00:11:43 +07:00
echo_success ".env file: $ENV_FILE and vendor autoload file: $VENDOR_AUTOLOAD_FILE already exists, skip copy install file ..."
2025-04-28 20:21:32 +07:00
fi
# composer install
2025-10-21 00:11:43 +07:00
if [ ! -f "$VENDOR_AUTOLOAD_FILE" ]; then
echo_info "vendor autoload file: $VENDOR_AUTOLOAD_FILE not exists, run composer install ..."
git config --global --add safe.directory ${ROOT_PATH}
2025-04-28 20:21:32 +07:00
composer install --working-dir=${ROOT_PATH}
else
2025-10-21 00:11:43 +07:00
echo_success "vendor autoload file: $VENDOR_AUTOLOAD_FILE already exists, skip run composer install ..."
2025-04-28 20:21:32 +07:00
fi
2025-04-27 21:09:42 +07:00
2025-04-28 20:21:32 +07:00
# 最后启动 PHP-FPM
exec php-fpm
elif [ "$SERVICE_NAME" = "queue" ]; then
echo_info "Start Queue Worker...";
while true; do
2025-10-21 00:11:43 +07:00
if [ -f "$ENV_FILE" ] && [ -f "$VENDOR_AUTOLOAD_FILE" ]; then
echo_success "[Queue] env: $ENV_FILE and vendor autoload file: $VENDOR_AUTOLOAD_FILE exists, Run horizon at $(date '+%Y-%m-%d %H:%M:%S')";
2025-05-04 15:52:08 +07:00
php artisan horizon;
2025-04-28 20:21:32 +07:00
else
echo_info "[Queue] .env or vendor not existswait 5 seconds ...";
sleep 5;
fi
done
elif [ "$SERVICE_NAME" = "scheduler" ]; then
echo_info "Start Scheduler ...";
while true; do
2025-10-21 00:11:43 +07:00
if [ -f "$ENV_FILE" ] && [ -f "$VENDOR_AUTOLOAD_FILE" ]; then
echo_success "[Scheduler] env: $ENV_FILE and vendor autoload file: $VENDOR_AUTOLOAD_FILE exists, Run schedule:run at $(date '+%Y-%m-%d %H:%M:%S')";
2025-04-28 20:21:32 +07:00
php artisan schedule:run --verbose --no-interaction;
sleep 60;
else
echo_info "[Scheduler] .env or vendor not existswait 5 seconds...";
sleep 5;
fi
done
2025-05-13 18:21:14 +07:00
elif [ "$SERVICE_NAME" = "cleanup" ]; then
echo_info "Start Cleanup ...";
while true; do
2025-10-21 00:11:43 +07:00
if [ -f "$ENV_FILE" ] && [ -f "$VENDOR_AUTOLOAD_FILE" ]; then
echo_success "[Cleanup] env: $ENV_FILE and vendor autoload file: $VENDOR_AUTOLOAD_FILE exists, Run cleanup at $(date '+%Y-%m-%d %H:%M:%S')";
2025-05-13 18:21:14 +07:00
php include/cleanup_cli.php;
sleep 60;
else
echo_info "[Cleanup] .env or vendor not existswait 5 seconds...";
sleep 5;
fi
done
2025-04-27 21:09:42 +07:00
else
2025-04-28 20:21:32 +07:00
echo_error "Unknown SERVICE_NAME: $SERVICE_NAME, exiting."
exit 1
2025-04-27 21:09:42 +07:00
fi