provision-tenants: give agency data folders to the container's node user
The app runs as uid 1000 inside the image; folders created by the deploy user (another uid) made the container crash with EACCES on /app/data. Fixed with a one-off root container, so the script still needs no sudo. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
2b667c655a
commit
86f4f2c089
@ -49,6 +49,11 @@ run_container() { # slug port
|
|||||||
--label quorla.tenant="$slug" --label quorla.port="$port" "$IMAGE" >/dev/null
|
--label quorla.tenant="$slug" --label quorla.port="$port" "$IMAGE" >/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fix_owner() { # dir: the app runs as "node" (uid 1000) inside the image; hand it the folders it writes (no sudo needed)
|
||||||
|
[ "$(stat -c %u "$1/data")" = "1000" ] && return 0
|
||||||
|
docker run --rm --user 0 --entrypoint chown -v "$1:/t" "$IMAGE" -R 1000:1000 /t/data /t/clients /t/team /t/reports /t/branding
|
||||||
|
}
|
||||||
|
|
||||||
wait_healthy() { # port
|
wait_healthy() { # port
|
||||||
for _ in $(seq 1 30); do curl -fsS -m 3 "http://127.0.0.1:$1/api/auth/me" >/dev/null 2>&1 && return 0; sleep 2; done
|
for _ in $(seq 1 30); do curl -fsS -m 3 "http://127.0.0.1:$1/api/auth/me" >/dev/null 2>&1 && return 0; sleep 2; done
|
||||||
return 1
|
return 1
|
||||||
@ -74,6 +79,7 @@ while IFS=$'\t' read -r slug desired port name token; do
|
|||||||
mkdir -p "$dir"/{data,clients,team,reports,backups}
|
mkdir -p "$dir"/{data,clients,team,reports,backups}
|
||||||
[ -d "$dir/branding" ] || cp -r "$REPO/branding" "$dir/branding"
|
[ -d "$dir/branding" ] || cp -r "$REPO/branding" "$dir/branding"
|
||||||
write_env "$slug" "$name" "$token"
|
write_env "$slug" "$name" "$token"
|
||||||
|
fix_owner "$dir"
|
||||||
if docker inspect "quorla-$slug" >/dev/null 2>&1; then docker start "quorla-$slug" >/dev/null; else run_container "$slug" "$port"; fi
|
if docker inspect "quorla-$slug" >/dev/null 2>&1; then docker start "quorla-$slug" >/dev/null; else run_container "$slug" "$port"; fi
|
||||||
if wait_healthy "$port"; then log "$slug running on $port"; report "$slug" '{"actual":"running"}';
|
if wait_healthy "$port"; then log "$slug running on $port"; report "$slug" '{"actual":"running"}';
|
||||||
else log "$slug did not start"; report "$slug" "{\"error\":\"container did not become healthy on port $port\"}"; fi
|
else log "$slug did not start"; report "$slug" "{\"error\":\"container did not become healthy on port $port\"}"; fi
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user