42 lines
1.2 KiB
Bash
42 lines
1.2 KiB
Bash
|
|
#!/bin/sh
|
||
|
|
# Datahub backend container entrypoint.
|
||
|
|
# Flow: wait_tcp pg/mq -> migrate --force -> app:install -> exec swoole.
|
||
|
|
set -eu
|
||
|
|
|
||
|
|
wait_tcp() {
|
||
|
|
host="$1"
|
||
|
|
port="$2"
|
||
|
|
label="$3"
|
||
|
|
timeout="${4:-90}"
|
||
|
|
echo "[entrypoint] waiting for ${label} @ ${host}:${port} (up to ${timeout}s)"
|
||
|
|
i=0
|
||
|
|
while [ "$i" -lt "$timeout" ]; do
|
||
|
|
if php -r "exit(@fsockopen('${host}', ${port}, \$e, \$s, 1) ? 0 : 1);" 2>/dev/null; then
|
||
|
|
echo "[entrypoint] ${label} reachable"
|
||
|
|
return 0
|
||
|
|
fi
|
||
|
|
i=$((i + 1))
|
||
|
|
sleep 1
|
||
|
|
done
|
||
|
|
echo "[entrypoint] ${label} @ ${host}:${port} unreachable after ${timeout}s" >&2
|
||
|
|
return 1
|
||
|
|
}
|
||
|
|
|
||
|
|
DB_HOST="${DB_HOST:-host.containers.internal}"
|
||
|
|
DB_PORT="${DB_PORT:-5432}"
|
||
|
|
AMQP_HOST="${AMQP_HOST:-host.containers.internal}"
|
||
|
|
AMQP_PORT="${AMQP_PORT:-5672}"
|
||
|
|
WAIT_TIMEOUT="${ENTRYPOINT_WAIT_TIMEOUT:-90}"
|
||
|
|
|
||
|
|
wait_tcp "${DB_HOST}" "${DB_PORT}" "postgres" "${WAIT_TIMEOUT}"
|
||
|
|
wait_tcp "${AMQP_HOST}" "${AMQP_PORT}" "rabbitmq" "${WAIT_TIMEOUT}"
|
||
|
|
|
||
|
|
echo "[entrypoint] running migrate --force"
|
||
|
|
php /opt/www/bin/hyperf.php migrate --force
|
||
|
|
|
||
|
|
echo "[entrypoint] running app:install"
|
||
|
|
php /opt/www/bin/hyperf.php app:install
|
||
|
|
|
||
|
|
echo "[entrypoint] handing off to: $*"
|
||
|
|
exec "$@"
|