/
evcode
/
n8n-setup
Обзор
Документация
Войти
/
evcode
/
n8n-setup
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
setup.sh
191 строка
6 KB
Evgeny Epifanov
nocodb s3
16 фев 2026, 09:29
16 фев 2026, 09:29
bf990b2
Код
Авторство
О чём код?
#!/bin/bash if (( ${BASH_VERSION%%.*} < 4 )); then echo "Ошибка: требуется Bash версии 4.0 или выше." exit 1 fi set -e ENV_EXAMPLE=".env.example" ENV_FILE=".env" if [ ! -f "$ENV_EXAMPLE" ]; then echo "Ошибка: файл $ENV_EXAMPLE не найден." exit 1 fi cp "$ENV_EXAMPLE" "$ENV_FILE" echo "Создан файл $ENV_FILE на основе $ENV_EXAMPLE." # Ассоциативные массивы declare -A db_names=() declare -A db_users=() declare -A db_passwords=() declare -A other_passwords=() declare -A secrets=() generate_password() { tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 16 } generate_secret() { openssl rand -base64 32 | tr -d '\n/+=' } # Определяем группы: используем "MAIN" вместо пустой строки prefixes=("MAIN" "CUSTOM" "DIRECTUS" "NOCODB" "N8N") # Первый проход: соберём имена БД и пользователей while IFS= read -r line || [[ -n "$line" ]]; do [[ -z "$line" ]] || [[ "$line" =~ ^[[:space:]]*# ]] && continue if [[ "$line" =~ ^([A-Za-z_][A-Za-z0-9_]*)=(.*)$ ]]; then key="${BASH_REMATCH[1]}" value="${BASH_REMATCH[2]}" # Основная БД (без префикса) if [[ "$key" == "DB_NAME" ]]; then db_names["MAIN"]="$value" elif [[ "$key" == "DB_USER" ]]; then db_users["MAIN"]="$value" # Префиксные БД elif [[ "$key" =~ ^(.*)_DB_NAME$ ]]; then prefix="${BASH_REMATCH[1]}" db_names["$prefix"]="$value" elif [[ "$key" =~ ^(.*)_DB_USER$ ]]; then prefix="${BASH_REMATCH[1]}" db_users["$prefix"]="$value" fi fi done < "$ENV_FILE" TMP_ENV="$(mktemp)" # Второй проход: генерация и запись { while IFS= read -r line || [[ -n "$line" ]]; do if [[ -z "$line" ]] || [[ "$line" =~ ^[[:space:]]*# ]]; then echo "$line" continue fi modified=false # Основной пароль if [[ "$line" == DB_PASSWORD=* ]]; then pwd=$(generate_password) db_passwords["MAIN"]="$pwd" echo "DB_PASSWORD=$pwd" modified=true # Префиксные *_DB_PASSWORD elif [[ "$line" =~ ^((.*)_DB_PASSWORD)=.*$ ]]; then full_key="${BASH_REMATCH[1]}" prefix="${BASH_REMATCH[2]}" pwd=$(generate_password) db_passwords["$prefix"]="$pwd" echo "$full_key=$pwd" modified=true # Прочие пароли elif [[ "$line" == DIRECTUS_ADMIN_PASSWORD=* ]]; then pwd=$(generate_password) other_passwords["DIRECTUS_ADMIN"]="Directus" echo "DIRECTUS_ADMIN_PASSWORD=$pwd" modified=true elif [[ "$line" == PGADMIN_DEFAULT_PASSWORD=* ]]; then pwd=$(generate_password) other_passwords["PGADMIN_DEFAULT"]="PGAdmin" echo "PGADMIN_DEFAULT_PASSWORD=$pwd" modified=true elif [[ "$line" == NOCODB_ADMIN_PASSWORD=* ]]; then pwd=$(generate_password) other_passwords["NOCODB_ADMIN"]="NocoDB" echo "NOCODB_ADMIN_PASSWORD=$pwd" modified=true elif [[ "$line" == RESTIC_PASSWORD=* ]]; then pwd=$(generate_password) other_passwords["RESTIC"]="Backup" echo "RESTIC_PASSWORD=$pwd" modified=true # Секреты elif [[ "$line" == DIRECTUS_SECRET=* ]]; then sec=$(generate_secret) secrets["DIRECTUS_SECRET"]="Directus Secret" echo "DIRECTUS_SECRET=$sec" modified=true elif [[ "$line" == QDRANT_SECRET=* ]]; then sec=$(generate_secret) secrets["QDRANT_SECRET"]="Qdrant Secret" echo "QDRANT_SECRET=$sec" modified=true elif [[ "$line" == N8N_ENCRYPTION_KEY=* ]]; then sec=$(generate_secret) secrets["N8N_ENCRYPTION_KEY"]="n8n Encryption Key" echo "N8N_ENCRYPTION_KEY=$sec" modified=true elif [[ "$line" == N8N_RUNNERS_AUTH_TOKEN=* ]]; then sec=$(generate_secret) secrets["N8N_RUNNERS_AUTH_TOKEN"]="n8n Runners Auth Token" echo "N8N_RUNNERS_AUTH_TOKEN=$sec" modified=true fi [[ "$modified" == false ]] && echo "$line" done < "$ENV_FILE" } > "$TMP_ENV" mv "$TMP_ENV" "$ENV_FILE" echo "✅ Файл $ENV_FILE успешно обновлён." # === Вывод результатов === echo "" echo "🔐 Учетные данные баз данных:" echo "==================================" get_group_name() { case "$1" in "MAIN") echo "Main DB" ;; "CUSTOM") echo "Custom App" ;; "DIRECTUS") echo "Directus" ;; "NOCODB") echo "NocoDB" ;; "N8N") echo "n8n" ;; *) echo "$1" ;; esac } for prefix in "${prefixes[@]}"; do db_name="${db_names[$prefix]:-unknown}" db_user="${db_users[$prefix]:-unknown}" db_pass="${db_passwords[$prefix]:-}" if [[ -n "$db_pass" ]]; then group_name=$(get_group_name "$prefix") printf "%-15s | DB: %-12s | User: %-12s | Password: %s\n" \ "$group_name" "$db_name" "$db_user" "$db_pass" fi done if [[ ${#other_passwords[@]} -gt 0 ]]; then echo "" echo "👤 Прочие аккаунты:" for key in "${!other_passwords[@]}"; do label="${other_passwords[$key]}" pass_var="${key}_PASSWORD" pass=$(grep "^$pass_var=" "$ENV_FILE" | cut -d'=' -f2) printf "%-20s | Password: %s\n" "$label" "$pass" done fi if [[ ${#secrets[@]} -gt 0 ]]; then echo "" echo "🗝️ Секреты:" for key in "${!secrets[@]}"; do label="${secrets[$key]}" secret=$(grep "^$key=" "$ENV_FILE" | cut -d'=' -f2) printf "%-20s | %s\n" "$label" "$secret" done fi