Files
mcma-bootstrap/lib/env_gen.sh
T
Senko-san 1b251869c4 initial
2026-06-08 12:49:45 +03:00

80 lines
2.8 KiB
Bash

# .env.deploy generation. Renders templates/env/env.template (token
# substitution) and appends conditional blocks for the chosen options.
# The file is written with mode 600 and never echoed to stdout.
# render_template FILE — substitutes @KEY@ tokens from the RENDER assoc array.
# Prints the result to stdout.
render_template() {
local file="$1" content key
content="$(cat "$file")"
for key in "${!RENDER[@]}"; do
content="${content//@${key}@/${RENDER[$key]}}"
done
printf '%s\n' "$content"
}
# build_database_url — sets CFG_DATABASE_URL from the collected DB config.
build_database_url() {
if [[ "$CFG_DB_MODE" == "embedded" ]]; then
CFG_DATABASE_URL="postgresql+asyncpg://${CFG_DB_USER}:${CFG_DB_PASS}@db:5432/${CFG_DB_NAME}"
else
CFG_DATABASE_URL="postgresql+asyncpg://${CFG_DB_USER}:${CFG_DB_PASS}@${CFG_DB_HOST}:${CFG_DB_PORT}/${CFG_DB_NAME}"
fi
}
# generate_env — writes $ENV_FILE from template + conditional sections.
generate_env() {
build_database_url
declare -A RENDER=(
[MCMA_IMAGE_TAG]="$CFG_TAG"
[DATABASE_URL]="$CFG_DATABASE_URL"
[REDIS_URL]="$CFG_REDIS_URL"
[JWT_SECRET]="$CFG_JWT_SECRET"
[MEDIA_HOST_PATH]="$CFG_MEDIA_HOST_PATH"
[STORAGE_BACKEND]="$CFG_STORAGE"
[PUBLIC_API_BASE_URL]="$CFG_PUBLIC_API_BASE_URL"
[HTTP_PORT]="$CFG_HTTP_PORT"
[API_PORT]="$CFG_API_PORT"
[WEBUI_PORT]="$CFG_WEBUI_PORT"
)
umask 077
render_template "${BOOTSTRAP_DIR}/templates/env/env.template" >"$ENV_FILE"
# -- embedded Postgres credentials (needed by the db service) ---------
if [[ "$CFG_DB_MODE" == "embedded" ]]; then
{
echo ""
echo "# -- built-in Postgres --------------------------------------------------"
echo "POSTGRES_USER=${CFG_DB_USER}"
echo "POSTGRES_PASSWORD=${CFG_DB_PASS}"
echo "POSTGRES_DB=${CFG_DB_NAME}"
} >>"$ENV_FILE"
fi
# -- S3 storage -------------------------------------------------------
if [[ "$CFG_STORAGE" == "s3" ]]; then
{
echo ""
echo "# -- S3 storage ---------------------------------------------------------"
echo "S3_ENDPOINT_URL=${CFG_S3_ENDPOINT}"
echo "S3_BUCKET=${CFG_S3_BUCKET}"
echo "S3_REGION=${CFG_S3_REGION}"
echo "S3_ACCESS_KEY=${CFG_S3_KEY}"
echo "S3_SECRET_KEY=${CFG_S3_SECRET}"
} >>"$ENV_FILE"
fi
# -- optional ML service ----------------------------------------------
if [[ -n "${CFG_ML_URL:-}" ]]; then
{
echo ""
echo "# -- optional ML service ------------------------------------------------"
echo "ML_SERVICE_URL=${CFG_ML_URL}"
} >>"$ENV_FILE"
fi
chmod 600 "$ENV_FILE"
}