From 2e1d731de44d57367648b07c5630c06784e20493 Mon Sep 17 00:00:00 2001 From: Laan Tungir Date: Fri, 31 Jul 2026 11:12:21 -0400 Subject: [PATCH] v2.1.25 - Fix: insert missing config keys on existing-relay startup, preserve config.php in deploy_lt.sh --- caching/src/forward_catchup.c | 1 + deploy_lt.sh | 68 +++++++++++++++++++++++++++++++++++ relay.pid | 2 +- src/main.c | 9 +++++ src/main.h | 4 +-- 5 files changed, 81 insertions(+), 3 deletions(-) diff --git a/caching/src/forward_catchup.c b/caching/src/forward_catchup.c index f03605d..051b42d 100644 --- a/caching/src/forward_catchup.c +++ b/caching/src/forward_catchup.c @@ -6,6 +6,7 @@ #include "forward_catchup.h" #include "pg_inbox.h" #include "config.h" +#include "follow_graph.h" #include "relay_sink.h" #include "debug.h" diff --git a/deploy_lt.sh b/deploy_lt.sh index 414e62d..f6bdbc4 100755 --- a/deploy_lt.sh +++ b/deploy_lt.sh @@ -47,6 +47,16 @@ else echo "WARNING: caching_relay binary not found locally ($LOCAL_CACHING_BINARY) — skipping caching binary upload" fi +# Upload admin PHP files (tar to preserve directory structure, exclude +# cache logs and the dev-only serve.sh / php_server.log). +echo "==> Packaging admin files" +tar czf /tmp/admin_deploy.tar.gz \ + --exclude='admin/serve.sh' \ + --exclude='admin/php_server.log' \ + --exclude='admin/cache' \ + -C . admin/ +scp /tmp/admin_deploy.tar.gz "$REMOTE_HOST:/tmp/admin_deploy.tar.gz" + echo "==> Running remote install/configuration" ssh "$REMOTE_HOST" 'bash -s' <<'EOF' set -euo pipefail @@ -102,6 +112,46 @@ else echo " -> no caching_relay binary uploaded, skipping" fi +echo "[remote] Installing admin PHP files" +# Back up existing config.php and .htpasswd so we don't lose production +# credentials (DB password, basic-auth) across deploys. +if [ -f /opt/c-relay-pg/admin/lib/config.php ]; then + sudo cp /opt/c-relay-pg/admin/lib/config.php /tmp/admin_config_backup + echo " -> backed up config.php" +fi +if [ -f /opt/c-relay-pg/admin/.htpasswd ]; then + sudo cp /opt/c-relay-pg/admin/.htpasswd /tmp/admin_htpasswd_backup + echo " -> backed up .htpasswd" +fi +# Extract the new admin files (overwrites old admin at /opt/c-relay-pg/admin/). +sudo mkdir -p /opt/c-relay-pg/admin +sudo tar xzf /tmp/admin_deploy.tar.gz -C /opt/c-relay-pg/ +# Restore config.php and .htpasswd if they were backed up. +if [ -f /tmp/admin_config_backup ]; then + sudo cp /tmp/admin_config_backup /opt/c-relay-pg/admin/lib/config.php + echo " -> restored config.php" +fi +if [ -f /tmp/admin_htpasswd_backup ]; then + sudo cp /tmp/admin_htpasswd_backup /opt/c-relay-pg/admin/.htpasswd + echo " -> restored .htpasswd" +fi +# Set ownership: www-data (nginx/php-fpm) for web-served files, +# but keep .htpasswd readable by nginx. +sudo chown -R www-data:www-data /opt/c-relay-pg/admin/ +sudo chmod 640 /opt/c-relay-pg/admin/.htpasswd 2>/dev/null || true +# Ensure the cache directory exists (for chart text files). +sudo mkdir -p /opt/c-relay-pg/admin/cache +sudo chown www-data:www-data /opt/c-relay-pg/admin/cache +echo " -> admin files installed at /opt/c-relay-pg/admin/" + +# Also update admin2 if it exists (symlink or copy to keep it in sync). +if [ -d /opt/c-relay-pg/admin2 ]; then + sudo rm -rf /opt/c-relay-pg/admin2 + sudo cp -a /opt/c-relay-pg/admin /opt/c-relay-pg/admin2 + sudo chown -R www-data:www-data /opt/c-relay-pg/admin2/ + echo " -> admin2 synced at /opt/c-relay-pg/admin2/" +fi + echo "[remote] Installing systemd unit" sudo mv /tmp/c-relay-pg.service /etc/systemd/system/c-relay-pg.service sudo chown root:root /etc/systemd/system/c-relay-pg.service @@ -130,6 +180,24 @@ sudo systemctl restart "$SERVICE_NAME" echo "[remote] Health checks" sudo systemctl --no-pager --full status "$SERVICE_NAME" | sed -n '1,25p' sudo -u "$RELAY_USER" psql -d crelay -c "SELECT current_user, current_database();" + +# Verify admin page is accessible (HTTP 200 or 401 = auth required, both are OK). +ADMIN_CODE=$(curl -s -o /dev/null -w "%{http_code}" "http://127.0.0.1/admin/" 2>/dev/null || echo "000") +if [ "$ADMIN_CODE" = "200" ] || [ "$ADMIN_CODE" = "401" ]; then + echo " -> admin page accessible (HTTP $ADMIN_CODE)" +else + echo " -> WARNING: admin page returned HTTP $ADMIN_CODE (expected 200 or 401)" +fi + +# Clean up temp files. +rm -f /tmp/admin_deploy.tar.gz +sudo rm -f /tmp/admin_htpasswd_backup /tmp/admin_config_backup EOF +# Clean up local temp tarball. +rm -f /tmp/admin_deploy.tar.gz + echo "Deployment complete: $REMOTE_HOST" +echo "" +echo "Admin interface: https://laantungir.net/admin/" +echo "Caching is NOT auto-started. Enable it via the admin UI when ready." diff --git a/relay.pid b/relay.pid index c3d81e9..81e29ac 100644 --- a/relay.pid +++ b/relay.pid @@ -1 +1 @@ -2276497 +2356597 diff --git a/src/main.c b/src/main.c index ef3720b..f2a53ee 100644 --- a/src/main.c +++ b/src/main.c @@ -2815,6 +2815,15 @@ int main(int argc, char* argv[]) { } DEBUG_INFO("Synchronized relay_version to %s", CRELAY_VERSION); + // Insert any config keys that were added in newer versions but are + // missing from this existing database (e.g. caching_* keys added after + // the relay was first deployed). This only inserts MISSING keys — + // existing values are preserved. + int added = populate_default_config_values(); + if (added > 0) { + DEBUG_INFO("Inserted %d missing default config keys", added); + } + // Apply CLI overrides atomically (now that database is initialized) if (apply_cli_overrides_atomic(&cli_options) != 0) { DEBUG_ERROR("Failed to apply CLI overrides for existing relay"); diff --git a/src/main.h b/src/main.h index 3736339..d243fc0 100644 --- a/src/main.h +++ b/src/main.h @@ -13,8 +13,8 @@ // Using CRELAY_ prefix to avoid conflicts with nostr_core_lib VERSION macros #define CRELAY_VERSION_MAJOR 2 #define CRELAY_VERSION_MINOR 1 -#define CRELAY_VERSION_PATCH 24 -#define CRELAY_VERSION "v2.1.24" +#define CRELAY_VERSION_PATCH 25 +#define CRELAY_VERSION "v2.1.25" // Relay metadata (authoritative source for NIP-11 information) #define RELAY_NAME "C-Relay-PG"