SilverSight/scripts/deploy_anytype.py
allaun 85141a4b94 feat(nuvmap,braid): NUVMAP port + Rossby/Kelvin braid correspondence
- Port NUVMAP projection engine from Research Stack to SilverSight
  with Q16_16 fixed-point (zero Float) and CBOR serialization
- Add Rotational Wave — Braid Correspondence formalization at boundary
  (ChiralLabel, RossbyDrift, rossby_convergence_bound stubbed,
   kelvin_wave_eigensolid proven)
- Add auto-pipeline CI workflow, webhook receiver, Forgejo MCP server
- Add SOPS/Age encryption config
- Add stack compose for portable deployment
- Add rotational wave design doc
2026-06-30 16:38:11 -05:00

127 lines
3.5 KiB
Python

#!/usr/bin/env python3
"""Deploy Anytype Sync Server on neon-64gb."""
import subprocess, os, tempfile, json
HOST = "allaun@100.92.88.64"
def sh(cmd, timeout=60):
r = subprocess.run(["ssh", "-o", "ConnectTimeout=10", HOST, cmd],
capture_output=True, text=True, timeout=timeout)
out = r.stdout.strip()[:300]
err = r.stderr.strip()[:200]
if out: print(f" {out}")
if err: print(f" ! {err}")
return r.returncode == 0
def scp_put(content, remote_path):
with tempfile.NamedTemporaryFile(mode='w', delete=False) as f:
f.write(content)
lpath = f.name
subprocess.run(["scp", lpath, f"{HOST}:{remote_path}"],
capture_output=True, timeout=30)
os.unlink(lpath)
print("=== 1. Install any-sync-network ===")
sh("""
curl -sL https://github.com/anyproto/any-sync-tools/releases/download/v0.6.1/any-sync-tools-0.6.1.linux-arm64.tgz -o /tmp/any-sync-tools.tgz
tar xzf /tmp/any-sync-tools.tgz -C /tmp/
sudo cp /tmp/any-sync-network /usr/local/bin/ 2>/dev/null || cp /tmp/any-sync-network ~/.local/bin/ 2>/dev/null || true
export PATH=$PATH:$HOME/.local/bin
which any-sync-network
""")
print("=== 2. Generate configs ===")
sh("mkdir -p /home/allaun/any-sync-config")
default_template = """external-addresses:
- 100.92.88.64
any-sync-coordinator:
listen: 0.0.0.0
yamuxPort: 4830
quicPort: 5830
mongo:
connect: mongodb://localhost:27017
database: coordinator
defaultLimits:
spaceMembersRead: 1000
spaceMembersWrite: 1000
sharedSpacesLimit: 1000
any-sync-consensusnode:
listen: 0.0.0.0
yamuxPort: 4530
quicPort: 5530
mongo:
connect: mongodb://localhost:27017/?w=majority
database: consensus
any-sync-filenode:
listen: 0.0.0.0
yamuxPort: 4730
quicPort: 5730
s3Store:
endpoint: http://localhost:9000
bucket: anytype
indexBucket: anytype-index
region: us-east-1
profile: default
forcePathStyle: true
redis:
url: redis://localhost:6379?dial_timeout=3&read_timeout=6s
defaultLimit: 1099511627776
any-sync-node:
listen:
- 0.0.0.0
yamuxPort:
- 4430
quicPort:
- 5430
"""
scp_put(default_template, "/home/allaun/any-sync-config/defaultTemplate.yml")
print("=== 3. Generate auto config ===")
sh("""
export PATH=$PATH:$HOME/.local/bin
any-sync-network create --auto --conf /home/allaun/any-sync-config/defaultTemplate.yml --dir /home/allaun/any-sync-config 2>&1 || true
ls -la /home/allaun/any-sync-config/
""")
print("=== 4. Start MongoDB (replica set) ===")
sh("""
podman rm -f anytype-mongo 2>/dev/null
podman run -d --name anytype-mongo --network host \
docker.io/mongo:7 --replSet rs0 --bind_ip 0.0.0.0 2>&1
""")
subprocess.run(["sleep", "10"])
print("=== 5. Init MongoDB replica set ===")
sh('''
podman exec anytype-mongo mongosh --quiet --eval 'rs.initiate({_id:"rs0",members:[{_id:0,host:"localhost:27017"}]})' 2>&1 | head -5
''')
print("=== 6. Start Coordinator ===")
sh("""
podman rm -f any-sync-coordinator 2>/dev/null
podman run -d --name any-sync-coordinator --network host \
-v /home/allaun/any-sync-config:/etc/any-sync:ro \
docker.io/anyproto/any-sync-coordinator:v0.9.1
""")
print("=== 7. Start Sync Node ===")
sh("""
podman rm -f any-sync-node-1 2>/dev/null
podman run -d --name any-sync-node-1 --network host \
-v /home/allaun/any-sync-config:/etc/any-sync:ro \
docker.io/anyproto/any-sync-node:v0.11.1
""")
subprocess.run(["sleep", "10"])
print("=== Status ===")
sh("podman ps --format 'table {{.Names}}\t{{.Status}}'")
sh("podman logs any-sync-coordinator 2>&1 | tail -3")
sh("podman logs any-sync-node-1 2>&1 | tail -3")