diff --git a/tasks/build.yml b/tasks/build.yml index 1395f66..ef8fa25 100644 --- a/tasks/build.yml +++ b/tasks/build.yml @@ -45,5 +45,6 @@ chdir: "{{ strfry_data_path }}" become: yes become_user: "{{ strfry_system_user }}" - when: git_repository.changed and strfry_data_path_stat.stat.exists - changed_when: git_repository.changed \ No newline at end of file + when: git_repository.changed and strfry_data_path_stat.stat is defined and strfry_data_path_stat.stat.exists + changed_when: git_repository.changed + failed_when: false \ No newline at end of file diff --git a/templates/strfry.conf b/templates/strfry.conf index 5c5ae9d..5c49388 100644 --- a/templates/strfry.conf +++ b/templates/strfry.conf @@ -13,31 +13,6 @@ dbParams { # Size of mmap() to use when loading LMDB (default is 10TB, does *not* correspond to disk-space used) (restart required) mapsize = {{ strfry_dbParams.mapsize }} - - # Disables read-ahead when accessing the LMDB mapping. Reduces IO activity when DB size is larger than RAM. (restart required) - noReadAhead = {{ "true" if strfry_dbParams.noReadAhead else "false" }} -} -events { - # Maximum size of normalised JSON, in bytes - maxEventSize = {{ strfry_events.maxEventSize }} - - # Events newer than this will be rejected - rejectEventsNewerThanSeconds = {{ strfry_events.rejectEventsNewerThanSeconds }} - - # Events older than this will be rejected - rejectEventsOlderThanSeconds = {{ strfry_events.rejectEventsOlderThanSeconds }} - - # Ephemeral events older than this will be rejected - rejectEphemeralEventsOlderThanSeconds = {{ strfry_events.rejectEphemeralEventsOlderThanSeconds }} - - # Ephemeral events will be deleted from the DB when older than this - ephemeralEventsLifetimeSeconds = {{ strfry_events.ephemeralEventsLifetimeSeconds }} - - # Maximum number of tags allowed - maxNumTags = {{ strfry_events.maxNumTags }} - - # Maximum size for tag values, in bytes - maxTagValSize = {{ strfry_events.maxTagValSize }} } relay { @@ -88,6 +63,9 @@ relay { writePolicy { # If non-empty, path to an executable script that implements the writePolicy plugin logic plugin = "{{ strfry_relay.writePolicy.plugin }}" + + # Number of seconds to search backwards for lookback events when starting the writePolicy plugin (0 for no lookback) + lookbackSeconds = 0 } compression { @@ -110,9 +88,6 @@ relay { # Log performance metrics for initial REQ database scans dbScanPerf = {{ "true" if strfry_relay.logging.dbScanPerf else "false" }} - - # Log reason for invalid event rejection? Can be disabled to silence excessive logging - invalidEvents = {{ "true" if strfry_relay.logging.invalidEvents else "false" }} } numThreads { @@ -125,15 +100,31 @@ relay { # reqMonitor threads: Handle filtering of new events (restart required) reqMonitor = {{ strfry_relay.numThreads.reqMonitor }} - # negentropy threads: Handle negentropy protocol messages (restart required) - negentropy = {{ strfry_relay.numThreads.negentropy }} - } - negentropy { - # Support negentropy protocol messages - enabled = {{ "true" if strfry_relay.negentropy.enabled else "false" }} - - # Maximum records that sync will process before returning an error - maxSyncEvents = {{ strfry_relay.negentropy.maxSyncEvents }} + # yesstr threads: Experimental yesstr protocol (restart required) + yesstr = 1 } } + +events { + # Maximum size of normalised JSON, in bytes + maxEventSize = {{ strfry_events.maxEventSize }} + + # Events newer than this will be rejected + rejectEventsNewerThanSeconds = {{ strfry_events.rejectEventsNewerThanSeconds }} + + # Events older than this will be rejected + rejectEventsOlderThanSeconds = {{ strfry_events.rejectEventsOlderThanSeconds }} + + # Ephemeral events older than this will be rejected + rejectEphemeralEventsOlderThanSeconds = {{ strfry_events.rejectEphemeralEventsOlderThanSeconds }} + + # Ephemeral events will be deleted from the DB when older than this + ephemeralEventsLifetimeSeconds = {{ strfry_events.ephemeralEventsLifetimeSeconds }} + + # Maximum number of tags allowed + maxNumTags = {{ strfry_events.maxNumTags }} + + # Maximum size for tag values, in bytes + maxTagValSize = {{ strfry_events.maxTagValSize }} +} \ No newline at end of file diff --git a/templates/update.conf b/templates/update.conf new file mode 100644 index 0000000..4f1ad39 --- /dev/null +++ b/templates/update.conf @@ -0,0 +1,127 @@ +## +## Default strfry config +## + +# Directory that contains the strfry LMDB database (restart required) +db = "./strfry-db/" + +dbParams { + # Maximum number of threads/processes that can simultaneously have LMDB transactions open (restart required) + maxreaders = 256 + + # Size of mmap() to use when loading LMDB (default is 10TB, does *not* correspond to disk-space used) (restart required) + mapsize = 10995116277760 +} + +relay { + # Interface to listen on. Use 0.0.0.0 to listen on all interfaces (restart required) + bind = "127.0.0.1" + + # Port to open for the nostr websocket protocol (restart required) + port = 7777 + + # Set OS-limit on maximum number of open files/sockets (if 0, don't attempt to set) (restart required) + nofiles = 1000000 + + # HTTP header that contains the client's real IP, before reverse proxying (ie x-real-ip) (MUST be all lower-case) + realIpHeader = "" + + info { + # NIP-11: Name of this server. Short/descriptive (< 30 characters) + name = "strfry default" + + # NIP-11: Detailed information about relay, free-form + description = "This is a strfry instance." + + # NIP-11: Administrative nostr pubkey, for contact purposes + pubkey = "unset" + + # NIP-11: Alternative administrative contact (email, website, etc) + contact = "unset" + } + + # Maximum accepted incoming websocket frame size (should be larger than max event and yesstr msg) (restart required) + maxWebsocketPayloadSize = 131072 + + # Websocket-level PING message frequency (should be less than any reverse proxy idle timeouts) (restart required) + autoPingSeconds = 55 + + # If TCP keep-alive should be enabled (detect dropped connections to upstream reverse proxy) + enableTcpKeepalive = false + + # How much uninterrupted CPU time a REQ query should get during its DB scan + queryTimesliceBudgetMicroseconds = 10000 + + # Maximum records that can be returned per filter + maxFilterLimit = 500 + + # Maximum number of subscriptions (concurrent REQs) a connection can have open at any time + maxSubsPerConnection = 20 + + writePolicy { + # If non-empty, path to an executable script that implements the writePolicy plugin logic + plugin = "" + + # Number of seconds to search backwards for lookback events when starting the writePolicy plugin (0 for no lookback) + lookbackSeconds = 0 + } + + compression { + # Use permessage-deflate compression if supported by client. Reduces bandwidth, but slight increase in CPU (restart required) + enabled = true + + # Maintain a sliding window buffer for each connection. Improves compression, but uses more memory (restart required) + slidingWindow = true + } + + logging { + # Dump all incoming messages + dumpInAll = false + + # Dump all incoming EVENT messages + dumpInEvents = false + + # Dump all incoming REQ/CLOSE messages + dumpInReqs = false + + # Log performance metrics for initial REQ database scans + dbScanPerf = false + } + + numThreads { + # Ingester threads: route incoming requests, validate events/sigs (restart required) + ingester = 3 + + # reqWorker threads: Handle initial DB scan for events (restart required) + reqWorker = 3 + + # reqMonitor threads: Handle filtering of new events (restart required) + reqMonitor = 3 + + # yesstr threads: Experimental yesstr protocol (restart required) + yesstr = 1 + } +} + +events { + # Maximum size of normalised JSON, in bytes + maxEventSize = 65536 + + # Events newer than this will be rejected + rejectEventsNewerThanSeconds = 900 + + # Events older than this will be rejected + rejectEventsOlderThanSeconds = 94608000 + + # Ephemeral events older than this will be rejected + rejectEphemeralEventsOlderThanSeconds = 60 + + # Ephemeral events will be deleted from the DB when older than this + ephemeralEventsLifetimeSeconds = 300 + + # Maximum number of tags allowed + maxNumTags = 2000 + + # Maximum size for tag values, in bytes + maxTagValSize = 1024 +} \ No newline at end of file