2026-02-27 13:09:00 +03:30
|
|
|
#!/bin/sh
|
|
|
|
|
set -e
|
2026-04-06 23:50:24 +03:30
|
|
|
|
2026-05-10 02:02:48 +03:30
|
|
|
PROXYCHAINS_CONFIG_FILE="${PROXYCHAINS_CONFIG_FILE:-/etc/proxychains.conf}"
|
|
|
|
|
|
|
|
|
|
setup_proxychains() {
|
|
|
|
|
if [ "${ENABLE_PROXYCHAINS}" != "1" ]; then
|
|
|
|
|
echo "proxychains disabled (ENABLE_PROXYCHAINS=${ENABLE_PROXYCHAINS:-0})"
|
|
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if ! command -v proxychains4 >/dev/null 2>&1; then
|
|
|
|
|
echo "proxychains4 is not installed but ENABLE_PROXYCHAINS=1 was set." >&2
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
proxy_type="${PROXYCHAINS_PROXY_TYPE:-socks4}"
|
|
|
|
|
proxy_host="${PROXYCHAINS_PROXY_HOST:-host.docker.internal}"
|
|
|
|
|
proxy_port="${PROXYCHAINS_PROXY_PORT:-10808}"
|
|
|
|
|
chain_mode="${PROXYCHAINS_CHAIN_MODE:-strict_chain}"
|
|
|
|
|
proxy_ip="$(getent hosts "${proxy_host}" | awk 'NR==1 {print $1}')"
|
|
|
|
|
|
|
|
|
|
if [ -z "${proxy_ip}" ]; then
|
|
|
|
|
echo "Could not resolve proxy host: ${proxy_host}" >&2
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
cat > "${PROXYCHAINS_CONFIG_FILE}" <<EOF
|
|
|
|
|
# Auto-generated by entrypoint.sh
|
|
|
|
|
${chain_mode}
|
|
|
|
|
proxy_dns
|
|
|
|
|
remote_dns_subnet 224
|
|
|
|
|
tcp_read_time_out 15000
|
|
|
|
|
tcp_connect_time_out 8000
|
|
|
|
|
localnet 127.0.0.0/255.0.0.0
|
|
|
|
|
localnet 10.0.0.0/255.0.0.0
|
|
|
|
|
localnet 172.16.0.0/255.240.0.0
|
|
|
|
|
localnet 192.168.0.0/255.255.0.0
|
|
|
|
|
localnet 169.254.0.0/255.255.0.0
|
|
|
|
|
[ProxyList]
|
|
|
|
|
${proxy_type} ${proxy_ip} ${proxy_port}
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
|
|
echo "proxychains enabled via ${proxy_type} ${proxy_host} (${proxy_ip}):${proxy_port}"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
run_cmd() {
|
|
|
|
|
if [ "${ENABLE_PROXYCHAINS}" = "1" ]; then
|
|
|
|
|
proxychains4 -f "${PROXYCHAINS_CONFIG_FILE}" "$@"
|
|
|
|
|
else
|
|
|
|
|
"$@"
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-06 23:50:24 +03:30
|
|
|
wait_for_db() {
|
2026-05-10 02:02:48 +03:30
|
|
|
run_cmd python - <<'PY'
|
2026-04-06 23:50:24 +03:30
|
|
|
import os
|
|
|
|
|
import socket
|
|
|
|
|
import sys
|
|
|
|
|
import time
|
|
|
|
|
|
|
|
|
|
host = os.environ.get("DB_HOST", "db")
|
|
|
|
|
port = int(os.environ.get("DB_PORT", "3306"))
|
|
|
|
|
deadline = time.time() + 90
|
|
|
|
|
|
|
|
|
|
while time.time() < deadline:
|
|
|
|
|
try:
|
|
|
|
|
with socket.create_connection((host, port), timeout=3):
|
|
|
|
|
print(f"Database is reachable at {host}:{port}")
|
|
|
|
|
sys.exit(0)
|
|
|
|
|
except OSError as exc:
|
|
|
|
|
print(f"Waiting for database {host}:{port}... {exc}")
|
|
|
|
|
time.sleep(2)
|
|
|
|
|
|
|
|
|
|
print(f"Timed out waiting for database {host}:{port}", file=sys.stderr)
|
|
|
|
|
sys.exit(1)
|
|
|
|
|
PY
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-10 02:02:48 +03:30
|
|
|
setup_proxychains
|
|
|
|
|
|
2026-02-27 13:09:00 +03:30
|
|
|
if [ "${SKIP_MIGRATE}" != "1" ]; then
|
2026-04-06 23:50:24 +03:30
|
|
|
wait_for_db
|
2026-02-27 13:09:00 +03:30
|
|
|
echo "Running migrations..."
|
2026-05-10 02:02:48 +03:30
|
|
|
run_cmd python manage.py repair_location_tables
|
|
|
|
|
run_cmd python manage.py migrate --noinput
|
2026-02-27 13:09:00 +03:30
|
|
|
echo "Migrations done."
|
|
|
|
|
fi
|
2026-04-06 23:50:24 +03:30
|
|
|
|
|
|
|
|
if [ -n "${DEVELOP}" ] && [ "${SKIP_MIGRATE}" != "1" ]; then
|
2026-05-13 16:45:54 +03:30
|
|
|
echo "DEVELOP is set. Seeding demo location_data, plant, weather_data, and farm_data..."
|
|
|
|
|
run_cmd python manage.py seed_location_data
|
2026-05-10 02:02:48 +03:30
|
|
|
run_cmd python manage.py seed_plants
|
|
|
|
|
run_cmd python manage.py seed_weather_data
|
|
|
|
|
run_cmd python manage.py seed_farm_data
|
2026-04-06 23:50:24 +03:30
|
|
|
echo "Demo seeders done."
|
|
|
|
|
fi
|
|
|
|
|
|
2026-05-10 02:02:48 +03:30
|
|
|
echo "Checking openEO authentication..."
|
2026-05-13 16:45:54 +03:30
|
|
|
if ! run_cmd python manage.py verify_openeo_auth --skip-if-unconfigured; then
|
|
|
|
|
echo "openEO authentication failed; continuing startup with degraded openEO-dependent features." >&2
|
|
|
|
|
fi
|
2026-05-10 02:02:48 +03:30
|
|
|
|
2026-05-05 21:02:12 +03:30
|
|
|
echo "Collecting static files..."
|
2026-05-10 02:02:48 +03:30
|
|
|
run_cmd python manage.py collectstatic --noinput
|
2026-05-05 21:02:12 +03:30
|
|
|
echo "Static files ready."
|
|
|
|
|
|
2026-02-27 13:09:00 +03:30
|
|
|
echo "Starting command: $*"
|
2026-05-10 02:02:48 +03:30
|
|
|
if [ "${ENABLE_PROXYCHAINS}" = "1" ]; then
|
|
|
|
|
exec proxychains4 -f "${PROXYCHAINS_CONFIG_FILE}" "$@"
|
|
|
|
|
fi
|
2026-02-27 13:09:00 +03:30
|
|
|
exec "$@"
|