Spaces:
Running
Running
Z User commited on
Commit ·
62ec96b
1
Parent(s): 330a308
security: generate .env from Space Secrets, remove .env from build
Browse files- Dockerfile: remove COPY .env, add COPY .env.example
- start.sh: generate .env from HF Space Secrets (env vars) on first boot
- Persistent .env is preserved across rebuilds once created
- No API keys in git repo anymore
- Dockerfile +1 -3
- start.sh +27 -14
Dockerfile
CHANGED
|
@@ -75,16 +75,14 @@ RUN mkdir -p /root/.hermes/plugins/image_gen/pollinations
|
|
| 75 |
# Copy config files (to both hermes home AND /app for persistence fallback)
|
| 76 |
COPY config.yaml /root/.hermes/config.yaml
|
| 77 |
COPY SOUL.md /root/.hermes/SOUL.md
|
| 78 |
-
COPY .env /root/.hermes/.env
|
| 79 |
# Keep repo copies in /app as fallback sources for persistent storage recovery
|
| 80 |
COPY config.yaml /app/config.yaml
|
| 81 |
-
COPY .env /app/.env
|
| 82 |
COPY entry.py /app/entry.py
|
| 83 |
COPY dashboard.html /app/dashboard.html
|
| 84 |
COPY plugins/pollinations/ /root/.hermes/plugins/image_gen/pollinations/
|
| 85 |
COPY scripts/ /app/scripts/
|
| 86 |
|
| 87 |
-
RUN chmod 600 /root/.hermes/.env
|
| 88 |
|
| 89 |
# Startup script
|
| 90 |
COPY start.sh /app/start.sh
|
|
|
|
| 75 |
# Copy config files (to both hermes home AND /app for persistence fallback)
|
| 76 |
COPY config.yaml /root/.hermes/config.yaml
|
| 77 |
COPY SOUL.md /root/.hermes/SOUL.md
|
|
|
|
| 78 |
# Keep repo copies in /app as fallback sources for persistent storage recovery
|
| 79 |
COPY config.yaml /app/config.yaml
|
| 80 |
+
COPY .env.example /app/.env.example
|
| 81 |
COPY entry.py /app/entry.py
|
| 82 |
COPY dashboard.html /app/dashboard.html
|
| 83 |
COPY plugins/pollinations/ /root/.hermes/plugins/image_gen/pollinations/
|
| 84 |
COPY scripts/ /app/scripts/
|
| 85 |
|
|
|
|
| 86 |
|
| 87 |
# Startup script
|
| 88 |
COPY start.sh /app/start.sh
|
start.sh
CHANGED
|
@@ -52,24 +52,37 @@ if [ -z "$WEIXIN_ACCOUNT_ID" ]; then
|
|
| 52 |
fi
|
| 53 |
fi
|
| 54 |
|
| 55 |
-
#
|
| 56 |
-
#
|
| 57 |
-
#
|
| 58 |
ENV_FILE="$HERMES_HOME/.env"
|
| 59 |
ENV_DATA="/data/hermes/.env"
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 63 |
chmod 600 "$ENV_DATA"
|
| 64 |
-
echo "
|
| 65 |
-
elif [ -L "$ENV_FILE" ] && [ ! -f "$ENV_DATA" ]; then
|
| 66 |
-
# Symlink exists but target is missing (data cleared) — recreate from repo copy
|
| 67 |
-
if [ -f "/app/.env" ]; then
|
| 68 |
-
cp "/app/.env" "$ENV_DATA"
|
| 69 |
-
chmod 600 "$ENV_DATA"
|
| 70 |
-
echo "Restored .env from repo fallback"
|
| 71 |
-
fi
|
| 72 |
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 73 |
if [ ! -L "$ENV_FILE" ]; then
|
| 74 |
rm -f "$ENV_FILE"
|
| 75 |
ln -sf "$ENV_DATA" "$ENV_FILE"
|
|
|
|
| 52 |
fi
|
| 53 |
fi
|
| 54 |
|
| 55 |
+
# -- Persist .env across container rebuilds --
|
| 56 |
+
# Priority: Space Secrets (env vars) > persistent storage
|
| 57 |
+
# SECURITY: .env is NO LONGER in git repo -- use HF Space Secrets
|
| 58 |
ENV_FILE="$HERMES_HOME/.env"
|
| 59 |
ENV_DATA="/data/hermes/.env"
|
| 60 |
+
|
| 61 |
+
# Generate .env from Space Secrets (environment variables injected by HF)
|
| 62 |
+
if [ ! -f "$ENV_DATA" ] && [ -n "$OPENROUTER_API_KEY" ]; then
|
| 63 |
+
echo "Generating .env from Space Secrets..."
|
| 64 |
+
{
|
| 65 |
+
echo "OPENROUTER_API_KEY=$OPENROUTER_API_KEY"
|
| 66 |
+
[ -n "$OPENAI_API_KEY" ] && echo "OPENAI_API_KEY=$OPENAI_API_KEY"
|
| 67 |
+
[ -n "$OPENAI_BASE_URL" ] && echo "OPENAI_BASE_URL=$OPENAI_BASE_URL"
|
| 68 |
+
[ -n "$FEISHU_APP_ID" ] && echo "FEISHU_APP_ID=$FEISHU_APP_ID"
|
| 69 |
+
[ -n "$FEISHU_APP_SECRET" ] && echo "FEISHU_APP_SECRET=$FEISHU_APP_SECRET"
|
| 70 |
+
echo "GATEWAY_ALLOW_ALL_USERS=true"
|
| 71 |
+
echo "HERMES_ACCEPT_HOOKS=1"
|
| 72 |
+
[ -n "$MEMPALACE_PALACE_PATH" ] && echo "MEMPALACE_PALACE_PATH=$MEMPALACE_PALACE_PATH"
|
| 73 |
+
[ -n "$FIRECRAWL_API_KEY" ] && echo "FIRECRAWL_API_KEY=$FIRECRAWL_API_KEY"
|
| 74 |
+
} > "$ENV_DATA"
|
| 75 |
chmod 600 "$ENV_DATA"
|
| 76 |
+
echo "Created .env from Space Secrets"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 77 |
fi
|
| 78 |
+
|
| 79 |
+
# Fallback: if no secrets and no persistent data
|
| 80 |
+
if [ ! -f "$ENV_DATA" ] && [ -f "/app/.env.example" ]; then
|
| 81 |
+
cp "/app/.env.example" "$ENV_DATA"
|
| 82 |
+
echo "WARNING: No .env found. Set API keys via HF Space Secrets!"
|
| 83 |
+
fi
|
| 84 |
+
|
| 85 |
+
# Always symlink
|
| 86 |
if [ ! -L "$ENV_FILE" ]; then
|
| 87 |
rm -f "$ENV_FILE"
|
| 88 |
ln -sf "$ENV_DATA" "$ENV_FILE"
|