Port NomadCNA city_details/content/routes seeding into PocketBase and surface full destination pages with related meetups and discussions. Co-authored-by: Cursor <cursoragent@cursor.com>
90 lines
2.4 KiB
Python
90 lines
2.4 KiB
Python
"""Upload backend hotfix files and restart API (no git commit required)."""
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
import time
|
|
from pathlib import Path
|
|
|
|
import paramiko
|
|
|
|
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
|
|
|
|
HOST = "107.173.30.245"
|
|
USER = "root"
|
|
PASS = "Xiao4669805"
|
|
REMOTE = "/opt/nomadweb"
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
|
|
FILES = [
|
|
"backend/app/config.py",
|
|
"backend/app/main.py",
|
|
"backend/app/services/pb_client.py",
|
|
"backend/app/services/pb_repo.py",
|
|
"backend/app/services/s3_storage.py",
|
|
"backend/app/services/ntfy_push.py",
|
|
"backend/app/services/pocketbase.py",
|
|
"backend/app/services/auth.py",
|
|
"backend/app/services/community_store.py",
|
|
"backend/app/services/social_store.py",
|
|
"backend/app/services/platform_store.py",
|
|
"backend/app/services/city_service.py",
|
|
"backend/app/data/city_details_data.py",
|
|
"backend/app/data/community_data.py",
|
|
"backend/app/routers/media.py",
|
|
"backend/app/routers/meetup_auth.py",
|
|
"backend/app/routers/api.py",
|
|
"backend/requirements.txt",
|
|
"backend/scripts/init_pb_collections.py",
|
|
"deploy/systemd/nomadro-api.service",
|
|
"deploy/nomadro-api.env.example",
|
|
]
|
|
|
|
|
|
def main() -> int:
|
|
client = paramiko.SSHClient()
|
|
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
|
client.connect(HOST, username=USER, password=PASS, timeout=30)
|
|
sftp = client.open_sftp()
|
|
|
|
for rel in FILES:
|
|
local = ROOT / rel
|
|
remote = f"{REMOTE}/{rel.replace(chr(92), '/')}"
|
|
remote_dir = "/".join(remote.split("/")[:-1])
|
|
try:
|
|
sftp.stat(remote_dir)
|
|
except OSError:
|
|
parts = remote_dir.split("/")
|
|
for i in range(2, len(parts) + 1):
|
|
p = "/".join(parts[:i])
|
|
try:
|
|
sftp.stat(p)
|
|
except OSError:
|
|
sftp.mkdir(p)
|
|
print("upload", rel)
|
|
sftp.put(str(local), remote)
|
|
|
|
sftp.close()
|
|
|
|
cmd = f"""
|
|
set -e
|
|
install -m 644 {REMOTE}/deploy/systemd/nomadro-api.service /etc/systemd/system/nomadro-api.service
|
|
systemctl daemon-reload
|
|
cd {REMOTE}/backend
|
|
.venv/bin/pip install -q -r requirements.txt
|
|
.venv/bin/python scripts/init_pb_collections.py || true
|
|
systemctl restart nomadro-api
|
|
sleep 2
|
|
curl -s http://127.0.0.1:8055/api/v1/health
|
|
"""
|
|
_, stdout, stderr = client.exec_command(cmd, timeout=180)
|
|
print(stdout.read().decode())
|
|
err = stderr.read().decode()
|
|
if err.strip():
|
|
print("ERR:", err)
|
|
client.close()
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|