A free, open, self-hosted app platform (GNU AGPLv3): one-click app deploys, Traefik reverse proxy with automatic SSL, rootless Docker support, gluetun VPN routing, and a web dashboard to manage it all. Free & open forever to self-host; optional paid hosted services fund it. See PROMISE.md. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> Signed-off-by: librelad <librelad@digitalangels.vip>
58 lines
2.2 KiB
Bash
58 lines
2.2 KiB
Bash
#!/bin/bash
|
|
|
|
# Apps with `build: .` in their docker compose need their Dockerfile +
|
|
# source tree to live in the deployed container dir (where compose runs
|
|
# from), not just in the install template dir. dockerComposeSetupFile
|
|
# only copies the compose itself; this helper covers the rest.
|
|
#
|
|
# Auto-detect: if a Dockerfile exists in the install dir for the app,
|
|
# we copy every file/folder from install→deployed except docker-compose
|
|
# variants (already handled) and the .config (per-app config has its
|
|
# own copy lifecycle in dockerConfigSetupToContainer).
|
|
#
|
|
# Idempotent: re-running mirrors the latest install template. Safe to
|
|
# call on every install action.
|
|
dockerCopyBuildContext()
|
|
{
|
|
local app_name="$1"
|
|
local source_dir="$install_containers_dir$app_name"
|
|
local target_dir="$containers_dir$app_name"
|
|
|
|
if [[ -z "$app_name" ]]; then
|
|
isError "dockerCopyBuildContext: app_name is empty."
|
|
return 1
|
|
fi
|
|
if [[ ! -f "$source_dir/Dockerfile" ]]; then
|
|
# Nothing to do — app uses a pre-built image.
|
|
return 0
|
|
fi
|
|
if [[ ! -d "$target_dir" ]]; then
|
|
isError "dockerCopyBuildContext: target $target_dir doesn't exist."
|
|
return 1
|
|
fi
|
|
|
|
isNotice "Copying build context (Dockerfile + source)"
|
|
|
|
# Use rsync if available so re-installs only diff what changed; fall
|
|
# back to cp -R for systems without rsync. Either way we exclude the
|
|
# files that have their own copy lifecycle.
|
|
if command -v rsync >/dev/null 2>&1; then
|
|
sudo rsync -a \
|
|
--exclude="docker-compose.yml" \
|
|
--exclude="docker-compose.${app_name}.yml" \
|
|
--exclude="${app_name}.config" \
|
|
--exclude="${app_name}.tools.json" \
|
|
--exclude="${app_name}.svg" \
|
|
--exclude="data" \
|
|
"$source_dir/" "$target_dir/"
|
|
else
|
|
# Best-effort fallback. Copies everything then nukes the
|
|
# excluded items in the target.
|
|
sudo cp -R "$source_dir/." "$target_dir/"
|
|
sudo rm -f "$target_dir/${app_name}.config" "$target_dir/${app_name}.tools.json"
|
|
fi
|
|
|
|
sudo chown -R "$docker_install_user:$docker_install_user" "$target_dir"
|
|
isSuccessful "Build context copied for $app_name."
|
|
}
|