Files
2026-07-15 23:28:04 +08:00

120 lines
4.0 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BASE_PATH="$(cd "$SCRIPT_DIR/../.." && pwd)"
DEPLOY_DIR="$BASE_PATH/deploy"
ENV_FILE="$DEPLOY_DIR/.env"
ENV_EXAMPLE_FILE="$DEPLOY_DIR/.env.example"
if [ ! -t 0 ]; then
echo "Interactive terminal is required."
echo "Fallback: copy deploy/.env.example to deploy/.env then run bash deploy/script/prepare.sh"
exit 1
fi
if [ ! -f "$ENV_EXAMPLE_FILE" ]; then
echo "Missing required file: $ENV_EXAMPLE_FILE"
exit 1
fi
if [ ! -f "$ENV_FILE" ]; then
cp "$ENV_EXAMPLE_FILE" "$ENV_FILE"
fi
set -a
# shellcheck disable=SC1090
source "$ENV_EXAMPLE_FILE"
# shellcheck disable=SC1090
source "$ENV_FILE"
set +a
update_env_key() {
local key="$1"
local value="$2"
local tmp_file=""
tmp_file="$(mktemp)"
awk -v key="$key" -v val="$value" '
BEGIN { updated = 0 }
$0 ~ "^" key "=" {
print key "=" val
updated = 1
next
}
{ print }
END {
if (!updated) {
print key "=" val
}
}
' "$ENV_FILE" > "$tmp_file"
mv "$tmp_file" "$ENV_FILE"
}
prompt_value() {
local key="$1"
local label="$2"
local fallback="$3"
local current_value=""
local input=""
current_value="${!key:-$fallback}"
read -r -p "$label [$current_value]: " input
if [ -z "$input" ]; then
input="$current_value"
fi
printf -v "$key" '%s' "$input"
update_env_key "$key" "$input"
}
echo "== Yoresee Deploy Config Init =="
echo "Press Enter to keep the default value in brackets."
# Host exposed ports
prompt_value NGINX_HTTP_PORT "Host port for Nginx HTTP" "8080"
prompt_value NGINX_HTTPS_PORT "Host port for Nginx HTTPS" "8443"
prompt_value BACKEND_GRPC_HOST_PORT "Host port for backend gRPC" "9090"
prompt_value BACKEND_DEBUG_HOST_PORT "Host port for backend debug (dev only)" "2345"
prompt_value POSTGRES_HOST_PORT "Host port for Postgres (dev only)" "5432"
prompt_value REDIS_HOST_PORT "Host port for Redis (dev only)" "6379"
prompt_value RABBITMQ_AMQP_HOST_PORT "Host port for RabbitMQ AMQP (dev only)" "5672"
prompt_value CONSUL_HOST_PORT "Host port for Consul UI/API" "8500"
prompt_value ELASTICSEARCH_HOST_PORT "Host port for Elasticsearch (dev only)" "9200"
# Credentials and app secrets
prompt_value POSTGRES_USER "Postgres user" "root"
prompt_value POSTGRES_PASSWORD "Postgres password" "your_password"
prompt_value POSTGRES_DB "Postgres database" "yoresee_doc_db"
prompt_value REDIS_PASSWORD "Redis password" "your_redis_password"
prompt_value RABBITMQ_DEFAULT_USER "RabbitMQ user" "guest"
prompt_value RABBITMQ_DEFAULT_PASS "RabbitMQ password" "guest"
prompt_value MINIO_ROOT_USER "MinIO root user" "minioadmin"
prompt_value MINIO_ROOT_PASSWORD "MinIO root password" "minioadmin"
prompt_value CONSUL_ROOT_TOKEN "Consul root token" "yoresee_doc_root_token"
prompt_value BACKEND_INTERNAL_RPC_KEY "Internal RPC key" "yoresee_doc_internal_key"
prompt_value JWT_SECRET "JWT secret" "yoresee_doc_jwt_secret_key"
# App behavior
prompt_value VITE_API_BASE_URL "Frontend API base URL" "http://localhost:${NGINX_HTTP_PORT}"
prompt_value VITE_GRPC_WEB_ENDPOINT "Frontend gRPC-web endpoint" "/grpc"
prompt_value DIRTY_DOC_NOTIFY_THRESHOLD "Dirty doc notify threshold" "5"
# Keep MinIO browser redirect bound to API base URL to avoid host drift in deployments.
MINIO_BROWSER_REDIRECT_URL="${VITE_API_BASE_URL%/}/minio"
update_env_key MINIO_BROWSER_REDIRECT_URL "$MINIO_BROWSER_REDIRECT_URL"
echo "MinIO browser redirect URL (derived): $MINIO_BROWSER_REDIRECT_URL"
prompt_value ELASTICSEARCH_ENABLED "Enable Elasticsearch" "true"
prompt_value ELASTICSEARCH_INDEX_PREFIX "Elasticsearch index prefix" "yoresee_doc"
prompt_value ELASTICSEARCH_USERNAME "Elasticsearch username (optional)" ""
prompt_value ELASTICSEARCH_PASSWORD "Elasticsearch password (optional)" ""
echo "Written: $ENV_FILE"
bash "$SCRIPT_DIR/prepare.sh"
echo "Initialization completed."
echo "You can start services with: bash deploy/script/start.sh dev up"