Update 99-run.sh

This commit is contained in:
Alexandre
2025-07-20 16:42:11 +02:00
committed by GitHub
parent af9492ad2b
commit 50117c8219

View File

@@ -38,34 +38,34 @@ S3_BUCKET="b2-eu-cen"
USE_EXTERNAL_DB=false USE_EXTERNAL_DB=false
if bashio::config.true 'USE_EXTERNAL_DB'; then if bashio::config.true 'USE_EXTERNAL_DB'; then
USE_EXTERNAL_DB=true USE_EXTERNAL_DB=true
bashio::log.warning "USE_EXTERNAL_DB enabled: will connect to external Postgres." bashio::log.warning "USE_EXTERNAL_DB enabled: will connect to external Postgres."
else else
bashio::log.info "Using internal Postgres." bashio::log.info "Using internal Postgres."
fi fi
DISABLE_WEB_UI=false DISABLE_WEB_UI=false
if bashio::config.true 'DISABLE_WEB_UI'; then if bashio::config.true 'DISABLE_WEB_UI'; then
DISABLE_WEB_UI=true DISABLE_WEB_UI=true
fi fi
# Active DB connection target (may be overridden below) # Active DB connection target (may be overridden below)
if $USE_EXTERNAL_DB; then if $USE_EXTERNAL_DB; then
DB_HOST="$DB_HOST_EXT" DB_HOST="$DB_HOST_EXT"
DB_PORT="$DB_PORT_EXT" DB_PORT="$DB_PORT_EXT"
else else
DB_HOST="$DB_HOST_INTERNAL" DB_HOST="$DB_HOST_INTERNAL"
DB_PORT="$DB_PORT_INTERNAL" DB_PORT="$DB_PORT_INTERNAL"
fi fi
############################################ ############################################
# Ensure persistent dirs # Ensure persistent dirs
############################################ ############################################
mkdir -p /config/ente/custom-logs \ mkdir -p /config/ente/custom-logs \
/config/data \ /config/data \
/config/minio-data \ /config/minio-data \
"$PGDATA" \ "$PGDATA" \
/config/scripts/compose /config/scripts/compose
############################################ ############################################
# Locate binaries # Locate binaries
@@ -77,8 +77,8 @@ MC_BIN="/usr/local/bin/mc"
MUSEUM_BIN="$(command -v museum || true)" MUSEUM_BIN="$(command -v museum || true)"
[ -z "$MUSEUM_BIN" ] && [ -x /app/museum ] && MUSEUM_BIN=/app/museum [ -z "$MUSEUM_BIN" ] && [ -x /app/museum ] && MUSEUM_BIN=/app/museum
[ -z "$MUSEUM_BIN" ] && [ -x /museum ] && MUSEUM_BIN=/museum [ -z "$MUSEUM_BIN" ] && [ -x /museum ] && MUSEUM_BIN=/museum
[ -z "$MUSEUM_BIN" ] && MUSEUM_BIN=museum [ -z "$MUSEUM_BIN" ] && MUSEUM_BIN=museum # fallback in PATH
WEB_PREP_BIN=/usr/local/bin/ente-web-prepare WEB_PREP_BIN=/usr/local/bin/ente-web-prepare
WEB_NGINX_CONF=/etc/ente-web/nginx.conf WEB_NGINX_CONF=/etc/ente-web/nginx.conf
@@ -87,35 +87,33 @@ WEB_NGINX_CONF=/etc/ente-web/nginx.conf
# Config generation # Config generation
############################################ ############################################
create_config() { create_config() {
bashio::log.info "Generating new museum config at $CFG" bashio::log.info "Generating new museum config at $CFG"
# small helpers _rand_b64() { head -c "$1" /dev/urandom | base64 | tr -d '\n'; }
_rand_b64() { head -c "$1" /dev/urandom | base64 | tr -d '\n'; } _rand_b64url() { head -c "$1" /dev/urandom | base64 | tr '+/' '-_' | tr -d '\n'; }
_rand_b64url() { head -c "$1" /dev/urandom | base64 | tr '+/' '-_' | tr -d '\n'; }
# Write minimal functional YAML; you can expand if you ship a richer template. cat >"$CFG" <<EOF
cat >"$CFG" <<EOF
key: key:
encryption: $(_rand_b64 32) encryption: $(_rand_b64 32)
hash: $(_rand_b64 64) hash: $(_rand_b64 64)
jwt: jwt:
secret: $(_rand_b64url 32) secret: $(_rand_b64url 32)
db: db:
host: ${DB_HOST_INTERNAL} host: ${DB_HOST_INTERNAL}
port: ${DB_PORT_INTERNAL} port: ${DB_PORT_INTERNAL}
name: ${DB_NAME} name: ${DB_NAME}
user: ${DB_USER} user: ${DB_USER}
password: ${DB_PASS} password: ${DB_PASS}
s3: s3:
are_local_buckets: true are_local_buckets: true
${S3_BUCKET}: ${S3_BUCKET}:
key: ${MINIO_USER} key: ${MINIO_USER}
secret: ${MINIO_PASS} secret: ${MINIO_PASS}
endpoint: http://127.0.0.1:3200 endpoint: http://127.0.0.1:3200
region: us-east-1 region: us-east-1
bucket: ${S3_BUCKET} bucket: ${S3_BUCKET}
EOF EOF
} }
@@ -123,151 +121,150 @@ EOF
# Postgres # Postgres
############################################ ############################################
start_postgres() { start_postgres() {
if $USE_EXTERNAL_DB; then if $USE_EXTERNAL_DB; then
bashio::log.info "External DB in use; not starting internal Postgres." bashio::log.info "External DB in use; not starting internal Postgres."
return 0 return 0
fi fi
mkdir -p /run/postgresql mkdir -p /run/postgresql
chown postgres:postgres /run/postgresql chown postgres:postgres /run/postgresql
chmod 775 /run/postgresql chmod 775 /run/postgresql
chown -R postgres:postgres "$PGDATA" chown -R postgres:postgres "$PGDATA"
chmod 0700 "$PGDATA" chmod 0700 "$PGDATA"
if [[ ! -s "$PGDATA/PG_VERSION" ]]; then if [[ ! -s "$PGDATA/PG_VERSION" ]]; then
bashio::log.info "Initializing Postgres data directory..." bashio::log.info "Initializing Postgres data directory..."
su - postgres -c "$INITDB -D $PGDATA" su - postgres -c "$INITDB -D $PGDATA"
fi fi
bashio::log.info "Starting Postgres (${DB_HOST_INTERNAL}:${DB_PORT_INTERNAL})..." bashio::log.info "Starting Postgres (${DB_HOST_INTERNAL}:${DB_PORT_INTERNAL})..."
su - postgres -c "$POSTGRES_BIN -D $PGDATA -c listen_addresses='127.0.0.1'" & su - postgres -c "$POSTGRES_BIN -D $PGDATA -c listen_addresses='127.0.0.1'" &
PG_PID=$! PG_PID=$!
} }
wait_postgres_ready() { wait_postgres_ready() {
local host port local host port
if $USE_EXTERNAL_DB; then if $USE_EXTERNAL_DB; then
host="$DB_HOST_EXT"; port="$DB_PORT_EXT" host="$DB_HOST_EXT"; port="$DB_PORT_EXT"
bashio::log.info "Waiting for EXTERNAL Postgres at ${host}:${port}..." bashio::log.info "Waiting for EXTERNAL Postgres at ${host}:${port}..."
else else
host="$DB_HOST_INTERNAL"; port="$DB_PORT_INTERNAL" host="$DB_HOST_INTERNAL"; port="$DB_PORT_INTERNAL"
bashio::log.info "Waiting for internal Postgres..." bashio::log.info "Waiting for internal Postgres..."
fi fi
until pg_isready -q -h "$host" -p "$port"; do sleep 1; done until pg_isready -q -h "$host" -p "$port"; do sleep 1; done
bashio::log.info "Postgres reachable." bashio::log.info "Postgres reachable."
} }
bootstrap_internal_db() { bootstrap_internal_db() {
if $USE_EXTERNAL_DB; then if $USE_EXTERNAL_DB; then
return 0 return 0
fi fi
bashio::log.info "Ensuring role & database exist..." bashio::log.info "Ensuring role & database exist..."
local esc_pass="${DB_PASS//\'/\'\'}"
local esc_pass="${DB_PASS//\'/\'\'}" # role
if ! psql -v ON_ERROR_STOP=1 -h "$DB_HOST_INTERNAL" -p "$DB_PORT_INTERNAL" -U postgres -tAc \
"SELECT 1 FROM pg_roles WHERE rolname = '${DB_USER}'" | grep -q 1; then
psql -v ON_ERROR_STOP=1 -h "$DB_HOST_INTERNAL" -p "$DB_PORT_INTERNAL" -U postgres \
-c "CREATE ROLE \"${DB_USER}\" LOGIN PASSWORD '${esc_pass}';"
else
psql -v ON_ERROR_STOP=1 -h "$DB_HOST_INTERNAL" -p "$DB_PORT_INTERNAL" -U postgres \
-c "ALTER ROLE \"${DB_USER}\" PASSWORD '${esc_pass}';"
fi
# role # db
if ! psql -v ON_ERROR_STOP=1 -h "$DB_HOST_INTERNAL" -p "$DB_PORT_INTERNAL" -U postgres -tAc \ if ! psql -v ON_ERROR_STOP=1 -h "$DB_HOST_INTERNAL" -p "$DB_PORT_INTERNAL" -U postgres -tAc \
"SELECT 1 FROM pg_roles WHERE rolname = '${DB_USER}'" | grep -q 1; then "SELECT 1 FROM pg_database WHERE datname = '${DB_NAME}'" | grep -q 1; then
psql -v ON_ERROR_STOP=1 -h "$DB_HOST_INTERNAL" -p "$DB_PORT_INTERNAL" -U postgres \ psql -v ON_ERROR_STOP=1 -h "$DB_HOST_INTERNAL" -p "$DB_PORT_INTERNAL" -U postgres \
-c "CREATE ROLE \"${DB_USER}\" LOGIN PASSWORD '${esc_pass}';" -c "CREATE DATABASE \"${DB_NAME}\" OWNER \"${DB_USER}\";"
else else
psql -v ON_ERROR_STOP=1 -h "$DB_HOST_INTERNAL" -p "$DB_PORT_INTERNAL" -U postgres \ psql -v ON_ERROR_STOP=1 -h "$DB_HOST_INTERNAL" -p "$DB_PORT_INTERNAL" -U postgres \
-c "ALTER ROLE \"${DB_USER}\" PASSWORD '${esc_pass}';" -c "ALTER DATABASE \"${DB_NAME}\" OWNER TO \"${DB_USER}\";"
fi fi
# db
if ! psql -v ON_ERROR_STOP=1 -h "$DB_HOST_INTERNAL" -p "$DB_PORT_INTERNAL" -U postgres -tAc \
"SELECT 1 FROM pg_database WHERE datname = '${DB_NAME}'" | grep -q 1; then
psql -v ON_ERROR_STOP=1 -h "$DB_HOST_INTERNAL" -p "$DB_PORT_INTERNAL" -U postgres \
-c "CREATE DATABASE \"${DB_NAME}\" OWNER \"${DB_USER}\";"
else
psql -v ON_ERROR_STOP=1 -h "$DB_HOST_INTERNAL" -p "$DB_PORT_INTERNAL" -U postgres \
-c "ALTER DATABASE \"${DB_NAME}\" OWNER TO \"${DB_USER}\";"
fi
} }
############################################ ############################################
# MinIO # MinIO
############################################ ############################################
start_minio() { start_minio() {
bashio::log.info "Starting MinIO (:3200)..." bashio::log.info "Starting MinIO (:3200)..."
mkdir -p /config/minio-data mkdir -p /config/minio-data
"$MINIO_BIN" server /config/minio-data --address ":3200" & "$MINIO_BIN" server /config/minio-data --address ":3200" &
MINIO_PID=$! MINIO_PID=$!
} }
wait_minio_ready_and_bucket() { wait_minio_ready_and_bucket() {
bashio::log.info "Waiting for MinIO API..." bashio::log.info "Waiting for MinIO API..."
until "$MC_BIN" alias set h0 http://127.0.0.1:3200 "$MINIO_USER" "$MINIO_PASS" 2>/dev/null; do until "$MC_BIN" alias set h0 http://127.0.0.1:3200 "$MINIO_USER" "$MINIO_PASS" 2>/dev/null; do
sleep 1 sleep 1
done done
bashio::log.info "Ensuring buckets..." bashio::log.info "Ensuring buckets..."
"$MC_BIN" mb -p "h0/${S3_BUCKET}" || true "$MC_BIN" mb -p "h0/${S3_BUCKET}" || true
"$MC_BIN" mb -p "h0/wasabi-eu-central-2-v3" || true "$MC_BIN" mb -p "h0/wasabi-eu-central-2-v3" || true
"$MC_BIN" mb -p "h0/scw-eu-fr-v3" || true "$MC_BIN" mb -p "h0/scw-eu-fr-v3" || true
bashio::log.info "MinIO buckets ready." bashio::log.info "MinIO buckets ready."
} }
############################################ ############################################
# Web (static nginx bundle) # Web (static nginx bundle)
############################################ ############################################
start_web() { start_web() {
if $DISABLE_WEB_UI; then if $DISABLE_WEB_UI; then
bashio::log.info "Web UI disabled." bashio::log.info "Web UI disabled."
return 0 return 0
fi fi
ENTE_API_ORIGIN="${ENTE_API_ORIGIN:-http://[HOST]:[PORT:8080]}" ENTE_API_ORIGIN="${ENTE_API_ORIGIN:-http://[HOST]:[PORT:8080]}"
ENTE_ALBUMS_ORIGIN="${ENTE_ALBUMS_ORIGIN:-${ENTE_API_ORIGIN}}" ENTE_ALBUMS_ORIGIN="${ENTE_ALBUMS_ORIGIN:-${ENTE_API_ORIGIN}}"
export ENTE_API_ORIGIN ENTE_ALBUMS_ORIGIN export ENTE_API_ORIGIN ENTE_ALBUMS_ORIGIN
if [ -x "$WEB_PREP_BIN" ]; then if [ -x "$WEB_PREP_BIN" ]; then
"$WEB_PREP_BIN" || bashio::log.warning "Web env substitution step failed (nonfatal)." "$WEB_PREP_BIN" || bashio::log.warning "Web env substitution step failed (nonfatal)."
else else
bashio::log.warning "Web prep helper not found ($WEB_PREP_BIN); skipping substitution." bashio::log.warning "Web prep helper not found ($WEB_PREP_BIN); skipping substitution."
fi fi
mkdir -p /run/nginx /var/log/nginx mkdir -p /run/nginx /var/log/nginx
if [ ! -f "$WEB_NGINX_CONF" ]; then if [ ! -f "$WEB_NGINX_CONF" ]; then
bashio::log.error "Missing nginx conf at $WEB_NGINX_CONF; cannot start web." bashio::log.error "Missing nginx conf at $WEB_NGINX_CONF; cannot start web."
return 1 return 1
fi fi
bashio::log.info "Starting Ente web (nginx, ports 30003004)..." bashio::log.info "Starting Ente web (nginx, ports 30003004)..."
nginx -c "$WEB_NGINX_CONF" -g 'daemon off;' & nginx -c "$WEB_NGINX_CONF" -g 'daemon off;' &
WEB_PID=$! WEB_PID=$!
} }
############################################ ############################################
# Museum (API) # Museum (API)
############################################ ############################################
start_museum_foreground() { start_museum_foreground() {
if [ ! -f "$CFG" ]; then if [ ! -f "$CFG" ]; then
bashio::log.error "$CFG missing; cannot start museum." bashio::log.error "$CFG missing; cannot start museum."
return 1 return 1
fi fi
if [ ! -x "$MUSEUM_BIN" ] && ! command -v "$MUSEUM_BIN" >/dev/null 2>&1; then if [ ! -x "$MUSEUM_BIN" ] && ! command -v "$MUSEUM_BIN" >/dev/null 2>&1; then
bashio::log.error "Museum binary not found; cannot launch Ente API." bashio::log.error "Museum binary not found; cannot launch Ente API."
return 1 return 1
fi fi
# Force env overrides (museum merges env > yaml) # Force env overrides (museum merges env > yaml)
if $USE_EXTERNAL_DB; then if $USE_EXTERNAL_DB; then
export ENTE_DB_HOST="$DB_HOST_EXT" export ENTE_DB_HOST="$DB_HOST_EXT"
export ENTE_DB_PORT="$DB_PORT_EXT" export ENTE_DB_PORT="$DB_PORT_EXT"
else else
export ENTE_DB_HOST="$DB_HOST_INTERNAL" export ENTE_DB_HOST="$DB_HOST_INTERNAL"
export ENTE_DB_PORT="$DB_PORT_INTERNAL" export ENTE_DB_PORT="$DB_PORT_INTERNAL"
fi fi
export ENTE_DB_USER="$DB_USER" export ENTE_DB_USER="$DB_USER"
export ENTE_DB_PASSWORD="$DB_PASS" export ENTE_DB_PASSWORD="$DB_PASS"
export ENTE_DB_NAME="$DB_NAME" export ENTE_DB_NAME="$DB_NAME"
export ENTE_DB_SSLMODE=disable export ENTE_DB_SSLMODE=disable
bashio::log.info "Starting museum (foreground)..." bashio::log.info "Starting museum (foreground)..."
exec "$MUSEUM_BIN" --config "$CFG" exec "$MUSEUM_BIN" --config "$CFG"
} }
############################################ ############################################
@@ -276,9 +273,9 @@ start_museum_foreground() {
bashio::log.info "=== Ente startup sequence ===" bashio::log.info "=== Ente startup sequence ==="
if [ ! -f "$CFG" ]; then if [ ! -f "$CFG" ]; then
create_config create_config
else else
bashio::log.info "Using existing $CFG." bashio::log.info "Using existing $CFG."
fi fi
start_postgres start_postgres
@@ -290,5 +287,5 @@ wait_minio_ready_and_bucket
start_web start_web
# Foreground (keeps container alive) # Foreground keeps container alive
start_museum_foreground start_museum_foreground