#!/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