@simplehomelab/deployrr 6.0.23 → 6.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/official/ddns-updater/files/pre-install.sh +3 -3
- package/apps/official/langfuse/files/pre-install.sh +25 -25
- package/apps/official/n8n/files/pre-install.sh +1 -1
- package/apps/official/pdfding/files/post-install.sh +2 -2
- package/apps/official/plex/files/pre-install.sh +3 -3
- package/apps/official/qbittorrent-vpn/files/post-install.sh +3 -3
- package/apps/official/sabnzbd/files/post-install.sh +1 -1
- package/apps/official/searxng/files/pre-install.sh +1 -1
- package/apps/official/supabase/files/pre-install.sh +14 -14
- package/apps/official/vaultwarden/files/pre-install.sh +3 -3
- package/apps/official/wg-easy/files/post-install.sh +2 -2
- package/apps/unofficial/9router/files/pre-install.sh +4 -4
- package/package.json +1 -1
|
@@ -13,6 +13,6 @@ sudo cp "$APP_DIR/files/config.json" "$DOCKER_FOLDER/appdata/ddns-updater/config
|
|
|
13
13
|
CF_ZONE_ID=$(sudo cat "$DOCKER_FOLDER/secrets/cf_zone_identifier")
|
|
14
14
|
CF_API_TOKEN=$(sudo cat "$DOCKER_FOLDER/secrets/cf_dns_api_token")
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
f_safe_sed "s|CLOUDFLARE-ZONE-IDENTIFIER-PLACEHOLDER|${CF_ZONE_ID}|g" "$DOCKER_FOLDER/appdata/ddns-updater/config.json"
|
|
17
|
+
f_safe_sed "s|CLOUDFLARE-DOMAIN-PLACEHOLDER|${DOMAINNAME_1}|g" "$DOCKER_FOLDER/appdata/ddns-updater/config.json"
|
|
18
|
+
f_safe_sed "s|CLOUDFLARE-API-TOKEN-PLACEHOLDER|${CF_API_TOKEN}|g" "$DOCKER_FOLDER/appdata/ddns-updater/config.json"
|
|
@@ -32,53 +32,53 @@ f_print_substep "Injecting secrets into Langfuse compose files..."
|
|
|
32
32
|
# --- Inject into main compose (langfuse-web) ---
|
|
33
33
|
local web_compose="$COMPOSE_DIR/langfuse.yml"
|
|
34
34
|
if [[ -f "$web_compose" ]]; then
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
f_safe_sed "s|POSTGRESQL-PASSWORD-PLACEHOLDER|$POSTGRESQL_PASSWORD|g" "$web_compose"
|
|
36
|
+
f_safe_sed "s|REDIS-PASSWORD-PLACEHOLDER|$REDIS_PASSWORD|g" "$web_compose"
|
|
37
|
+
f_safe_sed "s|CLICKHOUSE-PASSWORD-PLACEHOLDER|$CLICKHOUSE_PASSWORD|g" "$web_compose"
|
|
38
|
+
f_safe_sed "s|MINIO-PASSWORD-PLACEHOLDER|$MINIO_PASSWORD|g" "$web_compose"
|
|
39
|
+
f_safe_sed "s|NEXTAUTH-SECRET-PLACEHOLDER|$NEXTAUTH_SECRET|g" "$web_compose"
|
|
40
|
+
f_safe_sed "s|SALT-PLACEHOLDER|$SALT|g" "$web_compose"
|
|
41
|
+
f_safe_sed "s|ENCRYPTION-KEY-PLACEHOLDER|$ENCRYPTION_KEY|g" "$web_compose"
|
|
42
42
|
log_info "langfuse" "Injected secrets into langfuse.yml"
|
|
43
43
|
fi
|
|
44
44
|
|
|
45
45
|
# --- Inject into worker compose ---
|
|
46
46
|
local worker_compose="$COMPOSE_DIR/langfuse-worker.yml"
|
|
47
47
|
if [[ -f "$worker_compose" ]]; then
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
48
|
+
f_safe_sed "s|POSTGRESQL-PASSWORD-PLACEHOLDER|$POSTGRESQL_PASSWORD|g" "$worker_compose"
|
|
49
|
+
f_safe_sed "s|REDIS-PASSWORD-PLACEHOLDER|$REDIS_PASSWORD|g" "$worker_compose"
|
|
50
|
+
f_safe_sed "s|CLICKHOUSE-PASSWORD-PLACEHOLDER|$CLICKHOUSE_PASSWORD|g" "$worker_compose"
|
|
51
|
+
f_safe_sed "s|MINIO-PASSWORD-PLACEHOLDER|$MINIO_PASSWORD|g" "$worker_compose"
|
|
52
|
+
f_safe_sed "s|SALT-PLACEHOLDER|$SALT|g" "$worker_compose"
|
|
53
|
+
f_safe_sed "s|ENCRYPTION-KEY-PLACEHOLDER|$ENCRYPTION_KEY|g" "$worker_compose"
|
|
54
54
|
log_info "langfuse" "Injected secrets into langfuse-worker.yml"
|
|
55
55
|
fi
|
|
56
56
|
|
|
57
57
|
# --- Inject into PostgreSQL compose ---
|
|
58
58
|
local pg_compose="$COMPOSE_DIR/langfuse-postgresql.yml"
|
|
59
59
|
if [[ -f "$pg_compose" ]]; then
|
|
60
|
-
|
|
60
|
+
f_safe_sed "s|POSTGRESQL-PASSWORD-PLACEHOLDER|$POSTGRESQL_PASSWORD|g" "$pg_compose"
|
|
61
61
|
log_info "langfuse" "Injected secrets into langfuse-postgresql.yml"
|
|
62
62
|
fi
|
|
63
63
|
|
|
64
64
|
# --- Inject into Redis compose ---
|
|
65
65
|
local redis_compose="$COMPOSE_DIR/langfuse-redis.yml"
|
|
66
66
|
if [[ -f "$redis_compose" ]]; then
|
|
67
|
-
|
|
67
|
+
f_safe_sed "s|REDIS-PASSWORD-PLACEHOLDER|$REDIS_PASSWORD|g" "$redis_compose"
|
|
68
68
|
log_info "langfuse" "Injected secrets into langfuse-redis.yml"
|
|
69
69
|
fi
|
|
70
70
|
|
|
71
71
|
# --- Inject into ClickHouse compose ---
|
|
72
72
|
local ch_compose="$COMPOSE_DIR/langfuse-clickhouse.yml"
|
|
73
73
|
if [[ -f "$ch_compose" ]]; then
|
|
74
|
-
|
|
74
|
+
f_safe_sed "s|CLICKHOUSE-PASSWORD-PLACEHOLDER|$CLICKHOUSE_PASSWORD|g" "$ch_compose"
|
|
75
75
|
log_info "langfuse" "Injected secrets into langfuse-clickhouse.yml"
|
|
76
76
|
fi
|
|
77
77
|
|
|
78
78
|
# --- Inject into MinIO compose ---
|
|
79
79
|
local minio_compose="$COMPOSE_DIR/langfuse-minio.yml"
|
|
80
80
|
if [[ -f "$minio_compose" ]]; then
|
|
81
|
-
|
|
81
|
+
f_safe_sed "s|MINIO-PASSWORD-PLACEHOLDER|$MINIO_PASSWORD|g" "$minio_compose"
|
|
82
82
|
log_info "langfuse" "Injected secrets into langfuse-minio.yml"
|
|
83
83
|
fi
|
|
84
84
|
|
|
@@ -158,20 +158,20 @@ if [[ "$headless_choice" == "1" ]]; then
|
|
|
158
158
|
# --- Inject headless init values ---
|
|
159
159
|
f_print_substep "Configuring headless initialization..."
|
|
160
160
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
161
|
+
f_safe_sed "s|HEADLESS-ORG-PLACEHOLDER|$org_id|g" "$web_compose"
|
|
162
|
+
f_safe_sed "s|HEADLESS-ORGNAME-PLACEHOLDER|$org_name|g" "$web_compose"
|
|
163
|
+
f_safe_sed "s|HEADLESS-PROJECT-PLACEHOLDER|$project_id|g" "$web_compose"
|
|
164
|
+
f_safe_sed "s|HEADLESS-PROJECTNAME-PLACEHOLDER|$project_name|g" "$web_compose"
|
|
165
|
+
f_safe_sed "s|HEADLESS-EMAIL-PLACEHOLDER|$user_email|g" "$web_compose"
|
|
166
|
+
f_safe_sed "s|HEADLESS-USERNAME-PLACEHOLDER|$basic_user|g" "$web_compose"
|
|
167
|
+
f_safe_sed "s|HEADLESS-PASSWORD-PLACEHOLDER|$basic_pass|g" "$web_compose"
|
|
168
168
|
|
|
169
169
|
f_print_success "Admin account will be created on first startup"
|
|
170
170
|
log_info "langfuse" "Headless init configured: user=$basic_user email=$user_email"
|
|
171
171
|
else
|
|
172
172
|
# --- Remove headless init placeholders ---
|
|
173
173
|
if [[ -f "$web_compose" ]]; then
|
|
174
|
-
|
|
174
|
+
f_safe_sed "/HEADLESS-.*-PLACEHOLDER/d" "$web_compose"
|
|
175
175
|
log_info "langfuse" "Headless init skipped - placeholders removed"
|
|
176
176
|
fi
|
|
177
177
|
f_print_substep "Manual account setup selected - create your account via the web UI"
|
|
@@ -19,7 +19,7 @@ fi
|
|
|
19
19
|
local n8n_compose="$COMPOSE_DIR/n8n.yml"
|
|
20
20
|
if [[ -f "$n8n_compose" ]]; then
|
|
21
21
|
f_print_substep "Injecting database password into n8n compose..."
|
|
22
|
-
|
|
22
|
+
f_safe_sed "s|N8N-POSTGRESQL-PASSWORD-PLACEHOLDER|$POSTGRESQL_PASSWORD|g" "$n8n_compose"
|
|
23
23
|
log_info "n8n" "Injected PostgreSQL password into n8n.yml"
|
|
24
24
|
fi
|
|
25
25
|
|
|
@@ -26,7 +26,7 @@ if [[ -n "$TRAEFIK_RUNNING" && -f "$TRAEFIK_PRODUCTION_STATUS" && -f "$FILE_PROV
|
|
|
26
26
|
f_print_substep "Adding hostname: $PDFDING_HOSTNAME"
|
|
27
27
|
|
|
28
28
|
if [[ -f "$APP_COMPOSE_FILE" ]]; then
|
|
29
|
-
|
|
29
|
+
f_safe_sed "s|PDFDING_HOSTNAME_PLACEHOLDER|$PDFDING_HOSTNAME|g" "$APP_COMPOSE_FILE"
|
|
30
30
|
f_print_substep "Updated HOST_NAME in: $APP_COMPOSE_FILE"
|
|
31
31
|
f_print_substep "HOST_NAME set to: \$SERVER_LAN_IP,$PDFDING_HOSTNAME"
|
|
32
32
|
else
|
|
@@ -38,7 +38,7 @@ else
|
|
|
38
38
|
f_print_substep "Using SERVER_LAN_IP only for HOST_NAME"
|
|
39
39
|
|
|
40
40
|
if [[ -f "$APP_COMPOSE_FILE" ]]; then
|
|
41
|
-
|
|
41
|
+
f_safe_sed "s|,PDFDING_HOSTNAME_PLACEHOLDER||g" "$APP_COMPOSE_FILE"
|
|
42
42
|
f_print_substep "Updated HOST_NAME in: $APP_COMPOSE_FILE"
|
|
43
43
|
else
|
|
44
44
|
f_print_warning "Compose file not found: $APP_COMPOSE_FILE"
|
|
@@ -12,11 +12,11 @@ if [[ -z "$PLEX_CLAIM" ]]; then
|
|
|
12
12
|
f_print_substep "No Plex claim token provided, skipping claim configuration"
|
|
13
13
|
|
|
14
14
|
# Comment out PLEX_CLAIM_FILE environment variable
|
|
15
|
-
|
|
15
|
+
f_safe_sed 's| PLEX_CLAIM_FILE: /run/secrets/plex_claim| # PLEX_CLAIM_FILE: /run/secrets/plex_claim|' "$APP_COMPOSE_FILE"
|
|
16
16
|
|
|
17
17
|
# Comment out secrets section
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
f_safe_sed 's| secrets:| # secrets:|' "$APP_COMPOSE_FILE"
|
|
19
|
+
f_safe_sed 's| - plex_claim| # - plex_claim|' "$APP_COMPOSE_FILE"
|
|
20
20
|
|
|
21
21
|
f_print_substep "Secrets section commented out in: $APP_COMPOSE_FILE"
|
|
22
22
|
else
|
|
@@ -22,17 +22,17 @@ else
|
|
|
22
22
|
# Uncomment the ports section if commented
|
|
23
23
|
if grep -q "^\s*#\s*ports:" "$GLUETUN_COMPOSE" 2>/dev/null; then
|
|
24
24
|
f_print_substep "Enabling ports section in Gluetun"
|
|
25
|
-
|
|
25
|
+
f_safe_sed 's/^\(\s*\)#\s*ports:/\1ports:/' "$GLUETUN_COMPOSE"
|
|
26
26
|
fi
|
|
27
27
|
|
|
28
28
|
# Uncomment the qbittorrent-vpn port if it exists commented
|
|
29
29
|
if grep -q "^\s*#.*\$QBITTORRENTVPN_PORT:8080" "$GLUETUN_COMPOSE" 2>/dev/null; then
|
|
30
30
|
f_print_substep "Enabling qBittorrent VPN port mapping"
|
|
31
|
-
|
|
31
|
+
f_safe_sed 's/^\(\s*\)#\s*-\s*\$QBITTORRENTVPN_PORT:8080/\1- \$QBITTORRENTVPN_PORT:8080/' "$GLUETUN_COMPOSE"
|
|
32
32
|
elif ! grep -q "QBITTORRENTVPN_PORT:8080" "$GLUETUN_COMPOSE" 2>/dev/null; then
|
|
33
33
|
# Port mapping doesn't exist, add it after the ports: line
|
|
34
34
|
f_print_substep "Adding qBittorrent VPN port mapping to Gluetun"
|
|
35
|
-
|
|
35
|
+
f_safe_sed '/^\s*ports:/a\ - $QBITTORRENTVPN_PORT:8080 # qBittorrent VPN' "$GLUETUN_COMPOSE"
|
|
36
36
|
fi
|
|
37
37
|
fi
|
|
38
38
|
echo
|
|
@@ -23,7 +23,7 @@ if [[ -n "$SABNZBD_CONTAINER_ID" && -f "$INI_FILE" ]]; then
|
|
|
23
23
|
f_print_substep "Adding to whitelist: ${FILE_PROVIDER_APP_SUBDOMAIN}.${DOMAINNAME_1}"
|
|
24
24
|
f_print_substep "Editing: $INI_FILE"
|
|
25
25
|
# Add domain and app name to the whitelist (host_whitelist line)
|
|
26
|
-
|
|
26
|
+
f_safe_sed "s/${SABNZBD_CONTAINER_ID},/${SABNZBD_CONTAINER_ID},${FILE_PROVIDER_APP_SUBDOMAIN}.${DOMAINNAME_1},${APP_SNAME}/g" "$INI_FILE"
|
|
27
27
|
else
|
|
28
28
|
f_print_substep "Container ID or config file not found, skipping whitelist update"
|
|
29
29
|
fi
|
|
@@ -19,7 +19,7 @@ sudo mkdir -p "$DOCKER_FOLDER/appdata/searxng/cache"
|
|
|
19
19
|
# Copy preconfigured settings.yml and substitute secret key placeholder
|
|
20
20
|
f_print_substep "Deploying $APP_PNAME configuration files..."
|
|
21
21
|
sudo cp "$APP_DIR/files/settings.yml" "$DOCKER_FOLDER/appdata/searxng/settings/settings.yml"
|
|
22
|
-
|
|
22
|
+
f_safe_sed "s|SEARXNG-SECRET-KEY-PLACEHOLDER|$SEARXNG_SECRET_VALUE|g" "$DOCKER_FOLDER/appdata/searxng/settings/settings.yml"
|
|
23
23
|
|
|
24
24
|
# Copy limiter.toml for bot detection
|
|
25
25
|
sudo cp "$APP_DIR/files/limiter.toml" "$DOCKER_FOLDER/appdata/searxng/settings/limiter.toml"
|
|
@@ -163,38 +163,38 @@ for composeFile in "${COMPOSE_FILES[@]}"; do
|
|
|
163
163
|
[[ ! -f "$filePath" ]] && continue
|
|
164
164
|
|
|
165
165
|
# Postgres password
|
|
166
|
-
|
|
166
|
+
f_safe_sed "s|POSTGRES-PASSWORD-PLACEHOLDER|${POSTGRES_PASSWORD}|g" "$filePath"
|
|
167
167
|
|
|
168
168
|
# JWT secret
|
|
169
|
-
|
|
169
|
+
f_safe_sed "s|JWT-SECRET-PLACEHOLDER|${JWT_SECRET}|g" "$filePath"
|
|
170
170
|
|
|
171
171
|
# JWT tokens (ANON + SERVICE_ROLE)
|
|
172
|
-
|
|
173
|
-
|
|
172
|
+
f_safe_sed "s|ANON-KEY-PLACEHOLDER|${ANON_KEY}|g" "$filePath"
|
|
173
|
+
f_safe_sed "s|SERVICE-ROLE-KEY-PLACEHOLDER|${SERVICE_ROLE_KEY}|g" "$filePath"
|
|
174
174
|
|
|
175
175
|
# Dashboard credentials
|
|
176
|
-
|
|
177
|
-
|
|
176
|
+
f_safe_sed "s|DASHBOARD-USERNAME-PLACEHOLDER|${DASHBOARD_USERNAME}|g" "$filePath"
|
|
177
|
+
f_safe_sed "s|DASHBOARD-PASSWORD-PLACEHOLDER|${DASHBOARD_PASSWORD}|g" "$filePath"
|
|
178
178
|
|
|
179
179
|
# Secret key base (Realtime + Supavisor)
|
|
180
|
-
|
|
180
|
+
f_safe_sed "s|SECRET-KEY-BASE-PLACEHOLDER|${SECRET_KEY_BASE}|g" "$filePath"
|
|
181
181
|
|
|
182
182
|
# Vault encryption key (Supavisor)
|
|
183
|
-
|
|
183
|
+
f_safe_sed "s|VAULT-ENC-KEY-PLACEHOLDER|${VAULT_ENC_KEY}|g" "$filePath"
|
|
184
184
|
|
|
185
185
|
# PG Meta crypto key
|
|
186
|
-
|
|
186
|
+
f_safe_sed "s|PG-META-CRYPTO-KEY-PLACEHOLDER|${PG_META_CRYPTO_KEY}|g" "$filePath"
|
|
187
187
|
|
|
188
188
|
# Logflare tokens
|
|
189
|
-
|
|
190
|
-
|
|
189
|
+
f_safe_sed "s|LOGFLARE-PUBLIC-TOKEN-PLACEHOLDER|${LOGFLARE_PUBLIC_TOKEN}|g" "$filePath"
|
|
190
|
+
f_safe_sed "s|LOGFLARE-PRIVATE-TOKEN-PLACEHOLDER|${LOGFLARE_PRIVATE_TOKEN}|g" "$filePath"
|
|
191
191
|
|
|
192
192
|
# Storage S3 credentials
|
|
193
|
-
|
|
194
|
-
|
|
193
|
+
f_safe_sed "s|S3-ACCESS-KEY-ID-PLACEHOLDER|${S3_ACCESS_KEY_ID}|g" "$filePath"
|
|
194
|
+
f_safe_sed "s|S3-ACCESS-KEY-SECRET-PLACEHOLDER|${S3_ACCESS_KEY_SECRET}|g" "$filePath"
|
|
195
195
|
|
|
196
196
|
# Pooler tenant ID
|
|
197
|
-
|
|
197
|
+
f_safe_sed "s|POOLER-TENANT-ID-PLACEHOLDER|${POOLER_TENANT_ID}|g" "$filePath"
|
|
198
198
|
done
|
|
199
199
|
|
|
200
200
|
f_print_success "Supabase secrets configured"
|
|
@@ -15,13 +15,13 @@ f_print_substep "Admin token created"
|
|
|
15
15
|
|
|
16
16
|
# Uncomment ADMIN_TOKEN line in compose
|
|
17
17
|
f_print_substep "Updating compose file: $APP_COMPOSE_FILE"
|
|
18
|
-
|
|
18
|
+
f_safe_sed 's|# - ADMIN_TOKEN=|- ADMIN_TOKEN=|' "$APP_COMPOSE_FILE"
|
|
19
19
|
sleep 1
|
|
20
20
|
|
|
21
21
|
# Replace placeholder with hashed token
|
|
22
|
-
|
|
22
|
+
f_safe_sed "s|ADMIN-TOKEN-PLACEHOLDER|$VAULTWARDEN_ADMIN_TOKEN|" "$APP_COMPOSE_FILE"
|
|
23
23
|
sleep 1
|
|
24
24
|
|
|
25
25
|
# Escape $ signs for Docker Compose (argon2 hash contains $ characters)
|
|
26
|
-
|
|
26
|
+
f_safe_sed '/.*ADMIN_TOKEN.*/s/\$/\$\$/g' "$APP_COMPOSE_FILE"
|
|
27
27
|
f_print_substep "Admin token added to compose file"
|
|
@@ -18,11 +18,11 @@ echo
|
|
|
18
18
|
|
|
19
19
|
f_print_step "3/3" "Updating compose file with password hash..."
|
|
20
20
|
# Replace placeholder with hashed password
|
|
21
|
-
|
|
21
|
+
f_safe_sed "s|WG-EASY-PASSWORD-HASH-PLACEHOLDER|$WGEASY_PASSWORD_HASH|g" "$APP_COMPOSE_FILE"
|
|
22
22
|
# Escape $ signs for Docker Compose (bcrypt hashes contain $ characters)
|
|
23
23
|
if ! grep -q 'PASSWORD_HASH=\$\$' "$APP_COMPOSE_FILE"; then
|
|
24
24
|
f_print_substep "Escaping special characters in password hash"
|
|
25
|
-
|
|
25
|
+
f_safe_sed '/.*PASSWORD_HASH.*/s/\$/\$\$/g' "$APP_COMPOSE_FILE"
|
|
26
26
|
fi
|
|
27
27
|
echo
|
|
28
28
|
|
|
@@ -54,7 +54,7 @@ f_print_substep "Configuring 9Router secrets..."
|
|
|
54
54
|
|
|
55
55
|
JWT_SECRET=$(sudo cat "$DOCKER_FOLDER/secrets/ninerouter_jwt_secret" 2>/dev/null)
|
|
56
56
|
if [[ -n "$JWT_SECRET" ]]; then
|
|
57
|
-
|
|
57
|
+
f_safe_sed "s|JWT-SECRET-PLACEHOLDER|$JWT_SECRET|" "$APP_COMPOSE_FILE"
|
|
58
58
|
f_print_substep "JWT secret injected into compose file"
|
|
59
59
|
else
|
|
60
60
|
f_print_error "JWT secret not found in secrets"
|
|
@@ -63,7 +63,7 @@ fi
|
|
|
63
63
|
|
|
64
64
|
INITIAL_PASSWORD=$(sudo cat "$DOCKER_FOLDER/secrets/ninerouter_password" 2>/dev/null)
|
|
65
65
|
if [[ -n "$INITIAL_PASSWORD" ]]; then
|
|
66
|
-
|
|
66
|
+
f_safe_sed "s|INITIAL-PASSWORD-PLACEHOLDER|$INITIAL_PASSWORD|" "$APP_COMPOSE_FILE"
|
|
67
67
|
export INITIAL_PASSWORD # Export so envsubst can substitute in post-install messages
|
|
68
68
|
f_print_substep "Initial password injected into compose file"
|
|
69
69
|
else
|
|
@@ -74,8 +74,8 @@ fi
|
|
|
74
74
|
# Generate unique API key secret and machine ID salt
|
|
75
75
|
API_KEY_SECRET=$(openssl rand -hex 16 2>/dev/null || head -c 32 /dev/urandom | xxd -p | head -c 32)
|
|
76
76
|
MACHINE_ID_SALT=$(openssl rand -hex 16 2>/dev/null || head -c 32 /dev/urandom | xxd -p | head -c 32)
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
f_safe_sed "s|API-KEY-SECRET-PLACEHOLDER|$API_KEY_SECRET|" "$APP_COMPOSE_FILE"
|
|
78
|
+
f_safe_sed "s|MACHINE-ID-SALT-PLACEHOLDER|$MACHINE_ID_SALT|" "$APP_COMPOSE_FILE"
|
|
79
79
|
f_print_substep "API key secret and machine ID salt generated"
|
|
80
80
|
|
|
81
81
|
# Step 5: Set ownership of ALL volume-mounted directories
|