merged from gramsrv upstream
This commit is contained in:
parent
79c64ee916
commit
21a0856587
651 changed files with 54774 additions and 4590 deletions
103
scripts/start-docker.sh
Executable file
103
scripts/start-docker.sh
Executable file
|
|
@ -0,0 +1,103 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
Usage: ./scripts/start-docker.sh [options]
|
||||
|
||||
Initialization options (used only when deploy/docker/.env is absent):
|
||||
--advertise-ip IP
|
||||
--public-base-url URL
|
||||
--public-web-base-url URL
|
||||
--admin-bind-ip IP
|
||||
--host-network Direct host networking for the monolith (default).
|
||||
--bridge-network Docker port publishing compatibility mode.
|
||||
--allow-insecure-development-auth
|
||||
|
||||
Other options:
|
||||
--build Build local images instead of pulling published images.
|
||||
--help
|
||||
EOF
|
||||
}
|
||||
|
||||
script_dir=$(CDPATH='' cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
|
||||
repo_root=$(CDPATH='' cd -- "$script_dir/.." && pwd)
|
||||
docker_dir="$repo_root/deploy/docker"
|
||||
compose_path="$docker_dir/compose.yaml"
|
||||
env_path="$docker_dir/.env"
|
||||
generator_path="$script_dir/new-docker-env.sh"
|
||||
|
||||
advertise_ip=
|
||||
public_base_url=
|
||||
public_web_base_url=
|
||||
admin_bind_ip=
|
||||
network_mode=
|
||||
allow_insecure=false
|
||||
build=false
|
||||
initialization_options=false
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--advertise-ip) [[ $# -ge 2 ]] || { printf '%s requires a value\n' "$1" >&2; exit 1; }; advertise_ip=$2; initialization_options=true; shift 2 ;;
|
||||
--public-base-url) [[ $# -ge 2 ]] || { printf '%s requires a value\n' "$1" >&2; exit 1; }; public_base_url=$2; initialization_options=true; shift 2 ;;
|
||||
--public-web-base-url) [[ $# -ge 2 ]] || { printf '%s requires a value\n' "$1" >&2; exit 1; }; public_web_base_url=$2; initialization_options=true; shift 2 ;;
|
||||
--admin-bind-ip) [[ $# -ge 2 ]] || { printf '%s requires a value\n' "$1" >&2; exit 1; }; admin_bind_ip=$2; initialization_options=true; shift 2 ;;
|
||||
--host-network) network_mode=host; initialization_options=true; shift ;;
|
||||
--bridge-network) network_mode=bridge; initialization_options=true; shift ;;
|
||||
--allow-insecure-development-auth) allow_insecure=true; initialization_options=true; shift ;;
|
||||
--build) build=true; shift ;;
|
||||
--help|-h) usage; exit 0 ;;
|
||||
*) printf 'start-docker: unknown argument: %s\n' "$1" >&2; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ ! -f "$env_path" ]]; then
|
||||
[[ -n "$advertise_ip" ]] || advertise_ip=127.0.0.1
|
||||
generator_args=(--advertise-ip "$advertise_ip")
|
||||
[[ -z "$public_base_url" ]] || generator_args+=(--public-base-url "$public_base_url")
|
||||
[[ -z "$public_web_base_url" ]] || generator_args+=(--public-web-base-url "$public_web_base_url")
|
||||
[[ -z "$admin_bind_ip" ]] || generator_args+=(--admin-bind-ip "$admin_bind_ip")
|
||||
[[ "$network_mode" != host ]] || generator_args+=(--host-network)
|
||||
[[ "$network_mode" != bridge ]] || generator_args+=(--bridge-network)
|
||||
[[ "$allow_insecure" = false ]] || generator_args+=(--allow-insecure-development-auth)
|
||||
"$generator_path" "${generator_args[@]}"
|
||||
elif [[ "$initialization_options" = true ]]; then
|
||||
printf 'start-docker: deploy/docker/.env already exists; initialization options were ignored to preserve credentials and deployment identity.\n' >&2
|
||||
fi
|
||||
|
||||
env_value() { awk -F= -v key="$1" '$1 == key { print substr($0, length(key) + 2); exit }' "$env_path"; }
|
||||
|
||||
if [[ "$(env_value TELESRV_DEPLOYMENT_PROFILE)" != main-monolith-v1 ]]; then
|
||||
printf 'start-docker: %s belongs to an older or different topology; move it aside and rerun so credentials are regenerated safely.\n' "$env_path" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
configured_host_network=$(env_value TELESRV_SERVER_HOST_NETWORK)
|
||||
[[ -n "$configured_host_network" ]] || configured_host_network=true
|
||||
case "$configured_host_network" in true|false) ;; *) printf 'start-docker: TELESRV_SERVER_HOST_NETWORK must be true or false\n' >&2; exit 1 ;; esac
|
||||
|
||||
compose=(docker compose --project-directory "$docker_dir" --env-file "$env_path" --file "$compose_path")
|
||||
if [[ "$configured_host_network" = false ]]; then compose+=(--file "$docker_dir/compose.bridge-network.yaml"); fi
|
||||
"${compose[@]}" version >/dev/null
|
||||
"${compose[@]}" config --quiet
|
||||
|
||||
if [[ "$build" = true ]]; then "${compose[@]}" build --pull; else "${compose[@]}" pull; fi
|
||||
if ! "${compose[@]}" up --detach --no-build --wait --wait-timeout 600; then
|
||||
"${compose[@]}" logs --no-color --tail 160 || true
|
||||
exit 1
|
||||
fi
|
||||
|
||||
"${compose[@]}" ps --all
|
||||
printf 'gramsrv main Docker stack is ready. Configuration: %s\n' "$env_path"
|
||||
if [[ "$(env_value TELESRV_PHONE_CODE_DELIVERY_PROVIDER)" = development ]]; then printf 'Development login code: %s\n' "$(env_value TELESRV_DEV_AUTH_CODE)"; fi
|
||||
printf 'MTProto: %s:%s\n' "$(env_value TELESRV_ADVERTISE_IP)" "$(env_value TELESRV_SERVER_PORT)"
|
||||
if [[ "$(env_value TELESRV_TURN_ENABLE)" = true ]]; then
|
||||
printf 'TURN/STUN: udp://%s:%s\n' "$(env_value TELESRV_TURN_ADVERTISE_IP)" "$(env_value TELESRV_TURN_UDP_PORT)"
|
||||
turn_relay_max_port=$(env_value TELESRV_TURN_RELAY_MAX_PORT)
|
||||
if [[ "$configured_host_network" = false ]]; then turn_relay_max_port=$(env_value TELESRV_TURN_BRIDGE_RELAY_MAX_PORT); fi
|
||||
printf 'TURN relay UDP range: %s-%s\n' "$(env_value TELESRV_TURN_RELAY_MIN_PORT)" "$turn_relay_max_port"
|
||||
fi
|
||||
admin_host=$(env_value TELESRV_ADMIN_BIND_IP)
|
||||
if [[ "$admin_host" = 0.0.0.0 || "$admin_host" = :: ]]; then admin_host=$(env_value TELESRV_ADVERTISE_IP); fi
|
||||
[[ "$admin_host" != *:* ]] || admin_host="[$admin_host]"
|
||||
printf 'Admin UI: http://%s:%s (password is stored in %s)\n' "$admin_host" "$(env_value TELESRV_ADMIN_PORT)" "$env_path"
|
||||
Loading…
Add table
Add a link
Reference in a new issue