119 lines
3.2 KiB
Bash
119 lines
3.2 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
ENV_FILE="${1:-$ROOT_DIR/.env}"
|
|
SCHEMA_SQL="$ROOT_DIR/sql/create-tables.sql"
|
|
SEED_SQL="$ROOT_DIR/sql/init-data.sql"
|
|
|
|
if [[ ! -f "$ENV_FILE" && -f "$ROOT_DIR/.env.prod" ]]; then
|
|
ENV_FILE="$ROOT_DIR/.env.prod"
|
|
fi
|
|
|
|
require_file() {
|
|
local path="$1"
|
|
local hint="${2:-}"
|
|
if [[ -f "$path" ]]; then
|
|
return 0
|
|
fi
|
|
echo "Missing file: $path"
|
|
[[ -n "$hint" ]] && echo "$hint"
|
|
exit 1
|
|
}
|
|
|
|
require_env() {
|
|
local name="$1"
|
|
[[ -n "${!name:-}" ]] || { echo "Missing required env: $name"; exit 1; }
|
|
}
|
|
|
|
read_env_value() {
|
|
local key="$1"
|
|
local line=""
|
|
local value=""
|
|
|
|
while IFS= read -r line || [[ -n "$line" ]]; do
|
|
line="${line%$'\r'}"
|
|
[[ -z "${line//[[:space:]]/}" ]] && continue
|
|
[[ "${line#\#}" != "$line" ]] && continue
|
|
[[ "${line#export }" != "$line" ]] && line="${line#export }"
|
|
[[ "$line" == "$key="* ]] || continue
|
|
value="${line#*=}"
|
|
if [[ "$value" =~ ^\"(.*)\"$ ]]; then
|
|
value="${BASH_REMATCH[1]}"
|
|
elif [[ "$value" =~ ^\'(.*)\'$ ]]; then
|
|
value="${BASH_REMATCH[1]}"
|
|
fi
|
|
printf '%s' "$value"
|
|
return 0
|
|
done < "$ENV_FILE"
|
|
|
|
return 1
|
|
}
|
|
|
|
load_env_var() {
|
|
local name="$1"
|
|
local default_value="${2:-}"
|
|
local value=""
|
|
value="$(read_env_value "$name" || true)"
|
|
if [[ -z "$value" ]]; then
|
|
value="$default_value"
|
|
fi
|
|
printf -v "$name" '%s' "$value"
|
|
}
|
|
|
|
is_truthy() {
|
|
local value="${1:-}"
|
|
value="$(printf '%s' "$value" | tr '[:upper:]' '[:lower:]')"
|
|
[[ "$value" =~ ^(1|true|yes|on)$ ]]
|
|
}
|
|
|
|
require_file "$ENV_FILE" "Expected bundle config file such as .env"
|
|
require_file "$SCHEMA_SQL"
|
|
require_file "$SEED_SQL"
|
|
|
|
if ! command -v psql >/dev/null 2>&1; then
|
|
echo "Missing command: psql"
|
|
echo "Please install PostgreSQL client tools on the target host, then rerun ./init-db.sh"
|
|
exit 1
|
|
fi
|
|
|
|
load_env_var DATABASE_URL
|
|
load_env_var UPLOAD_MAX_MB 100
|
|
load_env_var STT_ENABLED true
|
|
|
|
require_env DATABASE_URL
|
|
|
|
PAGE_SIZE_JSON="10"
|
|
CHAT_PULL_PAGE_SIZE_JSON="60"
|
|
AUTH_TOKEN_TTL_HOURS_JSON="24"
|
|
AUTH_TOKEN_MAX_ACTIVE_JSON="2"
|
|
UPLOAD_MAX_MB_JSON="$UPLOAD_MAX_MB"
|
|
ALLOWED_ATTACHMENT_EXTENSIONS_JSON="[]"
|
|
WORKSPACE_DOWNLOAD_EXTENSIONS_JSON='[".pdf", ".doc", ".docx", ".xls", ".xlsx", ".xlsm", ".ppt", ".pptx", ".odt", ".ods", ".odp", ".wps"]'
|
|
if is_truthy "$STT_ENABLED"; then
|
|
SPEECH_ENABLED_JSON="true"
|
|
else
|
|
SPEECH_ENABLED_JSON="false"
|
|
fi
|
|
ACTIVITY_EVENT_RETENTION_DAYS_JSON="7"
|
|
|
|
echo "[init-prod-db-offline] applying schema with DATABASE_URL"
|
|
psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f "$SCHEMA_SQL"
|
|
|
|
echo "[init-prod-db-offline] applying initial data with DATABASE_URL"
|
|
psql \
|
|
"$DATABASE_URL" \
|
|
-v ON_ERROR_STOP=1 \
|
|
-v page_size_json="$PAGE_SIZE_JSON" \
|
|
-v chat_pull_page_size_json="$CHAT_PULL_PAGE_SIZE_JSON" \
|
|
-v auth_token_ttl_hours_json="$AUTH_TOKEN_TTL_HOURS_JSON" \
|
|
-v auth_token_max_active_json="$AUTH_TOKEN_MAX_ACTIVE_JSON" \
|
|
-v upload_max_mb_json="$UPLOAD_MAX_MB_JSON" \
|
|
-v allowed_attachment_extensions_json="$ALLOWED_ATTACHMENT_EXTENSIONS_JSON" \
|
|
-v workspace_download_extensions_json="$WORKSPACE_DOWNLOAD_EXTENSIONS_JSON" \
|
|
-v speech_enabled_json="$SPEECH_ENABLED_JSON" \
|
|
-v activity_event_retention_days_json="$ACTIVITY_EVENT_RETENTION_DAYS_JSON" \
|
|
-f "$SEED_SQL"
|
|
|
|
echo "[init-prod-db-offline] done"
|