#!/bin/bash # Run Orly relay using docker run (alternative to docker-compose) # Optimized for large dataset imports (20GB+) set -e CONTAINER_NAME="orly-relay" IMAGE="silberengel/next-orly:v0.58.5" # Data directory on host filesystem (change this to your desired path) # Using bind mount instead of volume for better performance with large datasets DATA_DIR="${ORLY_DATA_DIR:-/var/lib/orly}" # Create data directory if it doesn't exist mkdir -p "${DATA_DIR}" # Set ownership to UID 1000 (orly user in container) and permissions chown -R 1000:1000 "${DATA_DIR}" 2>/dev/null || { echo "Warning: Could not set ownership of ${DATA_DIR} to UID 1000" echo "You may need to run: sudo chown -R 1000:1000 ${DATA_DIR}" } chmod 755 "${DATA_DIR}" # Pull the latest image echo "Pulling ${IMAGE}..." docker pull ${IMAGE} # Check if container already exists if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then echo "Container ${CONTAINER_NAME} already exists." echo "Removing existing container..." docker rm -f ${CONTAINER_NAME} 2>/dev/null || true fi # Run the container echo "Starting ${CONTAINER_NAME}..." docker run -d \ --name ${CONTAINER_NAME} \ --restart always \ -p 127.0.0.1:3334:3334 \ -p 127.0.0.1:7777:7777 \ -v "${DATA_DIR}:/data" \ --memory=4096m \ --cpus="2.0" \ --health-cmd="curl -f http://localhost:7777/ || exit 1" \ --health-interval=10s \ --health-timeout=5s \ --health-start-period=20s \ --health-retries=3 \ -e ORLY_DATA_DIR=/data \ -e ORLY_LISTEN=0.0.0.0 \ -e ORLY_PORT=7777 \ -e ORLY_LOG_LEVEL=Info \ -e ORLY_ADMINS=npub1m4ny6hjqzepn4rxknuq94c2gpqzr29ufkkw7ttcxyak7v43n6vvsajc2jl,npub1v30tsz9vw6ylpz63g0a702nj3xa26t3m7p5us8f2y2sd8v6cnsvq465zjx,npub12umrfdjgvdxt45g0y3ghwcyfagssjrv5qlm3t6pu2aa5vydwdmwq8q0z04,npub18cddpua960qjy3wmw7y9gmzr4h3ajlrwq3k9jnmqzlxke4qkg6gqeyaztw \ -e ORLY_OWNERS=npub1m4ny6hjqzepn4rxknuq94c2gpqzr29ufkkw7ttcxyak7v43n6vvsajc2jl,npub1v30tsz9vw6ylpz63g0a702nj3xa26t3m7p5us8f2y2sd8v6cnsvq465zjx,npub12umrfdjgvdxt45g0y3ghwcyfagssjrv5qlm3t6pu2aa5vydwdmwq8q0z04,npub18cddpua960qjy3wmw7y9gmzr4h3ajlrwq3k9jnmqzlxke4qkg6gqeyaztw \ -e ORLY_ACL_MODE=follows \ -e ORLY_SPIDER_MODE=follows \ -e ORLY_RELAY_URL=wss://orly-relay.imwald.eu \ -e ORLY_SPROCKET_ENABLED=false \ -e ORLY_DB_LOG_LEVEL=error \ -e ORLY_DB_BLOCK_CACHE_MB=2048 \ -e ORLY_DB_INDEX_CACHE_MB=1024 \ -e ORLY_SERIAL_CACHE_PUBKEYS=500000 \ -e ORLY_SERIAL_CACHE_EVENT_IDS=2000000 \ -e ORLY_DB_ZSTD_LEVEL=9 \ -e ORLY_GC_ENABLED=true \ -e ORLY_GC_BATCH_SIZE=5000 \ -e ORLY_MAX_STORAGE_BYTES=107374182400 \ -e ORLY_BOOTSTRAP_RELAYS=wss://profiles.nostr1.com,wss://purplepag.es,wss://relay.nostr.band,wss://relay.damus.io \ -e ORLY_SUBSCRIPTION_ENABLED=false \ -e ORLY_MONTHLY_PRICE_SAT=0 \ -e ORLY_MAX_CONNECTIONS=1000 \ -e ORLY_MAX_EVENT_SIZE=65536 \ -e ORLY_MAX_SUBSCRIPTIONS=20 \ ${IMAGE} echo "" echo "Container started!" echo "Data directory: ${DATA_DIR}" echo "View logs: docker logs -f ${CONTAINER_NAME}" echo "Stop: docker stop ${CONTAINER_NAME}" echo "Start: docker start ${CONTAINER_NAME}" echo "Remove: docker rm -f ${CONTAINER_NAME}" echo "" echo "For large imports (20GB+), use the web UI or API:" echo " curl -X POST -F 'file=@your-events.jsonl' http://localhost:7777/api/import"