generated from bisco/codex-bootstrap
feat: use host bind mounts for persistent data
This commit is contained in:
Executable
+99
@@ -0,0 +1,99 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
ROOT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)"
|
||||
ENV_FILE="${ENV_FILE:-$ROOT_DIR/.env}"
|
||||
|
||||
DB_DATA_PATH="${DB_DATA_PATH:-./runtime/db}"
|
||||
WORDPRESS_DATA_PATH="${WORDPRESS_DATA_PATH:-./runtime/wordpress}"
|
||||
LETSENCRYPT_DATA_PATH="${LETSENCRYPT_DATA_PATH:-./runtime/letsencrypt}"
|
||||
CERTBOT_CHALLENGES_PATH="${CERTBOT_CHALLENGES_PATH:-./runtime/certbot/www}"
|
||||
|
||||
MARIADB_VOLUME_UID="${MARIADB_VOLUME_UID:-999}"
|
||||
MARIADB_VOLUME_GID="${MARIADB_VOLUME_GID:-999}"
|
||||
WORDPRESS_VOLUME_UID="${WORDPRESS_VOLUME_UID:-33}"
|
||||
WORDPRESS_VOLUME_GID="${WORDPRESS_VOLUME_GID:-33}"
|
||||
CERTBOT_VOLUME_UID="${CERTBOT_VOLUME_UID:-0}"
|
||||
CERTBOT_VOLUME_GID="${CERTBOT_VOLUME_GID:-0}"
|
||||
|
||||
load_env_file() {
|
||||
[ -f "$ENV_FILE" ] || return 0
|
||||
|
||||
while IFS= read -r line || [ -n "$line" ]; do
|
||||
case "$line" in
|
||||
"" | \#*) continue ;;
|
||||
esac
|
||||
|
||||
key="${line%%=*}"
|
||||
value="${line#*=}"
|
||||
value="${value%\"}"
|
||||
value="${value#\"}"
|
||||
value="${value%\'}"
|
||||
value="${value#\'}"
|
||||
|
||||
case "$key" in
|
||||
DB_DATA_PATH) DB_DATA_PATH="$value" ;;
|
||||
WORDPRESS_DATA_PATH) WORDPRESS_DATA_PATH="$value" ;;
|
||||
LETSENCRYPT_DATA_PATH) LETSENCRYPT_DATA_PATH="$value" ;;
|
||||
CERTBOT_CHALLENGES_PATH) CERTBOT_CHALLENGES_PATH="$value" ;;
|
||||
MARIADB_VOLUME_UID) MARIADB_VOLUME_UID="$value" ;;
|
||||
MARIADB_VOLUME_GID) MARIADB_VOLUME_GID="$value" ;;
|
||||
WORDPRESS_VOLUME_UID) WORDPRESS_VOLUME_UID="$value" ;;
|
||||
WORDPRESS_VOLUME_GID) WORDPRESS_VOLUME_GID="$value" ;;
|
||||
CERTBOT_VOLUME_UID) CERTBOT_VOLUME_UID="$value" ;;
|
||||
CERTBOT_VOLUME_GID) CERTBOT_VOLUME_GID="$value" ;;
|
||||
esac
|
||||
done < "$ENV_FILE"
|
||||
}
|
||||
|
||||
resolve_path() {
|
||||
case "$1" in
|
||||
/*) printf '%s\n' "$1" ;;
|
||||
*) printf '%s/%s\n' "$ROOT_DIR" "$1" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
apply_ownership() {
|
||||
path="$1"
|
||||
uid="$2"
|
||||
gid="$3"
|
||||
|
||||
if chown -R "$uid:$gid" "$path" 2>/dev/null; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ "$(id -u)" -eq 0 ]; then
|
||||
echo "WARN: cannot chown $path to $uid:$gid." >&2
|
||||
return 0
|
||||
fi
|
||||
|
||||
if command -v sudo >/dev/null 2>&1; then
|
||||
if sudo -n chown -R "$uid:$gid" "$path" 2>/dev/null; then
|
||||
return 0
|
||||
fi
|
||||
echo "WARN: sudo cannot chown $path to $uid:$gid without a password." >&2
|
||||
echo "WARN: run this script with sudo if the service cannot write this path." >&2
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo "WARN: cannot chown $path to $uid:$gid; rerun as root or install sudo." >&2
|
||||
}
|
||||
|
||||
prepare_dir() {
|
||||
path="$1"
|
||||
uid="$2"
|
||||
gid="$3"
|
||||
mode="$4"
|
||||
|
||||
mkdir -p "$path"
|
||||
apply_ownership "$path" "$uid" "$gid"
|
||||
chmod "$mode" "$path"
|
||||
echo "Prepared $path as $uid:$gid mode $mode"
|
||||
}
|
||||
|
||||
load_env_file
|
||||
|
||||
prepare_dir "$(resolve_path "$DB_DATA_PATH")" "$MARIADB_VOLUME_UID" "$MARIADB_VOLUME_GID" 750
|
||||
prepare_dir "$(resolve_path "$WORDPRESS_DATA_PATH")" "$WORDPRESS_VOLUME_UID" "$WORDPRESS_VOLUME_GID" 755
|
||||
prepare_dir "$(resolve_path "$LETSENCRYPT_DATA_PATH")" "$CERTBOT_VOLUME_UID" "$CERTBOT_VOLUME_GID" 750
|
||||
prepare_dir "$(resolve_path "$CERTBOT_CHALLENGES_PATH")" "$CERTBOT_VOLUME_UID" "$CERTBOT_VOLUME_GID" 755
|
||||
Reference in New Issue
Block a user