mirror of
https://github.com/gethomepage/homepage.git
synced 2025-05-24 02:02:35 -04:00
Chore: improve PUID/PGID support
This commit is contained in:
parent
ea37ab2f78
commit
e19efd9c4d
@ -49,7 +49,7 @@ COPY --link --chmod=755 docker-entrypoint.sh /usr/local/bin/
|
|||||||
COPY --link --from=builder --chown=1000:1000 /app/.next/standalone/ ./
|
COPY --link --from=builder --chown=1000:1000 /app/.next/standalone/ ./
|
||||||
COPY --link --from=builder --chown=1000:1000 /app/.next/static/ ./.next/static
|
COPY --link --from=builder --chown=1000:1000 /app/.next/static/ ./.next/static
|
||||||
|
|
||||||
RUN apk add --no-cache su-exec iputils-ping
|
RUN apk add --no-cache su-exec iputils-ping shadow
|
||||||
|
|
||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
ENV HOSTNAME=0.0.0.0
|
ENV HOSTNAME=0.0.0.0
|
||||||
|
@ -12,10 +12,43 @@ export PGID=${PGID:-0}
|
|||||||
|
|
||||||
export HOMEPAGE_BUILDTIME=$(date +%s)
|
export HOMEPAGE_BUILDTIME=$(date +%s)
|
||||||
|
|
||||||
# Set privileges for /app but only if pid 1 user is root and we are dropping privileges.
|
# Check ownership before chown
|
||||||
# If container is run as an unprivileged user, it means owner already handled ownership setup on their own.
|
if [ -e /app/config ]; then
|
||||||
# Running chown in that case (as non-root) will cause error
|
CURRENT_UID=$(stat -c %u /app/config)
|
||||||
[ "$(id -u)" == "0" ] && [ "${PUID}" != "0" ] && chown -R ${PUID}:${PGID} /app/config /app/public
|
CURRENT_GID=$(stat -c %g /app/config)
|
||||||
|
|
||||||
|
if [ "$CURRENT_UID" -ne "$PUID" ] || [ "$CURRENT_GID" -ne "$PGID" ]; then
|
||||||
|
echo "Fixing ownership of /app/config"
|
||||||
|
if ! chown -R "$PUID:$PGID" /app/config 2>/dev/null; then
|
||||||
|
echo "Warning: Could not chown /app/config; continuing anyway"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "/app/config already owned by correct UID/GID, skipping chown"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "/app/config does not exist; skipping ownership check"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ensure /app/config/logs exists and is owned
|
||||||
|
if [ -n "$PUID" ] && [ -n "$PGID" ]; then
|
||||||
|
mkdir -p /app/config/logs 2>/dev/null || true
|
||||||
|
if [ -d /app/config/logs ]; then
|
||||||
|
LOG_UID=$(stat -c %u /app/config/logs)
|
||||||
|
LOG_GID=$(stat -c %g /app/config/logs)
|
||||||
|
if [ "$LOG_UID" -ne "$PUID" ] || [ "$LOG_GID" -ne "$PGID" ]; then
|
||||||
|
echo "Fixing ownership of /app/config/logs"
|
||||||
|
chown -R "$PUID:$PGID" /app/config/logs 2>/dev/null || echo "Warning: Could not chown /app/config/logs"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d /app/.next ]; then
|
||||||
|
CURRENT_UID=$(stat -c %u /app/.next)
|
||||||
|
if [ "$CURRENT_UID" -ne "$PUID" ]; then
|
||||||
|
echo "Fixing ownership of /app/.next"
|
||||||
|
chown -R "$PUID:$PGID" /app/.next || echo "Warning: Could not chown /app/.next"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Drop privileges (when asked to) if root, otherwise run as current user
|
# Drop privileges (when asked to) if root, otherwise run as current user
|
||||||
if [ "$(id -u)" == "0" ] && [ "${PUID}" != "0" ]; then
|
if [ "$(id -u)" == "0" ] && [ "${PUID}" != "0" ]; then
|
||||||
|
@ -14,19 +14,29 @@ export const CONF_DIR = process.env.HOMEPAGE_CONFIG_DIR
|
|||||||
: join(process.cwd(), "config");
|
: join(process.cwd(), "config");
|
||||||
|
|
||||||
export default function checkAndCopyConfig(config) {
|
export default function checkAndCopyConfig(config) {
|
||||||
|
// Ensure config directory exists
|
||||||
if (!existsSync(CONF_DIR)) {
|
if (!existsSync(CONF_DIR)) {
|
||||||
mkdirSync(CONF_DIR, { recursive: true });
|
try {
|
||||||
|
mkdirSync(CONF_DIR, { recursive: true });
|
||||||
|
} catch (e) {
|
||||||
|
console.warn(`Could not create config directory ${CONF_DIR}: ${e.message}`);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const configYaml = join(CONF_DIR, config);
|
const configYaml = join(CONF_DIR, config);
|
||||||
|
|
||||||
|
// If the config file doesn't exist, try to copy the skeleton
|
||||||
if (!existsSync(configYaml)) {
|
if (!existsSync(configYaml)) {
|
||||||
const configSkeleton = join(process.cwd(), "src", "skeleton", config);
|
const configSkeleton = join(process.cwd(), "src", "skeleton", config);
|
||||||
try {
|
try {
|
||||||
copyFileSync(configSkeleton, configYaml);
|
copyFileSync(configSkeleton, configYaml);
|
||||||
console.info("%s was copied to the config folder", config);
|
console.info("%s was copied to the config folder", config);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error("error copying config", err);
|
console.error("❌ Failed to initialize required config: %s", configYaml);
|
||||||
throw err;
|
console.error("Reason: %s", err.message);
|
||||||
|
console.error("Hint: Make /app/config writable or manually place the config file.");
|
||||||
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user